Name: series-workflowgv5xl Phase: Succeeded StartedAt: 2026-09-09 11:43:51 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[0] Phase: Succeeded StartedAt: 2026-09-09 11:43:51 +0000 UTC FinishedAt: 2026-09-09 12:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 11:43:51 +0000 UTC FinishedAt: 2026-09-09 12:47:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "53f2ec72-765e-4a1f-b386-c21cb02b968f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__hfs_ext_write_extent", "hfs_ext_write_extent", "hfs_extend_file", "hfs_file_truncate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faGZzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzX2V4dGVuZF9maWxlJiMzNDssCiAgICAmIzM0O2hmc19maWxlX3RydW5jYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHNgIGludG8gYSBibm9kZS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyB3aGVyZSBgZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4gU3VjaCBidWZmZXIgb3Zlci1yZWFkcyBhcmUgbWVtb3J5IGJvdW5kYXJ5IGlzc3VlcyBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSB1c2VyLXNwYWNlIGNvcGllcywgb3IgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGFuZGxpbmcsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvZXh0ZW50LmMgYi9mcy9oZnMvZXh0ZW50LmNcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvZXh0ZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9leHRlbnQuY1xuQEAgLTEyNiw2ICYjNDM7MTI2LDggQEAgc3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzX2V4dGVudF9yZWMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRlbmRfZmlsZSYjMzQ7LAogICAgJiMzNDtoZnNfZmlsZV90cnVuY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuYwppbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NAotLS0gYS9mcy9oZnMvZXh0ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2V4dGVudC5jCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiAJfSBlbHNlIHsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHMsIGZkLSZndDtlbnRyeW9mZnNldCwgZmQtJmd0O2VudHJ5bGVuZ3RoKTsKIAkJSEZTX0koaW5vZGUpLSZndDtmbGFncyAmYW1wOz0gfkhGU19GTEdfRVhUX0RJUlRZOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMAoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBIRlMmIzQzOyBFeHRlbnQgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBUaGlzIHJlcXVpcmVzIGEgZm9jdXNlZCBhcHByb2FjaCwgc28gSSYjMzk7bSB0aGlua2luZzogbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgZnMvaGZzL2V4dGVudC5jYCBmaWxlLiBHaXZlbiB0aGUgZG9tYWluLCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZ3Jhc3AgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3QuCgpUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBhIGRpcmVjdCBpbnNwZWN0aW9uIG9mIHRoZSBjaGFuZ2VzLCBzbyBJJiMzOTtsbCBiZWdpbiBieSBhbmFseXppbmcgdGhlIGdpdCBkaWZmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBmYXZvcml0ZSB0b29scyBmb3IgZGVlcGVyIGFuYWx5c2lzIGhlcmUsIHNvIEkmIzM5O20gdGhpbmtpbmcgZWl0aGVyIGEgcmVsaWFibGUgYHJlYWQtZmlsZWAgdG8gdmlldyB0aGUgY29kZSwgb3IgcGVyaGFwcyBhIG1vcmUgZm9jdXNlZCBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIGNhbGxzIHRvIHRoZSBhZmZlY3RlZCBjb2RlLgoKTmV4dCB1cCwgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgdml0YWwuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGFuZCB0byBhY2NvbXBsaXNoIHRoYXQgSSB3aWxsIHJldmlldyB0aGUgZmlsZSAoYGZzL2hmcy9leHRlbnQuY2ApIGFuZCBhbGwgaXRzIHJlbGF0ZWQgY2FsbGVycyBhbmQgS2NvbmZpZyBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiAxMTE6XHR7XG4gMTEyOlx0XHRpbnQgcmVzO1xuIDExMzpcdFxuIDExNDpcdFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXHUwMDNlaV9pbm8sIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQsXG4gMTE1Olx0XHRcdFx0ICBIRlNfSVNfUlNSQyhpbm9kZSkgPyAgSEZTX0ZLX1JTUkMgOiBIRlNfRktfREFUQSk7XG4gMTE2Olx0XHRyZXMgPSBoZnNfYnJlY19maW5kKGZkKTtcbiAxMTc6XHRcdGlmIChIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xuIDExODpcdFx0XHRpZiAocmVzICE9IC1FTk9FTlQpXG4gMTE5Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxMjA6XHRcdFx0LyogRmFpbCBlYXJseSBhbmQgYXZvaWQgRU5PU1BDIGR1cmluZyB0aGUgYnRyZWUgb3BlcmF0aW9uICovXG4gMTIxOlx0XHRcdHJlcyA9IGhmc19ibWFwX3Jlc2VydmUoZmQtXHUwMDNldHJlZSwgZmQtXHUwMDNldHJlZS1cdTAwM2VkZXB0aCAmIzQzOyAxKTtcbiAxMjI6XHRcdFx0aWYgKHJlcylcbiAxMjM6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyNDpcdFx0XHRoZnNfYnJlY19pbnNlcnQoZmQsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG4gMTI1Olx0XHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcbiAxMjY6XHRcdH0gZWxzZSB7XG4gMTI3Olx0XHRcdGlmIChyZXMpXG4gMTI4Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxMjk6XHRcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXG4gMTMwOlx0XHRcdFx0cmV0dXJuIC1FSU87XG4gMTMxOlx0XHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIDEzMjpcdFx0XHRIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XHRyZXR1cm4gMDtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gMTM4Olx0e1xuIDEzOTpcdFx0c3RydWN0IGhmc19maW5kX2RhdGEgZmQ7XG4gMTQwOlx0XHRpbnQgcmVzID0gMDtcbiAxNDE6XHRcbiAxNDI6XHRcdGlmIChIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XG4gMTQzOlx0XHRcdHJlcyA9IGhmc19maW5kX2luaXQoSEZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZWV4dF90cmVlLCBcdTAwMjZmZCk7XG4gMTQ0Olx0XHRcdGlmIChyZXMpXG4gMTQ1Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxNDY6XHRcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuIDE0NzpcdFx0XHRoZnNfZmluZF9leGl0KFx1MDAyNmZkKTtcbiAxNDg6XHRcdH1cbiAxNDk6XHRcdHJldHVybiByZXM7XG4gMTUwOlx0fVxuIDE1MTpcdFxuIDE1MjpcdHN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBoZnNfZXh0ZW50ICpleHRlbnQsXG4gMTUzOlx0XHRcdFx0XHRcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXG4gMTU0Olx0e1xuIDE1NTpcdFx0aW50IHJlcztcbiAxNTY6XHRcbiAxNTc6XHRcdGhmc19leHRfYnVpbGRfa2V5KGZkLVx1MDAzZXNlYXJjaF9rZXksIGNuaWQsIGJsb2NrLCB0eXBlKTtcbiAxNTg6XHRcdGZkLVx1MDAzZWtleS1cdTAwM2VleHQuRk51bSA9IDA7XG4gMTU5Olx0XHRyZXMgPSBoZnNfYnJlY19maW5kKGZkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYz05OT1zdGF0aWMgdTE2IGhmc19leHRfbGFzdGJsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEwOS1cbmZzL2hmcy9leHRlbnQuYzoxMTA6c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbmZzL2hmcy9leHRlbnQuYy0xMTEte1xuLS1cbmZzL2hmcy9leHRlbnQuYz0xMzc9aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTE0NS1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzL2V4dGVudC5jOjE0NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE0Ny1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTE3MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuLS1cbmZzL2hmcy9leHRlbnQuYy0xNzUtXHRpZiAoSEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xuZnMvaGZzL2V4dGVudC5jOjE3NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE3Ny1cdFx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xuZnMvaGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvaGZzL01ha2VmaWxlLTUtXG5mcy9oZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSEZTX0ZTKSAmIzQzOz0gaGZzLm9cbmZzL2hmcy9NYWtlZmlsZS03LVxuLS1cbmZzL2hmcy9oZnNfZnMuaC04LVxuZnMvaGZzL2hmc19mcy5oOjk6I2lmbmRlZiBfTElOVVhfSEZTX0ZTX0hcbmZzL2hmcy9oZnNfZnMuaDoxMDojZGVmaW5lIF9MSU5VWF9IRlNfRlNfSFxuZnMvaGZzL2hmc19mcy5oLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEhGUyYjNDM7IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBIRlMmIzQzOyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgZnMvaGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBwcm9iYWJseSBldmVuIHNvbWUgdXNlZnVsIGNvbW1lbnRhcnkgb24gdGhlaXIgZWZmZWN0cy4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IGJpYmxlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBIRlMmIzQzOyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgTWFjaW50b3NoLWZvcm1hdHRlZFxuICAxMDpcdFx0ICBmbG9wcHkgZGlza3MgYW5kIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDExOlx0XHQgIFBsZWFzZSByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XHUwMDNlIHRvIGxlYXJuIGFib3V0XG4gIDEyOlx0XHQgIHRoZSBhdmFpbGFibGUgbW91bnQgb3B0aW9ucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgaW4gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYGlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB3cml0aW5nIGNvcnJ1cHRlZCBvciBvdXQtb2YtYm91bmRzIGV4dGVudCByZWNvcmRzLiBUaGlzIGxvb2tzIGxpa2UgYSBzYW5pdHkgY2hlY2suCgpJcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzLCBkZWZpbml0ZWx5LiBUaGUgSEZTIGZpbGVzeXN0ZW0gY2FuIGJlIG1vdW50ZWQgdmlhIGEgbG9vcCBkZXZpY2UuIFN5emthbGxlciwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCBmb3IgZmlsZXN5c3RlbSBmdXp6aW5nLCBtb3VudHMgY29ycnVwdGVkIEhGUyBpbWFnZXMgcmVndWxhcmx5LiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBuZXcgY2hlY2sgd2lsbCBnZXQgdHJpZ2dlcmVkLgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvZGUgbW9kaWZpZXMgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wIG1vdW50cy4gSXQgYWxzbyB0b3VjaGVzIG9uIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBiYXNlZCBvbiB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgYWxpZ25zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBhbmQgcnVudGltZSBhc3NlcnRpb25zLiBGaWxlIHN5c3RlbXMgYXJlIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBhbnl3YXksIGdpdmVuIHRoZSBjb21wbGV4IGludGVyYWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZm9jdXMgc3ltYm9sczogYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHN0YXRpYywgYnV0IGlzIGNhbGxlZCBieSBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAuIExldCBtZSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgb3IgZXhwb3J0ZWQgc3ltYm9scywgc3VjaCBhcyBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAsIG9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBmcy9oZnMvZXh0ZW50LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVhY2hhYmxlIGVudHJ5IHBvaW50cy4gV2UgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2V4dF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL2J0cmVlLmM9MTk9c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKVxuLS1cbmZzL2hmcy9idHJlZS5jLTg3LVxuZnMvaGZzL2J0cmVlLmM6ODg6XHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0kodHJlZS1cdTAwM2Vpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cywgMCk7XG5mcy9oZnMvYnRyZWUuYy04OS1cdHN0YXJ0X2Jsb2NrID0gSEZTX1NCKHNiKS1cdTAwM2Vmc19zdGFydCAmIzQzOyAoZGJsb2NrICogSEZTX1NCKHNiKS1cdTAwM2Vmc19kaXYpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0yMC0gKi9cbmZzL2hmcy9leHRlbnQuYzoyMTpzdGF0aWMgdm9pZCBoZnNfZXh0X2J1aWxkX2tleShoZnNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLCB1MTYgYmxvY2ssIHU4IHR5cGUpXG5mcy9oZnMvZXh0ZW50LmMtMjIte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0yOS0vKlxuZnMvaGZzL2V4dGVudC5jOjMwOiAqIGhmc19leHRfY29tcGFyZSgpXG5mcy9oZnMvZXh0ZW50LmMtMzEtICpcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzktICogSW5wdXQgVmFyaWFibGUocyk6XG5mcy9oZnMvZXh0ZW50LmM6NDA6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTE6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGtleSB0byBjb21wYXJlXG5mcy9oZnMvZXh0ZW50LmM6NDE6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTI6IHBvaW50ZXIgdG8gdGhlIHNlY29uZCBrZXkgdG8gY29tcGFyZVxuZnMvaGZzL2V4dGVudC5jLTQyLSAqIE91dHB1dCBWYXJpYWJsZShzKTpcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDYtICogUHJlY29uZGl0aW9uczpcbmZzL2hmcy9leHRlbnQuYzo0NzogKiAgIGtleTEgYW5kIGtleTIgcG9pbnQgdG8gXCYjMzQ7dmFsaWRcJiMzNDsgKHN0cnVjdCBoZnNfZXh0X2tleSlzLlxuZnMvaGZzL2V4dGVudC5jLTQ4LSAqIFBvc3Rjb25kaXRpb25zOlxuZnMvaGZzL2V4dGVudC5jLTQ5LSAqICAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gc2lkZS1lZmZlY3RzICovXG5mcy9oZnMvZXh0ZW50LmM6NTA6aW50IGhmc19leHRfa2V5Y21wKGNvbnN0IGJ0cmVlX2tleSAqa2V5MSwgY29uc3QgYnRyZWVfa2V5ICprZXkyKVxuZnMvaGZzL2V4dGVudC5jLTUxLXtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNjktLypcbmZzL2hmcy9leHRlbnQuYzo3MDogKiBoZnNfZXh0X2ZpbmRfYmxvY2tcbmZzL2hmcy9leHRlbnQuYy03MS0gKlxuLS1cbmZzL2hmcy9leHRlbnQuYy03My0gKi9cbmZzL2hmcy9leHRlbnQuYzo3NDp1MTYgaGZzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQsIHUxNiBvZmYpXG5mcy9oZnMvZXh0ZW50LmMtNzUte1xuLS1cbmZzL2hmcy9leHRlbnQuYy04OC1cbmZzL2hmcy9leHRlbnQuYzo4OTpzdGF0aWMgaW50IGhmc19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc19leHRlbnQgKmV4dClcbmZzL2hmcy9leHRlbnQuYy05MC17XG4tLVxuZnMvaGZzL2V4dGVudC5jLTk4LVxuZnMvaGZzL2V4dGVudC5jOjk5OnN0YXRpYyB1MTYgaGZzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc19leHRlbnQgKmV4dClcbmZzL2hmcy9leHRlbnQuYy0xMDAte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xMDktXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG5mcy9oZnMvZXh0ZW50LmMtMTExLXtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTEzLVxuZnMvaGZzL2V4dGVudC5jOjExNDpcdGhmc19leHRfYnVpbGRfa2V5KGZkLVx1MDAzZXNlYXJjaF9rZXksIGlub2RlLVx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0LFxuZnMvaGZzL2V4dGVudC5jLTExNS1cdFx0XHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTM2LVxuZnMvaGZzL2V4dGVudC5jOjEzNzppbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmcy9leHRlbnQuYy0xMzgte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNDUtXHRcdFx0cmV0dXJuIHJlcztcbmZzL2hmcy9leHRlbnQuYzoxNDY6XHRcdHJlcyA9IF9faGZzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFx1MDAyNmZkKTtcbmZzL2hmcy9leHRlbnQuYy0xNDctXHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNTEtXG5mcy9oZnMvZXh0ZW50LmM6MTUyOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBoZnNfZXh0ZW50ICpleHRlbnQsXG5mcy9oZnMvZXh0ZW50LmMtMTUzLVx0XHRcdFx0XHR1MzIgY25pZCwgdTMyIGJsb2NrLCB1OCB0eXBlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy0xNTYtXG5mcy9oZnMvZXh0ZW50LmM6MTU3Olx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXHUwMDNlc2VhcmNoX2tleSwgY25pZCwgYmxvY2ssIHR5cGUpO1xuZnMvaGZzL2V4dGVudC5jLTE1OC1cdGZkLVx1MDAzZWtleS1cdTAwM2VleHQuRk51bSA9IDA7XG4tLVxuZnMvaGZzL2V4dGVudC5jLTE3MC1cbmZzL2hmcy9leHRlbnQuYzoxNzE6c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbmZzL2hmcy9leHRlbnQuYy0xNzIte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNzUtXHRpZiAoSEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xuZnMvaGZzL2V4dGVudC5jOjE3NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE3Ny1cdFx0aWYgKHJlcylcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTgwLVxuZnMvaGZzL2V4dGVudC5jOjE4MTpcdHJlcyA9IF9faGZzX2V4dF9yZWFkX2V4dGVudChmZCwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBpbm9kZS1cdTAwM2VpX2lubyxcbmZzL2hmcy9leHRlbnQuYy0xODItXHRcdFx0XHQgICAgYmxvY2ssIEhGU19JU19SU1JDKGlub2RlKSA/IEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xODQtXHRcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQgPSBiZTE2X3RvX2NwdShmZC1cdTAwM2VrZXktXHUwMDNlZXh0LkZBQk4pO1xuZnMvaGZzL2V4dGVudC5jOjE4NTpcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9ibG9ja3MgPSBoZnNfZXh0X2Jsb2NrX2NvdW50KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtMTg2LVx0fSBlbHNlIHtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTkyLVxuZnMvaGZzL2V4dGVudC5jOjE5MzpzdGF0aWMgaW50IGhmc19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTE2IGJsb2NrKVxuZnMvaGZzL2V4dGVudC5jLTE5NC17XG4tLVxuZnMvaGZzL2V4dGVudC5jLTIwMy1cdGlmICghcmVzKSB7XG5mcy9oZnMvZXh0ZW50LmM6MjA0Olx0XHRyZXMgPSBfX2hmc19leHRfY2FjaGVfZXh0ZW50KFx1MDAyNmZkLCBpbm9kZSwgYmxvY2spO1xuZnMvaGZzL2V4dGVudC5jLTIwNS1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTI4OT1pbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaGZzX2NhdF9maWxlICpmaWxlLCBpbnQgdHlwZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzIxLVx0ZG8ge1xuZnMvaGZzL2V4dGVudC5jOjMyMjpcdFx0cmVzID0gX19oZnNfZXh0X3JlYWRfZXh0ZW50KFx1MDAyNmZkLCBleHRlbnQsIGNuaWQsIHRvdGFsX2Jsb2NrcywgdHlwZSk7XG5mcy9oZnMvZXh0ZW50LmMtMzIzLVx0XHRpZiAocmVzKVxuLS1cbmZzL2hmcy9leHRlbnQuYz0zMzg9aW50IGhmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4tLVxuZnMvaGZzL2V4dGVudC5jLTM2Mi1cdGlmIChhYmxvY2sgXHUwMDNjIEhGU19JKGlub2RlKS1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbmZzL2hmcy9leHRlbnQuYzozNjM6XHRcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSShpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbmZzL2hmcy9leHRlbnQuYy0zNjQtXHRcdGdvdG8gZG9uZTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzY3LVx0bXV0ZXhfbG9jayhcdTAwMjZIRlNfSShpbm9kZSktXHUwMDNlZXh0ZW50c19sb2NrKTtcbmZzL2hmcy9leHRlbnQuYzozNjg6XHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xuZnMvaGZzL2V4dGVudC5jLTM2OS1cdGlmICghcmVzKVxuZnMvaGZzL2V4dGVudC5jOjM3MDpcdFx0ZGJsb2NrID0gaGZzX2V4dF9maW5kX2Jsb2NrKEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbmZzL2hmcy9leHRlbnQuYy0zNzEtXHRcdFx0XHRcdCAgICBhYmxvY2sgLSBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0KTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MzkzPWludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDAwLVx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VhbGxvY19ibG9ja3MgPT0gSEZTX0koaW5vZGUpLVx1MDAzZWZpcnN0X2Jsb2NrcylcbmZzL2hmcy9leHRlbnQuYzo0MDE6XHRcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDAyLVx0ZWxzZSB7XG5mcy9oZnMvZXh0ZW50LmM6NDAzOlx0XHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlYWxsb2NfYmxvY2tzKTtcbmZzL2hmcy9leHRlbnQuYy00MDQtXHRcdGlmIChyZXMpXG5mcy9oZnMvZXh0ZW50LmMtNDA1LVx0XHRcdGdvdG8gb3V0O1xuZnMvaGZzL2V4dGVudC5jOjQwNjpcdFx0Z29hbCA9IGhmc19leHRfbGFzdGJsb2NrKEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDA3LVx0fVxuLS1cbmZzL2hmcy9leHRlbnQuYy00NjEtXHRoZnNfZGJnKEVYVEVOVCwgXCYjMzQ7aW5zZXJ0IG5ldyBleHRlbnRcXG5cJiMzNDspO1xuZnMvaGZzL2V4dGVudC5jOjQ2MjpcdHJlcyA9IGhmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlKTtcbmZzL2hmcy9leHRlbnQuYy00NjMtXHRpZiAocmVzKVxuLS1cbmZzL2hmcy9leHRlbnQuYz00Nzg9dm9pZCBoZnNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy01MjctXHRcdH1cbmZzL2hmcy9leHRlbnQuYzo1Mjg6XHRcdHJlcyA9IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoXHUwMDI2ZmQsIGlub2RlLCBhbGxvY19jbnQpO1xuZnMvaGZzL2V4dGVudC5jLTUyOS1cdFx0aWYgKHJlcylcbi0tXG5mcy9oZnMvaGZzLmgtNTctXG5mcy9oZnMvaGZzLmg6NTg6LyogbGVnYWwgdmFsdWVzIGZvciBoZnNfZXh0X2tleS5Ga1R5cGUgYW5kIGhmc19maWxlLmZvcmsgKi9cbmZzL2hmcy9oZnMuaC01OS0jZGVmaW5lIEhGU19GS19EQVRBXHQweDAwXG4tLVxuZnMvaGZzL2hmcy5oPTE0OT1zdHJ1Y3QgaGZzX2NhdF9rZXkge1xuLS1cbmZzL2hmcy9oZnMuaC0xNTYtLyogVGhlIGtleSB1c2VkIGluIHRoZSBleHRlbnRzIGItdHJlZTogKi9cbmZzL2hmcy9oZnMuaDoxNTc6c3RydWN0IGhmc19leHRfa2V5IHtcbmZzL2hmcy9oZnMuaC0xNTgtXHR1OCBrZXlfbGVuO1x0XHQvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGtleSAqL1xuLS1cbmZzL2hmcy9oZnMuaD0xNjQ9dHlwZWRlZiB1bmlvbiBoZnNfYnRyZWVfa2V5IHtcbi0tXG5mcy9oZnMvaGZzLmgtMTY2LVx0c3RydWN0IGhmc19jYXRfa2V5IGNhdDtcbmZzL2hmcy9oZnMuaDoxNjc6XHRzdHJ1Y3QgaGZzX2V4dF9rZXkgZXh0O1xuZnMvaGZzL2hmcy5oLTE2OC19IGhmc19idHJlZV9rZXk7XG4tLVxuZnMvaGZzL2hmcy5oLTE3MC0jZGVmaW5lIEhGU19NQVhfQ0FUX0tFWUxFTlx0KHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9rZXkpIC0gc2l6ZW9mKHU4KSlcbmZzL2hmcy9oZnMuaDoxNzE6I2RlZmluZSBIRlNfTUFYX0VYVF9LRVlMRU5cdChzaXplb2Yoc3RydWN0IGhmc19leHRfa2V5KSAtIHNpemVvZih1OCkpXG5mcy9oZnMvaGZzLmgtMTcyLVxuLS1cbmZzL2hmcy9oZnNfZnMuaD0xODk9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbi0tXG5mcy9oZnMvaGZzX2ZzLmgtMTkxLS8qIGV4dGVudC5jICovXG5mcy9oZnMvaGZzX2ZzLmg6MTkyOmV4dGVybiBpbnQgaGZzX2V4dF9rZXljbXAoY29uc3QgYnRyZWVfa2V5ICosIGNvbnN0IGJ0cmVlX2tleSAqKTtcbmZzL2hmcy9oZnNfZnMuaDoxOTM6ZXh0ZXJuIHUxNiBoZnNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc19leHRlbnQgKmV4dCwgdTE2IG9mZik7XG5mcy9oZnMvaGZzX2ZzLmgtMTk0LWV4dGVybiBpbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGhmc19jYXRfZmlsZSAqLCBpbnQpO1xuZnMvaGZzL2hmc19mcy5oOjE5NTpleHRlcm4gaW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqKTtcbmZzL2hmcy9oZnNfZnMuaC0xOTYtZXh0ZXJuIGludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2hmcy9pbm9kZS5jPTQyMT1pbnQgaGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTQyOC1cdGhmc19kYmcoSU5PREUsIFwmIzM0O2hmc193cml0ZV9pbm9kZTogJWx1XFxuXCYjMzQ7LCBpbm9kZS1cdTAwM2VpX2lubyk7XG5mcy9oZnMvaW5vZGUuYzo0Mjk6XHRyZXMgPSBoZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSk7XG5mcy9oZnMvaW5vZGUuYy00MzAtXHRpZiAocmVzKVxuLS1cbmZzL2hmcy9tZGIuYz03Mz1pbnQgaGZzX21kYl9nZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnMvbWRiLmMtMTk4LVxuZnMvaGZzL21kYi5jOjE5OTpcdEhGU19TQihzYiktXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0VYVF9DTklELCBoZnNfZXh0X2tleWNtcCk7XG5mcy9oZnMvbWRiLmMtMjAwLVx0aWYgKCFIRlNfU0Ioc2IpLVx1MDAzZWV4dF90cmVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MzEKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEhGUyBFeHRlbnQgV3JpdGluZyBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIEhGUyBleHRlbnQgd3JpdGUgcGF0aC4gRmlyc3QsIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbiBjYWxscy4gSSBzZWUgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHRoZSB0YXJnZXQsIGZvdW5kIHdpdGhpbiBgZnMvaGZzL2V4dGVudC5jYC4gSXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAuIERpZ2dpbmcgZGVlcGVyLCBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIGludm9rZWQgYnkgYGhmc19leHRlbmRfZmlsZWAgYW5kIGBoZnNfd3JpdGVfaW5vZGVgLiBPbiB0aGUgb3RoZXIgaGFuZCwgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgIGlzIGNhbGxlZCBieSBgaGZzX2V4dF9yZWFkX2V4dGVudGAgd2hpY2ggaXMgdXNlZCBieSBgaGZzX2dldF9ibG9ja2AgYW5kIGBoZnNfZXh0ZW5kX2ZpbGVgICphbmQqIGJ5IGBoZnNfZmlsZV90cnVuY2F0ZWAuCgpUaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiBgaGZzX2V4dF93cml0ZV9leHRlbnRgLCBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAsIGBoZnNfZXh0ZW5kX2ZpbGVgLCBgaGZzX2ZpbGVfdHJ1bmNhdGVgLCBhbmQgYGhmc193cml0ZV9pbm9kZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgcHJvcGVybHkgZGVmaW5lZCwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgaXQmIzM5O3MgcHJlc2VudCB3aXRoaW4gdm1saW51eC9oZnMua28gKHdoaWNoIGl0IGlzLCBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbikuIEkmIzM5O2xsIGtlZXAgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGhhbmR5IGFzIGEgcmVmZXJlbmNlLgoKTmV4dCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGp1bXAgb3V0OiBgSEZTX0ZTYC4gSSBrbm93IGBIRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19IRlNfRlNgIGlzIHRoZSAqc3BlY2lmaWMqIGNvbmZpZyBmb3IgdGhpcyBIRlMgZnVuY3Rpb25hbGl0eS4gTm90aGluZyBlbHNlIHNlZW1zIGltbWVkaWF0ZWx5IG5lY2Vzc2FyeS4KCkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMuIFRoZSBwYXRjaCBhZGRzIGEgc2FmZXR5IGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAuIEl0IHZlcmlmaWVzIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGFnYWluc3QgYHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGJlZm9yZSB3cml0aW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAuIFdpdGhvdXQgaXQsIHRoZSBjb2RlIGNvdWxkIGJlIHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXItcmVhZHMgb3IgZXZlbiBjb3JydXB0ZWQgYm5vZGUgd3JpdGVzLCBlc3BlY2lhbGx5IHdpdGggbWFsaWNpb3VzbHkgY3JhZnRlZCBIRlMgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgdGVsbHMgbWUgdGhhdCBmdXp6aW5nIEhGUyBvcGVyYXRpb25zIOKAkyBsaWtlIGZpbGUgdHJ1bmNhdGlvbiwgZXh0ZW5zaW9uLCBhbmQgd3JpdGViYWNrcyDigJMgd2l0aCBzcGVjaWZpY2FsbHkgY3JhZnRlZCBmaWxlc3lzdGVtIGltYWdlcyBpcyBleHRyZW1lbHkgdmFsdWFibGUgdG8gdGVzdCB0aGUgcGF0Y2gmIzM5O3MgZWZmZWN0aXZlbmVzcyBhbmQgdG8gZGV0ZWN0IGFueSByZWdyZXNzaW9ucyB1bmRlciBwb3RlbnRpYWxseSBtYWxpY2lvdXMgaW5wdXRzLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19oZnNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNfZXh0ZW5kX2ZpbGUmIzM0OywKICAgICYjMzQ7aGZzX2ZpbGVfdHJ1bmNhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRlbmRfZmlsZSYjMzQ7LAogICAgJiMzNDtoZnNfZmlsZV90cnVuY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuYwppbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NAotLS0gYS9mcy9oZnMvZXh0ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2V4dGVudC5jCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiAJfSBlbHNlIHsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHMsIGZkLSZndDtlbnRyeW9mZnNldCwgZmQtJmd0O2VudHJ5bGVuZ3RoKTsKIAkJSEZTX0koaW5vZGUpLSZndDtmbGFncyAmYW1wOz0gfkhGU19GTEdfRVhUX0RJUlRZOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb2RlIEFuYWx5c2lzKioKClJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLCBhbG9uZ3NpZGUgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBpbXBsaWNhdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjYuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIHJlYWQtZmlsZSBmdW5jdGlvbiBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0e1xuIDEwMTpcdFx0aW50IGk7XG4gMTAyOlx0XG4gMTAzOlx0XHRleHQgJiM0Mzs9IDI7XG4gMTA0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBleHQtLSwgaSYjNDM7JiM0MzspXG4gMTA1Olx0XHRcdGlmIChleHQtXHUwMDNlY291bnQpXG4gMTA2Olx0XHRcdFx0YnJlYWs7XG4gMTA3Olx0XHRyZXR1cm4gYmUxNl90b19jcHUoZXh0LVx1MDAzZWJsb2NrKSAmIzQzOyBiZTE2X3RvX2NwdShleHQtXHUwMDNlY291bnQpO1xuIDEwODpcdH1cbiAxMDk6XHRcbiAxMTA6XHRzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIDExMTpcdHtcbiAxMTI6XHRcdGludCByZXM7XG4gMTEzOlx0XG4gMTE0Olx0XHRoZnNfZXh0X2J1aWxkX2tleShmZC1cdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cdTAwM2VpX2lubywgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9zdGFydCxcbiAxMTU6XHRcdFx0XHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbiAxMTY6XHRcdHJlcyA9IGhmc19icmVjX2ZpbmQoZmQpO1xuIDExNzpcdFx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjYgSEZTX0ZMR19FWFRfTkVXKSB7XG4gMTE4Olx0XHRcdGlmIChyZXMgIT0gLUVOT0VOVClcbiAxMTk6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyMDpcdFx0XHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cbiAxMjE6XHRcdFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cdTAwM2V0cmVlLCBmZC1cdTAwM2V0cmVlLVx1MDAzZWRlcHRoICYjNDM7IDEpO1xuIDEyMjpcdFx0XHRpZiAocmVzKVxuIDEyMzpcdFx0XHRcdHJldHVybiByZXM7XG4gMTI0Olx0XHRcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBzaXplb2YoaGZzX2V4dGVudF9yZWMpKTtcbiAxMjU6XHRcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVcpO1xuIDEyNjpcdFx0fSBlbHNlIHtcbiAxMjc6XHRcdFx0aWYgKHJlcylcbiAxMjg6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyOTpcdFx0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcbiAxMzA6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiAxMzE6XHRcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gMTMyOlx0XHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiAxMzM6XHRcdH1cbiAxMzQ6XHRcdHJldHVybiAwO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRpbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiAxMzg6XHR7XG4gMTM5Olx0XHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcbiAxNDA6XHRcdGludCByZXMgPSAwO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjYgSEZTX0ZMR19FWFRfRElSVFkpIHtcbiAxNDM6XHRcdFx0cmVzID0gaGZzX2ZpbmRfaW5pdChIRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZXh0X3RyZWUsIFx1MDAyNmZkKTtcbiAxNDQ6XHRcdFx0aWYgKHJlcylcbiAxNDU6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDE0NjpcdFx0XHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcdTAwMjZmZCk7XG4gMTQ3Olx0XHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFx0cmV0dXJuIHJlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBvcGVyYXRpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBmb3IgZXh0ZW50cy4gSXQgc2VlbXMgdGhhdCBgY2FjaGVkX2V4dGVudHNgIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGJub2RlOiB0aGUgY29kZSBleHBsaWNpdGx5IGNhbGxzIGBoZnNfYm5vZGVfd3JpdGVgIHdpdGggYGZkLSZndDtibm9kZWAsIGBIRlNfSShpbm9kZSktJmd0O2NhY2hlZF9leHRlbnRzYCwgYGZkLSZndDtlbnRyeW9mZnNldGAsIGFuZCBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBhcyBhcmd1bWVudHMuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIHByb2Nlc3MsIGJ1dCB0aGUga2V5IHF1ZXN0aW9uIHJpZ2h0IG5vdyBpczogV2hhdCB0aGUgKmhlY2sqIGlzIGBjYWNoZWRfZXh0ZW50c2A/IFRoaXMgaXMgdGhlIGNlbnRyYWwgcGllY2Ugb2YgZGF0YSBiZWluZyB3cml0dGVuLCBhbmQga25vd2luZyBpdHMgdHlwZSBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsaWNhdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYi10cmVlIHN0cnVjdHVyZS4gVGltZSB0byB1c2UgZ3JlcCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYGZzL2hmcy9gIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYWNoZWRfZXh0ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvZXh0ZW50LmM9MTEwPXN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEyMy1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzL2V4dGVudC5jOjEyNDpcdFx0aGZzX2JyZWNfaW5zZXJ0KGZkLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xuZnMvaGZzL2V4dGVudC5jLTEyNS1cdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVcpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xMzAtXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9oZnMvZXh0ZW50LmM6MTMxOlx0XHRoZnNfYm5vZGVfd3JpdGUoZmQtXHUwMDNlYm5vZGUsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbmZzL2hmcy9leHRlbnQuYy0xMzItXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MTcxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4tLVxuZnMvaGZzL2V4dGVudC5jLTE4MC1cbmZzL2hmcy9leHRlbnQuYzoxODE6XHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoZmQsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgaW5vZGUtXHUwMDNlaV9pbm8sXG5mcy9oZnMvZXh0ZW50LmMtMTgyLVx0XHRcdFx0ICAgIGJsb2NrLCBIRlNfSVNfUlNSQyhpbm9kZSkgPyBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTg0LVx0XHRIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0ID0gYmUxNl90b19jcHUoZmQtXHUwMDNla2V5LVx1MDAzZWV4dC5GQUJOKTtcbmZzL2hmcy9leHRlbnQuYzoxODU6XHRcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfYmxvY2tzID0gaGZzX2V4dF9ibG9ja19jb3VudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xuZnMvaGZzL2V4dGVudC5jLTE4Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTMzOD1pbnQgaGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzY5LVx0aWYgKCFyZXMpXG5mcy9oZnMvZXh0ZW50LmM6MzcwOlx0XHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuZnMvaGZzL2V4dGVudC5jLTM3MS1cdFx0XHRcdFx0ICAgIGFibG9jayAtIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQpO1xuLS1cbmZzL2hmcy9leHRlbnQuYz0zOTM9aW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy00MDUtXHRcdFx0Z290byBvdXQ7XG5mcy9oZnMvZXh0ZW50LmM6NDA2Olx0XHRnb2FsID0gaGZzX2V4dF9sYXN0YmxvY2soSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzKTtcbmZzL2hmcy9leHRlbnQuYy00MDctXHR9XG4tLVxuZnMvaGZzL2V4dGVudC5jLTQzNi1cdH0gZWxzZSB7XG5mcy9oZnMvZXh0ZW50LmM6NDM3Olx0XHRyZXMgPSBoZnNfYWRkX2V4dGVudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsXG5mcy9oZnMvZXh0ZW50LmMtNDM4LVx0XHRcdFx0ICAgICBIRlNfSShpbm9kZSktXHUwMDNlYWxsb2NfYmxvY2tzIC1cbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDQxLVx0XHRpZiAoIXJlcykge1xuZnMvaGZzL2V4dGVudC5jOjQ0MjpcdFx0XHRoZnNfZHVtcF9leHRlbnQoSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzKTtcbmZzL2hmcy9leHRlbnQuYy00NDMtXHRcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEhGU19GTEdfRVhUX0RJUlRZO1xuLS1cbmZzL2hmcy9leHRlbnQuYy00NjUtXG5mcy9oZnMvZXh0ZW50LmM6NDY2Olx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG5mcy9oZnMvZXh0ZW50LmM6NDY3Olx0SEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzWzBdLmJsb2NrID0gY3B1X3RvX2JlMTYoc3RhcnQpO1xuZnMvaGZzL2V4dGVudC5jOjQ2ODpcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c1swXS5jb3VudCA9IGNwdV90b19iZTE2KGxlbik7XG5mcy9oZnMvZXh0ZW50LmM6NDY5Olx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDcwLVx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEhGU19GTEdfRVhUX0RJUlRZfEhGU19GTEdfRVhUX05FVztcbi0tXG5mcy9oZnMvZXh0ZW50LmM9NDc4PXZvaWQgaGZzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNTMxLVx0XHRzdGFydCA9IEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQ7XG5mcy9oZnMvZXh0ZW50LmM6NTMyOlx0XHRoZnNfZnJlZV9leHRlbnRzKHNiLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsXG5mcy9oZnMvZXh0ZW50LmMtNTMzLVx0XHRcdFx0IGFsbG9jX2NudCAtIHN0YXJ0LCBhbGxvY19jbnQgLSBibGtfY250KTtcbmZzL2hmcy9leHRlbnQuYzo1MzQ6XHRcdGhmc19kdW1wX2V4dGVudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xuZnMvaGZzL2V4dGVudC5jLTUzNS1cdFx0aWYgKGJsa19jbnQgXHUwMDNlIHN0YXJ0KSB7XG4tLVxuZnMvaGZzL2hmc19mcy5oPTYxPXN0cnVjdCBoZnNfaW5vZGVfaW5mbyB7XG4tLVxuZnMvaGZzL2hmc19mcy5oLTgxLVx0dTE2IGZpcnN0X2Jsb2NrcztcbmZzL2hmcy9oZnNfZnMuaDo4MjpcdGhmc19leHRlbnRfcmVjIGNhY2hlZF9leHRlbnRzO1xuZnMvaGZzL2hmc19mcy5oLTgzLVx0dTE2IGNhY2hlZF9zdGFydCwgY2FjaGVkX2Jsb2Nrcztcbi0tXG5mcy9oZnMvaW5vZGUuYz0xODI9c3RydWN0IGlub2RlICpoZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTIyOS1cdFx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VmaXJzdF9leHRlbnRzLCAwLCBzaXplb2YoaGZzX2V4dGVudF9yZWMpKTtcbmZzL2hmcy9pbm9kZS5jOjIzMDpcdFx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG5mcy9oZnMvaW5vZGUuYy0yMzEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSEZTIEV4dGVudCBSZWNvcmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgZXh0ZW50IHJlY29yZHMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc19leHRlbnRfcmVjYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgZml4ZWQtc2l6ZSBzdHJ1Y3QsIGFuIGFycmF5IG9mIGV4dGVudCBkZXNjcmlwdG9ycy4gVGhlIHByb2JsZW1hdGljIGNvZGUgaXMgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnRgLCB3aGVyZSBgaGZzX2Jub2RlX3dyaXRlYCBpcyBjYWxsZWQuIFRoZSBjb3JlIGlzc3VlIGJvaWxzIGRvd24gdG8gYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXItcmVhZC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhg4oCUdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIHRvIGRpc2vigJR3YXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCwgYGhmc19ibm9kZV93cml0ZWAgd291bGQgYXR0ZW1wdCB0byByZWFkIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGJ5dGVzIGZyb20gYEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiBTaW5jZSBgY2FjaGVkX2V4dGVudHNgICppcyogb2YgYGhmc19leHRlbnRfcmVjYCBzaXplLCB0aGlzIG1lYW50IHdlIHdlcmUgZWZmZWN0aXZlbHkgcmVhZGluZyBvdXQgb2YgYm91bmRzLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQsIGFuIGV4dHJlbWVseSBjb21tb24gdnVsbmVyYWJpbGl0eS4gS0FTQU4sIGluIGZhY3QsIHNob3VsZCBkZXRlY3QgdGhpcyEKClRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzYW5pdHkgY2hlY2s6CgpgYGBjCmlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSkKICAgIHJldHVybiAtRUlPOwpgYGAKClRoaXMgcHJldmVudHMgdGhlIE9PQiByZWFkIGJ5IGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciAoLUVJTykgaWYgdGhlIGxlbmd0aHMgZG9uJiMzOTt0IG1hdGNoLiBJdOKAmXMgYSBjbGVhbiBhbmQgZGlyZWN0IGZpeC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBjb25maXJtOgoKKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIE5vcGUsIHRoZSByZXR1cm4gaGFwcGVucyBlYXJseS4KKiAgIE5vIGNvbnRyb2wgZmxvdyBjaGFuZ2VzIHRoYXQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTm8sIHRoZSByZXR1cm4gaGFwcGVucyBlYXJseS4KKiAgIE5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhIGRpc2sgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBibm9kZSBvciBidWZmZXIgY2FjaGUuCiogICBUaGlzIGlzIGRlZmluaXRlbHkgYW4gT09CIHJlYWQgZml4LCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGBmZC0mZ3Q7ZW50cnlsZW5ndGggJmd0OyBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4KCktBU0FOIHdpbGwgY2F0Y2ggdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhbiBPT0IgcmVhZCwgYW5kIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBzb3J0IG9mIG1lbW9yeSBjb3JydXB0aW9uLiBEaXNrIGNvcnJ1cHRpb24gY291bGQgaGFwcGVuIGlmIGBlbnRyeWxlbmd0aGAgaGFzIGJhZCBkYXRhLgoKSSYjMzk7bGwgYWxzbyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgY2hlY2sgdGhlIGBoZnNfYm5vZGVfd3JpdGVgIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibm9kZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYXR0ci5jPTIyPXN0YXRpYyBpbnQgX19oZnNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLFxuLS1cbmZzL2hmcy9hdHRyLmMtNjAtXHRpZiAoIXJlcylcbmZzL2hmcy9hdHRyLmM6NjE6XHRcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcbmZzL2hmcy9hdHRyLmMtNjItXHRcdFx0XHRzaXplb2Yoc3RydWN0IGhmc19jYXRfZmlsZSkpO1xuLS1cbmZzL2hmcy9ibm9kZS5jPTExND12b2lkIGhmc19ibm9kZV9yZWFkX2tleShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB2b2lkICprZXksIGludCBvZmYpXG4tLVxuZnMvaGZzL2Jub2RlLmMtMTM0LVxuZnMvaGZzL2Jub2RlLmM6MTM1OnZvaWQgaGZzX2Jub2RlX3dyaXRlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmJ1ZiwgaW50IG9mZiwgaW50IGxlbilcbmZzL2hmcy9ibm9kZS5jLTEzNi17XG4tLVxuZnMvaGZzL2Jub2RlLmMtMTU5LVxuZnMvaGZzL2Jub2RlLmM6MTYwOnZvaWQgaGZzX2Jub2RlX3dyaXRlX3UxNihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1MTYgZGF0YSlcbmZzL2hmcy9ibm9kZS5jLTE2MS17XG4tLVxuZnMvaGZzL2Jub2RlLmMtMTYzLVx0Ly8gb3B0aW1pemUgbGF0ZXIuLi5cbmZzL2hmcy9ibm9kZS5jOjE2NDpcdGhmc19ibm9kZV93cml0ZShub2RlLCBcdTAwMjZ2LCBvZmYsIDIpO1xuZnMvaGZzL2Jub2RlLmMtMTY1LX1cbmZzL2hmcy9ibm9kZS5jLTE2Ni1cbmZzL2hmcy9ibm9kZS5jOjE2Nzp2b2lkIGhmc19ibm9kZV93cml0ZV91OChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1OCBkYXRhKVxuZnMvaGZzL2Jub2RlLmMtMTY4LXtcbmZzL2hmcy9ibm9kZS5jLTE2OS1cdC8vIG9wdGltaXplIGxhdGVyLi4uXG5mcy9oZnMvYm5vZGUuYzoxNzA6XHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXHUwMDI2ZGF0YSwgb2ZmLCAxKTtcbmZzL2hmcy9ibm9kZS5jLTE3MS19XG4tLVxuZnMvaGZzL2Jub2RlLmM9Mjc3PXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmcy9ibm9kZS5jLTI4OS1cdFx0Y25pZCA9IGNwdV90b19iZTMyKHRtcC1cdTAwM2VuZXh0KTtcbmZzL2hmcy9ibm9kZS5jOjI5MDpcdFx0aGZzX2Jub2RlX3dyaXRlKHRtcCwgXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XG5mcy9oZnMvYm5vZGUuYy0yOTEtXHRcdGhmc19ibm9kZV9wdXQodG1wKTtcbi0tXG5mcy9oZnMvYm5vZGUuYy0zMDAtXHRcdGNuaWQgPSBjcHVfdG9fYmUzMih0bXAtXHUwMDNlcHJldik7XG5mcy9oZnMvYm5vZGUuYzozMDE6XHRcdGhmc19ibm9kZV93cml0ZSh0bXAsIFx1MDAyNmNuaWQsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgcHJldiksIDQpO1xuZnMvaGZzL2Jub2RlLmMtMzAyLVx0XHRoZnNfYm5vZGVfcHV0KHRtcCk7XG4tLVxuZnMvaGZzL2JyZWMuYz02NT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIGludCBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzL2JyZWMuYy0xMTItXHQvKiB3cml0ZSBuZXcgbGFzdCBvZmZzZXQgKi9cbmZzL2hmcy9icmVjLmM6MTEzOlx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG51bV9yZWNzKSwgbm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jOjExNDpcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZW5kX3JlY19vZmYsIGVuZF9vZmYgJiM0Mzsgc2l6ZSk7XG5mcy9oZnMvYnJlYy5jLTExNS1cdGRhdGFfb2ZmID0gZW5kX29mZjtcbi0tXG5mcy9oZnMvYnJlYy5jLTEyMi1cdFx0ZGF0YV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgZGF0YV9yZWNfb2ZmICYjNDM7IDIpO1xuZnMvaGZzL2JyZWMuYzoxMjM6XHRcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZGF0YV9yZWNfb2ZmLCBkYXRhX29mZiAmIzQzOyBzaXplKTtcbmZzL2hmcy9icmVjLmMtMTI0LVx0XHRkYXRhX3JlY19vZmYgJiM0Mzs9IDI7XG4tLVxuZnMvaGZzL2JyZWMuYy0xMzEtc2tpcDpcbmZzL2hmcy9icmVjLmM6MTMyOlx0aGZzX2Jub2RlX3dyaXRlKG5vZGUsIGZkLVx1MDAzZXNlYXJjaF9rZXksIGRhdGFfb2ZmLCBrZXlfbGVuKTtcbmZzL2hmcy9icmVjLmM6MTMzOlx0aGZzX2Jub2RlX3dyaXRlKG5vZGUsIGVudHJ5LCBkYXRhX29mZiAmIzQzOyBrZXlfbGVuLCBlbnRyeV9sZW4pO1xuZnMvaGZzL2JyZWMuYy0xMzQtXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbi0tXG5mcy9oZnMvYnJlYy5jPTE3Nz1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTIwOC1cdH1cbmZzL2hmcy9icmVjLmM6MjA5Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG51bV9yZWNzKSwgbm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jLTIxMC1cbi0tXG5mcy9oZnMvYnJlYy5jLTIxNi1cdFx0ZGF0YV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG5mcy9oZnMvYnJlYy5jOjIxNzpcdFx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCByZWNfb2ZmICYjNDM7IDIsIGRhdGFfb2ZmIC0gc2l6ZSk7XG5mcy9oZnMvYnJlYy5jLTIxOC1cdFx0cmVjX29mZiAtPSAyO1xuLS1cbmZzL2hmcy9icmVjLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfc3BsaXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmcy9icmVjLmMtMzA1LVx0d2hpbGUgKG51bV9yZWNzKSB7XG5mcy9oZnMvYnJlYy5jOjMwNjpcdFx0aGZzX2Jub2RlX3dyaXRlX3UxNihuZXdfbm9kZSwgbmV3X3JlY19vZmYsIG5ld19vZmYpO1xuZnMvaGZzL2JyZWMuYy0zMDctXHRcdG9sZF9yZWNfb2ZmIC09IDI7XG4tLVxuZnMvaGZzL2JyZWMuYy0zMTItXHR9XG5mcy9oZnMvYnJlYy5jOjMxMzpcdGhmc19ibm9kZV93cml0ZV91MTYobmV3X25vZGUsIG5ld19yZWNfb2ZmLCBuZXdfb2ZmKTtcbmZzL2hmcy9icmVjLmMtMzE0LVx0aGZzX2Jub2RlX2NvcHkobmV3X25vZGUsIDE0LCBub2RlLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCAtIGRhdGFfc3RhcnQpO1xuLS1cbmZzL2hmcy9icmVjLmMtMzIyLVx0bm9kZV9kZXNjLnJlc2VydmVkID0gMDtcbmZzL2hmcy9icmVjLmM6MzIzOlx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzI0LVxuLS1cbmZzL2hmcy9icmVjLmMtMzI5LVx0bm9kZV9kZXNjLm51bV9yZWNzID0gY3B1X3RvX2JlMTYobm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jOjMzMDpcdGhmc19ibm9kZV93cml0ZShub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzMxLVxuLS1cbmZzL2hmcy9icmVjLmMtMzM2LVx0XHRub2RlX2Rlc2MucHJldiA9IGNwdV90b19iZTMyKG5leHRfbm9kZS1cdTAwM2VwcmV2KTtcbmZzL2hmcy9icmVjLmM6MzM3Olx0XHRoZnNfYm5vZGVfd3JpdGUobmV4dF9ub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzM4LVx0XHRoZnNfYm5vZGVfcHV0KG5leHRfbm9kZSk7XG4tLVxuZnMvaGZzL2JyZWMuYz0zNTI9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTQwNS1cdGVuZF9vZmYgPSBzdGFydF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYocGFyZW50LCByZWNfb2ZmKTtcbmZzL2hmcy9icmVjLmM6NDA2Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihwYXJlbnQsIHJlY19vZmYsIHN0YXJ0X29mZiAmIzQzOyBkaWZmKTtcbmZzL2hmcy9icmVjLmMtNDA3LVx0c3RhcnRfb2ZmIC09IDQ7XHQvKiBtb3ZlIHByZXZpb3VzIGNuaWQgdG9vICovXG4tLVxuZnMvaGZzL2JyZWMuYy00MTEtXHRcdGVuZF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYocGFyZW50LCByZWNfb2ZmKTtcbmZzL2hmcy9icmVjLmM6NDEyOlx0XHRoZnNfYm5vZGVfd3JpdGVfdTE2KHBhcmVudCwgcmVjX29mZiwgZW5kX29mZiAmIzQzOyBkaWZmKTtcbmZzL2hmcy9icmVjLmMtNDEzLVx0fVxuLS1cbmZzL2hmcy9icmVjLmMtNDE4LVx0aWYgKCEodHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSlcbmZzL2hmcy9icmVjLmM6NDE5Olx0XHRoZnNfYm5vZGVfd3JpdGVfdTgocGFyZW50LCBmZC1cdTAwM2VrZXlvZmZzZXQsIG5ld2tleWxlbiAtIDEpO1xuZnMvaGZzL2JyZWMuYy00MjAtXHRoZnNfYm5vZGVfZHVtcChwYXJlbnQpO1xuLS1cbmZzL2hmcy9icmVjLmM9NDU4PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbi0tXG5mcy9oZnMvYnJlYy5jLTQ5Ni1cdG5vZGVfZGVzYy5yZXNlcnZlZCA9IDA7XG5mcy9oZnMvYnJlYy5jOjQ5NzpcdGhmc19ibm9kZV93cml0ZShuZXdfbm9kZSwgXHUwMDI2bm9kZV9kZXNjLCAwLCBzaXplb2Yobm9kZV9kZXNjKSk7XG5mcy9oZnMvYnJlYy5jLTQ5OC1cbmZzL2hmcy9icmVjLmMtNDk5LVx0cmVjID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuZnMvaGZzL2JyZWMuYzo1MDA6XHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCByZWMsIDE0KTtcbmZzL2hmcy9icmVjLmMtNTAxLVxuLS1cbmZzL2hmcy9icmVjLmMtNTEzLVx0XHRcdGtleV9zaXplID0gdHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAxO1xuZnMvaGZzL2JyZWMuYzo1MTQ6XHRcdFx0aGZzX2Jub2RlX3dyaXRlX3U4KG5ld19ub2RlLCAxNCwgdHJlZS1cdTAwM2VtYXhfa2V5X2xlbik7XG5mcy9oZnMvYnJlYy5jLTUxNS1cdFx0fVxuLS1cbmZzL2hmcy9icmVjLmMtNTE3LVx0XHRjbmlkID0gY3B1X3RvX2JlMzIobm9kZS1cdTAwM2V0aGlzKTtcbmZzL2hmcy9icmVjLmM6NTE4Olx0XHRoZnNfYm5vZGVfd3JpdGUobmV3X25vZGUsIFx1MDAyNmNuaWQsIDE0ICYjNDM7IGtleV9zaXplLCA0KTtcbmZzL2hmcy9icmVjLmMtNTE5LVxuZnMvaGZzL2JyZWMuYy01MjAtXHRcdHJlYyAtPSAyO1xuZnMvaGZzL2JyZWMuYzo1MjE6XHRcdGhmc19ibm9kZV93cml0ZV91MTYobmV3X25vZGUsIHJlYywgMTQgJiM0Mzsga2V5X3NpemUgJiM0MzsgNCk7XG5mcy9oZnMvYnJlYy5jLTUyMi1cbi0tXG5mcy9oZnMvYnRyZWUuYz0yMjY9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX25ld19ibWFwKHN0cnVjdCBoZnNfYm5vZGUgKnByZXYsIHUzMiBpZHgpXG4tLVxuZnMvaGZzL2J0cmVlLmMtMjQxLVx0Y25pZCA9IGNwdV90b19iZTMyKGlkeCk7XG5mcy9oZnMvYnRyZWUuYzoyNDI6XHRoZnNfYm5vZGVfd3JpdGUocHJldiwgXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XG5mcy9oZnMvYnRyZWUuYy0yNDMtXG4tLVxuZnMvaGZzL2J0cmVlLmMtMjUyLVx0ZGVzYy5yZXNlcnZlZCA9IDA7XG5mcy9oZnMvYnRyZWUuYzoyNTM6XHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXHUwMDI2ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTtcbmZzL2hmcy9idHJlZS5jOjI1NDpcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgMTQsIDB4ODAwMCk7XG5mcy9oZnMvYnRyZWUuYzoyNTU6XHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMiwgMTQpO1xuZnMvaGZzL2J0cmVlLmM6MjU2Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDQsIHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gNik7XG5mcy9oZnMvYnRyZWUuYy0yNTctXG4tLVxuZnMvaGZzL2J0cmVlLmg9MTAwPWV4dGVybiB2b2lkIGhmc19ibm9kZV9yZWFkX2tleShzdHJ1Y3QgaGZzX2Jub2RlICosIHZvaWQgKiwgaW50KTtcbmZzL2hmcy9idHJlZS5oOjEwMTpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGUoc3RydWN0IGhmc19ibm9kZSAqLCB2b2lkICosIGludCwgaW50KTtcbmZzL2hmcy9idHJlZS5oOjEwMjpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTE2KHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCB1MTYpO1xuZnMvaGZzL2J0cmVlLmg6MTAzOmV4dGVybiB2b2lkIGhmc19ibm9kZV93cml0ZV91OChzdHJ1Y3QgaGZzX2Jub2RlICosIGludCwgdTgpO1xuZnMvaGZzL2J0cmVlLmgtMTA0LWV4dGVybiB2b2lkIGhmc19ibm9kZV9jbGVhcihzdHJ1Y3QgaGZzX2Jub2RlICosIGludCwgaW50KTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MTEwPXN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEzMC1cdFx0XHRyZXR1cm4gLUVJTztcbmZzL2hmcy9leHRlbnQuYzoxMzE6XHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuZnMvaGZzL2V4dGVudC5jLTEzMi1cdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xuLS1cbmZzL2hmcy9pbm9kZS5jPTQyMT1pbnQgaGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTQ3Ny1cbmZzL2hmcy9pbm9kZS5jOjQ3ODpcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcdTAwMjZyZWMsIGZkLmVudHJ5b2Zmc2V0LFxuZnMvaGZzL2lub2RlLmMtNDc5LVx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGhmc19jYXRfZGlyKSk7XG4tLVxuZnMvaGZzL2lub2RlLmMtNDg2LVx0XHRcdFx0ICAgICBcdTAwMjZyZWMuZmlsZS5STGdMZW4sIFx1MDAyNnJlYy5maWxlLlJQeUxlbik7XG5mcy9oZnMvaW5vZGUuYzo0ODc6XHRcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcbmZzL2hmcy9pbm9kZS5jLTQ4OC1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XG4tLVxuZnMvaGZzL2lub2RlLmMtNTA0LVxuZnMvaGZzL2lub2RlLmM6NTA1Olx0XHRoZnNfYm5vZGVfd3JpdGUoZmQuYm5vZGUsIFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXG5mcy9oZnMvaW5vZGUuYy01MDYtXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTYKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzZXQtcmVzdWx0c2AgQ2FsbCoqCgpPa2F5LCB0aW1lIHRvIG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIEtNU0FOIGlzbiYjMzk7dCBnb2luZyB0byBiZSBuZWVkZWQgZm9yIHRoaXMgb25lLiBMZXQgbWUgZXhwbGFpbiBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudCgpYC4gU3BlY2lmaWNhbGx5LCBpdCBtYWtlcyBzdXJlIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIOKAkyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRyeSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIOKAkyBpcyAqZXhhY3RseSogdGhlIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCBiZWZvcmUgaXQgY2FsbHMgYGhmc19ibm9kZV93cml0ZSgpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBwcmV2ZW50cyBhIHZlcnkgc3BlY2lmaWMga2luZCBvZiB2dWxuZXJhYmlsaXR5OiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgSEZTX0koaW5vZGUpLSZndDtjYWNoZWRfZXh0ZW50c2AuIFRoaXMgcmVhZCB3b3VsZCBvY2N1ciBpZiB3ZSBzdHVtYmxlIHVwb24gY29ycnVwdGVkIG9uLWRpc2sgbWV0YWRhdGEgd2hlcmUgdGhlIHJlY29yZCBsZW5ndGggaXMgdW5leHBlY3RlZC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWN0cyBhcyBhIGdhdGVrZWVwZXIsIHByZXZlbnRpbmcgdXMgZnJvbSByZWFkaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZSwgdGh1cyBzYWZlZ3VhcmRpbmcgdGhlIGJub2RlIGVudHJ5IGZyb20gY29ycnVwdGlvbi4gTm93LCB0aGUgcmVhc29uIEtNU0FOIGlzbiYjMzk7dCBhIGNvbmNlcm4gaGVyZSBpcyBiZWNhdXNlIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZG9lc24mIzM5O3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGNydWNpYWxseSwgZG9lc24mIzM5O3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyB0aGUgcmVhbCB3aW4uIFNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGFuIGV4aXN0aW5nIHJlYWQgdnVsbmVyYWJpbGl0eSDigJMgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVtYWluaW5nIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hlY2ssIGFuZCB0aGUgZGVlcGVyIGFuYWx5c2lzIGFzc29jaWF0ZWQgd2l0aCBLTVNBTiBpcyBzaW1wbHkgbm90IG5lZWRlZC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAwLjc4ODEyNzUwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc3OTQ0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAwLjc4ODEzMjg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMDA5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUxZDAyYzZiNGY2NDIzYjdmNzY1NjJlZDAyY2I0MmYwMjEyOGU5YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuY1xcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzL2V4dGVudC5jXFxuKysrIGIvZnMvaGZzL2V4dGVudC5jXFxuQEAgLTEyNiw2ICsxMjYsOCBAQCBzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmVzKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRpZiAoZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHRoZnNfYm5vZGVfd3JpdGUoZmQtXFx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuIFxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAxLjMzOTgxNjE4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjExNjM0NjU0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfZXh0X3dyaXRlX2V4dGVudFwiLFxuICAgIFwiaGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRlbmRfZmlsZVwiLFxuICAgIFwiaGZzX2ZpbGVfdHJ1bmNhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUxZDAyYzZiNGY2NDIzYjdmNzY1NjJlZDAyY2I0MmYwMjEyOGU5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NDY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvZXh0ZW50LmMgYi9mcy9oZnMvZXh0ZW50LmNcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvZXh0ZW50LmNcbisrKyBiL2ZzL2hmcy9leHRlbnQuY1xuQEAgLTEyNiw2ICsxMjYsOCBAQCBzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAxLjMzOTgxNzQzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNjY2MTk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBIRlMrIEV4dGVudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBUaGlzIHJlcXVpcmVzIGEgZm9jdXNlZCBhcHByb2FjaCwgc28gSSdtIHRoaW5raW5nOiBsZXQncyBzdGFydCB3aXRoIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGZzL2hmcy9leHRlbnQuY2AgZmlsZS4gR2l2ZW4gdGhlIGRvbWFpbiwgSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBtb2RpZmljYXRpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LlxuXG5UaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBhIGRpcmVjdCBpbnNwZWN0aW9uIG9mIHRoZSBjaGFuZ2VzLCBzbyBJJ2xsIGJlZ2luIGJ5IGFuYWx5emluZyB0aGUgZ2l0IGRpZmYuIEknbGwgbmVlZCB0byB1c2UgbXkgZmF2b3JpdGUgdG9vbHMgZm9yIGRlZXBlciBhbmFseXNpcyBoZXJlLCBzbyBJJ20gdGhpbmtpbmcgZWl0aGVyIGEgcmVsaWFibGUgYHJlYWQtZmlsZWAgdG8gdmlldyB0aGUgY29kZSwgb3IgcGVyaGFwcyBhIG1vcmUgZm9jdXNlZCBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIGNhbGxzIHRvIHRoZSBhZmZlY3RlZCBjb2RlLlxuXG5OZXh0IHVwLCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSB2aXRhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHRvIGFjY29tcGxpc2ggdGhhdCBJIHdpbGwgcmV2aWV3IHRoZSBmaWxlIChgZnMvaGZzL2V4dGVudC5jYCkgYW5kIGFsbCBpdHMgcmVsYXRlZCBjYWxsZXJzIGFuZCBLY29uZmlnIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAwLCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzowOS43MDY0NDE1NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvZXh0ZW50LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRpbnQgcmVzO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXFx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgSEZTX0lTX1JTUkMoaW5vZGUpID8gIEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xcbiAxMTY6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuIDExNzpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xcbiAxMTg6XFx0XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTIwOlxcdFxcdFxcdC8qIEZhaWwgZWFybHkgYW5kIGF2b2lkIEVOT1NQQyBkdXJpbmcgdGhlIGJ0cmVlIG9wZXJhdGlvbiAqL1xcbiAxMjE6XFx0XFx0XFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cXHUwMDNldHJlZSwgZmQtXFx1MDAzZXRyZWUtXFx1MDAzZWRlcHRoICsgMSk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI0OlxcdFxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuIDEyNTpcXHRcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4gMTI2OlxcdFxcdH0gZWxzZSB7XFxuIDEyNzpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI5OlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcXG4gMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMzE6XFx0XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiAxMzI6XFx0XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4gMTQwOlxcdFxcdGludCByZXMgPSAwO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuIDE0MzpcXHRcXHRcXHRyZXMgPSBoZnNfZmluZF9pbml0KEhGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZWV4dF90cmVlLCBcXHUwMDI2ZmQpO1xcbiAxNDQ6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTQ1OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDE0NjpcXHRcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbiAxNDc6XFx0XFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFx0cmV0dXJuIHJlcztcXG4gMTUwOlxcdH1cXG4gMTUxOlxcdFxcbiAxNTI6XFx0c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGhmc19leHRlbnQgKmV4dGVudCxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdFxcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXFxuIDE1NDpcXHR7XFxuIDE1NTpcXHRcXHRpbnQgcmVzO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgY25pZCwgYmxvY2ssIHR5cGUpO1xcbiAxNTg6XFx0XFx0ZmQtXFx1MDAzZWtleS1cXHUwMDNlZXh0LkZOdW0gPSAwO1xcbiAxNTk6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjA5LjcwNjUzMDI1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIwNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvZXh0ZW50LmM9OTk9c3RhdGljIHUxNiBoZnNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0KVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEwOS1cXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzL2V4dGVudC5jLTExMS17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MTM3PWludCBoZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE0NS1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbmZzL2hmcy9leHRlbnQuYzoxNDY6XFx0XFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXFx1MDAyNmZkKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTQ3LVxcdFxcdGhmc19maW5kX2V4aXQoXFx1MDAyNmZkKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0xNzE9c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNzUtXFx0aWYgKEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xcbmZzL2hmcy9leHRlbnQuYzoxNzY6XFx0XFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xcbmZzL2hmcy9leHRlbnQuYy0xNzctXFx0XFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MDkuNzUzNzM3NTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzEwNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnMvS2NvbmZpZzoyOmNvbmZpZyBIRlNfRlNcXG5mcy9oZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBNYWNpbnRvc2ggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2hmcy9NYWtlZmlsZS01LVxcbmZzL2hmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IRlNfRlMpICs9IGhmcy5vXFxuZnMvaGZzL01ha2VmaWxlLTctXFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtOC1cXG5mcy9oZnMvaGZzX2ZzLmg6OTojaWZuZGVmIF9MSU5VWF9IRlNfRlNfSFxcbmZzL2hmcy9oZnNfZnMuaDoxMDojZGVmaW5lIF9MSU5VWF9IRlNfRlNfSFxcbmZzL2hmcy9oZnNfZnMuaC0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MDkuODAxNDU1MTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczOTMyMjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBIRlMrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IEhGUysgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGZzL2hmcy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHByb2JhYmx5IGV2ZW4gc29tZSB1c2VmdWwgY29tbWVudGFyeSBvbiB0aGVpciBlZmZlY3RzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZXNzZW50aWFsbHkgYmUgbXkgYmlibGUgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEhGUysgaXMgaW1wbGVtZW50ZWQgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxMS41NDA3ODEyNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBNYWNpbnRvc2gtZm9ybWF0dGVkXFxuICAxMDpcXHRcXHQgIGZsb3BweSBkaXNrcyBhbmQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDExOlxcdFxcdCAgUGxlYXNlIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XFx1MDAzZSB0byBsZWFybiBhYm91dFxcbiAgMTI6XFx0XFx0ICB0aGUgYXZhaWxhYmxlIG1vdW50IG9wdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxMS41NDA4NDI0NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDY4MDg1OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgc25pcHBldCBpcyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpIHJldHVybiAtRUlPO2AuIEVzc2VudGlhbGx5LCBpdCdzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB3cml0aW5nIGNvcnJ1cHRlZCBvciBvdXQtb2YtYm91bmRzIGV4dGVudCByZWNvcmRzLiBUaGlzIGxvb2tzIGxpa2UgYSBzYW5pdHkgY2hlY2suXG5cbklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXMsIGRlZmluaXRlbHkuIFRoZSBIRlMgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB2aWEgYSBsb29wIGRldmljZS4gU3l6a2FsbGVyLCB3aGljaCBpcyBvZnRlbiB1c2VkIGZvciBmaWxlc3lzdGVtIGZ1enppbmcsIG1vdW50cyBjb3JydXB0ZWQgSEZTIGltYWdlcyByZWd1bGFybHkuIFRoaXMgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgbmV3IGNoZWNrIHdpbGwgZ2V0IHRyaWdnZXJlZC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvZGUgbW9kaWZpZXMgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wIG1vdW50cy4gSXQgYWxzbyB0b3VjaGVzIG9uIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBiYXNlZCBvbiB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgYWxpZ25zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBhbmQgcnVudGltZSBhc3NlcnRpb25zLiBGaWxlIHN5c3RlbXMgYXJlIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBhbnl3YXksIGdpdmVuIHRoZSBjb21wbGV4IGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIGZvY3VzIHN5bWJvbHM6IGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBpcyBzdGF0aWMsIGJ1dCBpcyBjYWxsZWQgYnkgYGhmc19leHRfd3JpdGVfZXh0ZW50YCBhbmQgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgLiBMZXQgbWUgc2VhcmNoIGZvciBub24tc3RhdGljIG9yIGV4cG9ydGVkIHN5bWJvbHMsIHN1Y2ggYXMgYGhmc19leHRfd3JpdGVfZXh0ZW50YCBhbmQgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgLCBvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgZnMvaGZzL2V4dGVudC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlYWNoYWJsZSBlbnRyeSBwb2ludHMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxNy4wMDg5MzA2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MjcxNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2V4dF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9idHJlZS5jPTE5PXN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG4tLVxcbmZzL2hmcy9idHJlZS5jLTg3LVxcbmZzL2hmcy9idHJlZS5jOjg4OlxcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSSh0cmVlLVxcdTAwM2Vpbm9kZSktXFx1MDAzZWZpcnN0X2V4dGVudHMsIDApO1xcbmZzL2hmcy9idHJlZS5jLTg5LVxcdHN0YXJ0X2Jsb2NrID0gSEZTX1NCKHNiKS1cXHUwMDNlZnNfc3RhcnQgKyAoZGJsb2NrICogSEZTX1NCKHNiKS1cXHUwMDNlZnNfZGl2KTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0yMC0gKi9cXG5mcy9oZnMvZXh0ZW50LmM6MjE6c3RhdGljIHZvaWQgaGZzX2V4dF9idWlsZF9rZXkoaGZzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwgdTE2IGJsb2NrLCB1OCB0eXBlKVxcbmZzL2hmcy9leHRlbnQuYy0yMi17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMjktLypcXG5mcy9oZnMvZXh0ZW50LmM6MzA6ICogaGZzX2V4dF9jb21wYXJlKClcXG5mcy9oZnMvZXh0ZW50LmMtMzEtICpcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0zOS0gKiBJbnB1dCBWYXJpYWJsZShzKTpcXG5mcy9oZnMvZXh0ZW50LmM6NDA6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTE6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGtleSB0byBjb21wYXJlXFxuZnMvaGZzL2V4dGVudC5jOjQxOiAqICAgc3RydWN0IGhmc19leHRfa2V5ICprZXkyOiBwb2ludGVyIHRvIHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmVcXG5mcy9oZnMvZXh0ZW50LmMtNDItICogT3V0cHV0IFZhcmlhYmxlKHMpOlxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTQ2LSAqIFByZWNvbmRpdGlvbnM6XFxuZnMvaGZzL2V4dGVudC5jOjQ3OiAqICAga2V5MSBhbmQga2V5MiBwb2ludCB0byBcXFwidmFsaWRcXFwiIChzdHJ1Y3QgaGZzX2V4dF9rZXkpcy5cXG5mcy9oZnMvZXh0ZW50LmMtNDgtICogUG9zdGNvbmRpdGlvbnM6XFxuZnMvaGZzL2V4dGVudC5jLTQ5LSAqICAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gc2lkZS1lZmZlY3RzICovXFxuZnMvaGZzL2V4dGVudC5jOjUwOmludCBoZnNfZXh0X2tleWNtcChjb25zdCBidHJlZV9rZXkgKmtleTEsIGNvbnN0IGJ0cmVlX2tleSAqa2V5MilcXG5mcy9oZnMvZXh0ZW50LmMtNTEte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTY5LS8qXFxuZnMvaGZzL2V4dGVudC5jOjcwOiAqIGhmc19leHRfZmluZF9ibG9ja1xcbmZzL2hmcy9leHRlbnQuYy03MS0gKlxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTczLSAqL1xcbmZzL2hmcy9leHRlbnQuYzo3NDp1MTYgaGZzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQsIHUxNiBvZmYpXFxuZnMvaGZzL2V4dGVudC5jLTc1LXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy04OC1cXG5mcy9oZnMvZXh0ZW50LmM6ODk6c3RhdGljIGludCBoZnNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNfZXh0ZW50ICpleHQpXFxuZnMvaGZzL2V4dGVudC5jLTkwLXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy05OC1cXG5mcy9oZnMvZXh0ZW50LmM6OTk6c3RhdGljIHUxNiBoZnNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0KVxcbmZzL2hmcy9leHRlbnQuYy0xMDAte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEwOS1cXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzL2V4dGVudC5jLTExMS17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTEzLVxcbmZzL2hmcy9leHRlbnQuYzoxMTQ6XFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXFx1MDAzZXNlYXJjaF9rZXksIGlub2RlLVxcdTAwM2VpX2lubywgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfc3RhcnQsXFxuZnMvaGZzL2V4dGVudC5jLTExNS1cXHRcXHRcXHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMzYtXFxuZnMvaGZzL2V4dGVudC5jOjEzNzppbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnMvZXh0ZW50LmMtMTM4LXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNDUtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5mcy9oZnMvZXh0ZW50LmM6MTQ2OlxcdFxcdHJlcyA9IF9faGZzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFxcdTAwMjZmZCk7XFxuZnMvaGZzL2V4dGVudC5jLTE0Ny1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTUxLVxcbmZzL2hmcy9leHRlbnQuYzoxNTI6c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGhmc19leHRlbnQgKmV4dGVudCxcXG5mcy9oZnMvZXh0ZW50LmMtMTUzLVxcdFxcdFxcdFxcdFxcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTU2LVxcbmZzL2hmcy9leHRlbnQuYzoxNTc6XFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXFx1MDAzZXNlYXJjaF9rZXksIGNuaWQsIGJsb2NrLCB0eXBlKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTU4LVxcdGZkLVxcdTAwM2VrZXktXFx1MDAzZWV4dC5GTnVtID0gMDtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNzAtXFxuZnMvaGZzL2V4dGVudC5jOjE3MTpzdGF0aWMgaW5saW5lIGludCBfX2hmc19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbmZzL2hmcy9leHRlbnQuYy0xNzIte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE3NS1cXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuZnMvaGZzL2V4dGVudC5jOjE3NjpcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzL2V4dGVudC5jLTE3Ny1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE4MC1cXG5mcy9oZnMvZXh0ZW50LmM6MTgxOlxcdHJlcyA9IF9faGZzX2V4dF9yZWFkX2V4dGVudChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgaW5vZGUtXFx1MDAzZWlfaW5vLFxcbmZzL2hmcy9leHRlbnQuYy0xODItXFx0XFx0XFx0XFx0ICAgIGJsb2NrLCBIRlNfSVNfUlNSQyhpbm9kZSkgPyBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xODQtXFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfc3RhcnQgPSBiZTE2X3RvX2NwdShmZC1cXHUwMDNla2V5LVxcdTAwM2VleHQuRkFCTik7XFxuZnMvaGZzL2V4dGVudC5jOjE4NTpcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9ibG9ja3MgPSBoZnNfZXh0X2Jsb2NrX2NvdW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy0xODYtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xOTItXFxuZnMvaGZzL2V4dGVudC5jOjE5MzpzdGF0aWMgaW50IGhmc19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTE2IGJsb2NrKVxcbmZzL2hmcy9leHRlbnQuYy0xOTQte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTIwMy1cXHRpZiAoIXJlcykge1xcbmZzL2hmcy9leHRlbnQuYzoyMDQ6XFx0XFx0cmVzID0gX19oZnNfZXh0X2NhY2hlX2V4dGVudChcXHUwMDI2ZmQsIGlub2RlLCBibG9jayk7XFxuZnMvaGZzL2V4dGVudC5jLTIwNS1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9Mjg5PWludCBoZnNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBoZnNfY2F0X2ZpbGUgKmZpbGUsIGludCB0eXBlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTMyMS1cXHRkbyB7XFxuZnMvaGZzL2V4dGVudC5jOjMyMjpcXHRcXHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoXFx1MDAyNmZkLCBleHRlbnQsIGNuaWQsIHRvdGFsX2Jsb2NrcywgdHlwZSk7XFxuZnMvaGZzL2V4dGVudC5jLTMyMy1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTMzOD1pbnQgaGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0zNjItXFx0aWYgKGFibG9jayBcXHUwMDNjIEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfYmxvY2tzKSB7XFxuZnMvaGZzL2V4dGVudC5jOjM2MzpcXHRcXHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVxcdTAwM2VmaXJzdF9leHRlbnRzLCBhYmxvY2spO1xcbmZzL2hmcy9leHRlbnQuYy0zNjQtXFx0XFx0Z290byBkb25lO1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTM2Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZIRlNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuZnMvaGZzL2V4dGVudC5jOjM2ODpcXHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xcbmZzL2hmcy9leHRlbnQuYy0zNjktXFx0aWYgKCFyZXMpXFxuZnMvaGZzL2V4dGVudC5jOjM3MDpcXHRcXHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG5mcy9oZnMvZXh0ZW50LmMtMzcxLVxcdFxcdFxcdFxcdFxcdCAgICBhYmxvY2sgLSBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MzkzPWludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00MDAtXFx0aWYgKEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzID09IEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfYmxvY2tzKVxcbmZzL2hmcy9leHRlbnQuYzo0MDE6XFx0XFx0Z29hbCA9IGhmc19leHRfbGFzdGJsb2NrKEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfZXh0ZW50cyk7XFxuZnMvaGZzL2V4dGVudC5jLTQwMi1cXHRlbHNlIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDAzOlxcdFxcdHJlcyA9IGhmc19leHRfcmVhZF9leHRlbnQoaW5vZGUsIEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA0LVxcdFxcdGlmIChyZXMpXFxuZnMvaGZzL2V4dGVudC5jLTQwNS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9oZnMvZXh0ZW50LmM6NDA2OlxcdFxcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA3LVxcdH1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00NjEtXFx0aGZzX2RiZyhFWFRFTlQsIFxcXCJpbnNlcnQgbmV3IGV4dGVudFxcXFxuXFxcIik7XFxuZnMvaGZzL2V4dGVudC5jOjQ2MjpcXHRyZXMgPSBoZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSk7XFxuZnMvaGZzL2V4dGVudC5jLTQ2My1cXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTQ3OD12b2lkIGhmc19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtNTI3LVxcdFxcdH1cXG5mcy9oZnMvZXh0ZW50LmM6NTI4OlxcdFxcdHJlcyA9IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoXFx1MDAyNmZkLCBpbm9kZSwgYWxsb2NfY250KTtcXG5mcy9oZnMvZXh0ZW50LmMtNTI5LVxcdFxcdGlmIChyZXMpXFxuLS1cXG5mcy9oZnMvaGZzLmgtNTctXFxuZnMvaGZzL2hmcy5oOjU4Oi8qIGxlZ2FsIHZhbHVlcyBmb3IgaGZzX2V4dF9rZXkuRmtUeXBlIGFuZCBoZnNfZmlsZS5mb3JrICovXFxuZnMvaGZzL2hmcy5oLTU5LSNkZWZpbmUgSEZTX0ZLX0RBVEFcXHQweDAwXFxuLS1cXG5mcy9oZnMvaGZzLmg9MTQ5PXN0cnVjdCBoZnNfY2F0X2tleSB7XFxuLS1cXG5mcy9oZnMvaGZzLmgtMTU2LS8qIFRoZSBrZXkgdXNlZCBpbiB0aGUgZXh0ZW50cyBiLXRyZWU6ICovXFxuZnMvaGZzL2hmcy5oOjE1NzpzdHJ1Y3QgaGZzX2V4dF9rZXkge1xcbmZzL2hmcy9oZnMuaC0xNTgtXFx0dTgga2V5X2xlbjtcXHRcXHQvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGtleSAqL1xcbi0tXFxuZnMvaGZzL2hmcy5oPTE2ND10eXBlZGVmIHVuaW9uIGhmc19idHJlZV9rZXkge1xcbi0tXFxuZnMvaGZzL2hmcy5oLTE2Ni1cXHRzdHJ1Y3QgaGZzX2NhdF9rZXkgY2F0O1xcbmZzL2hmcy9oZnMuaDoxNjc6XFx0c3RydWN0IGhmc19leHRfa2V5IGV4dDtcXG5mcy9oZnMvaGZzLmgtMTY4LX0gaGZzX2J0cmVlX2tleTtcXG4tLVxcbmZzL2hmcy9oZnMuaC0xNzAtI2RlZmluZSBIRlNfTUFYX0NBVF9LRVlMRU5cXHQoc2l6ZW9mKHN0cnVjdCBoZnNfY2F0X2tleSkgLSBzaXplb2YodTgpKVxcbmZzL2hmcy9oZnMuaDoxNzE6I2RlZmluZSBIRlNfTUFYX0VYVF9LRVlMRU5cXHQoc2l6ZW9mKHN0cnVjdCBoZnNfZXh0X2tleSkgLSBzaXplb2YodTgpKVxcbmZzL2hmcy9oZnMuaC0xNzItXFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmg9MTg5PWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtMTkxLS8qIGV4dGVudC5jICovXFxuZnMvaGZzL2hmc19mcy5oOjE5MjpleHRlcm4gaW50IGhmc19leHRfa2V5Y21wKGNvbnN0IGJ0cmVlX2tleSAqLCBjb25zdCBidHJlZV9rZXkgKik7XFxuZnMvaGZzL2hmc19mcy5oOjE5MzpleHRlcm4gdTE2IGhmc19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0LCB1MTYgb2ZmKTtcXG5mcy9oZnMvaGZzX2ZzLmgtMTk0LWV4dGVybiBpbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGhmc19jYXRfZmlsZSAqLCBpbnQpO1xcbmZzL2hmcy9oZnNfZnMuaDoxOTU6ZXh0ZXJuIGludCBoZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvaGZzL2hmc19mcy5oLTE5Ni1leHRlcm4gaW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYz00MjE9aW50IGhmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL2hmcy9pbm9kZS5jLTQyOC1cXHRoZnNfZGJnKElOT0RFLCBcXFwiaGZzX3dyaXRlX2lub2RlOiAlbHVcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuZnMvaGZzL2lub2RlLmM6NDI5OlxcdHJlcyA9IGhmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlKTtcXG5mcy9oZnMvaW5vZGUuYy00MzAtXFx0aWYgKHJlcylcXG4tLVxcbmZzL2hmcy9tZGIuYz03Mz1pbnQgaGZzX21kYl9nZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmcy9tZGIuYy0xOTgtXFxuZnMvaGZzL21kYi5jOjE5OTpcXHRIRlNfU0Ioc2IpLVxcdTAwM2VleHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNfRVhUX0NOSUQsIGhmc19leHRfa2V5Y21wKTtcXG5mcy9oZnMvbWRiLmMtMjAwLVxcdGlmICghSEZTX1NCKHNiKS1cXHUwMDNlZXh0X3RyZWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MTcuMDU2NTYyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM2MzAwMDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBIRlMgRXh0ZW50IFdyaXRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgSEZTIGV4dGVudCB3cml0ZSBwYXRoLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIHNlZSBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgdGhlIHRhcmdldCwgZm91bmQgd2l0aGluIGBmcy9oZnMvZXh0ZW50LmNgLiBJdHMgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIGBoZnNfZXh0X3dyaXRlX2V4dGVudGAgYW5kIGBfX2hmc19leHRfY2FjaGVfZXh0ZW50YC4gRGlnZ2luZyBkZWVwZXIsIGBoZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgaW52b2tlZCBieSBgaGZzX2V4dGVuZF9maWxlYCBhbmQgYGhmc193cml0ZV9pbm9kZWAuIE9uIHRoZSBvdGhlciBoYW5kLCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAgaXMgY2FsbGVkIGJ5IGBoZnNfZXh0X3JlYWRfZXh0ZW50YCB3aGljaCBpcyB1c2VkIGJ5IGBoZnNfZ2V0X2Jsb2NrYCBhbmQgYGhmc19leHRlbmRfZmlsZWAgKmFuZCogYnkgYGhmc19maWxlX3RydW5jYXRlYC5cblxuVGhlcmVmb3JlLCBteSBmb2N1cyBzaG91bGQgYmUgb24gYGhmc19leHRfd3JpdGVfZXh0ZW50YCwgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgLCBgaGZzX2V4dGVuZF9maWxlYCwgYGhmc19maWxlX3RydW5jYXRlYCwgYW5kIGBoZnNfd3JpdGVfaW5vZGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHByb3Blcmx5IGRlZmluZWQsIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgaXQncyBwcmVzZW50IHdpdGhpbiB2bWxpbnV4L2hmcy5rbyAod2hpY2ggaXQgaXMsIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uKS4gSSdsbCBrZWVwIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBoYW5keSBhcyBhIHJlZmVyZW5jZS5cblxuTmV4dCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGp1bXAgb3V0OiBgSEZTX0ZTYC4gSSBrbm93IGBIRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19IRlNfRlNgIGlzIHRoZSAqc3BlY2lmaWMqIGNvbmZpZyBmb3IgdGhpcyBIRlMgZnVuY3Rpb25hbGl0eS4gTm90aGluZyBlbHNlIHNlZW1zIGltbWVkaWF0ZWx5IG5lY2Vzc2FyeS5cblxuRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGFkZHMgYSBzYWZldHkgY2hlY2sgd2l0aGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YC4gSXQgdmVyaWZpZXMgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBhZ2FpbnN0IGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYCBiZWZvcmUgd3JpdGluZy4gVGhpcyBpcyBhIGNydWNpYWwgdmFsaWRhdGlvbiBzdGVwLiBXaXRob3V0IGl0LCB0aGUgY29kZSBjb3VsZCBiZSB2dWxuZXJhYmxlIHRvIGJ1ZmZlciBvdmVyLXJlYWRzIG9yIGV2ZW4gY29ycnVwdGVkIGJub2RlIHdyaXRlcywgZXNwZWNpYWxseSB3aXRoIG1hbGljaW91c2x5IGNyYWZ0ZWQgSEZTIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIHRlbGxzIG1lIHRoYXQgZnV6emluZyBIRlMgb3BlcmF0aW9ucyDigJMgbGlrZSBmaWxlIHRydW5jYXRpb24sIGV4dGVuc2lvbiwgYW5kIHdyaXRlYmFja3Mg4oCTIHdpdGggc3BlY2lmaWNhbGx5IGNyYWZ0ZWQgZmlsZXN5c3RlbSBpbWFnZXMgaXMgZXh0cmVtZWx5IHZhbHVhYmxlIHRvIHRlc3QgdGhlIHBhdGNoJ3MgZWZmZWN0aXZlbmVzcyBhbmQgdG8gZGV0ZWN0IGFueSByZWdyZXNzaW9ucyB1bmRlciBwb3RlbnRpYWxseSBtYWxpY2lvdXMgaW5wdXRzLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzMSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjIuNDE5NTY0NzUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3MTMxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoyMi41MDMyODU5NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzYyNzcwOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjIuNTAzODE1NDIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMzNjIyMDMyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHNgIGludG8gYSBibm9kZS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyB3aGVyZSBgZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4gU3VjaCBidWZmZXIgb3Zlci1yZWFkcyBhcmUgbWVtb3J5IGJvdW5kYXJ5IGlzc3VlcyBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSB1c2VyLXNwYWNlIGNvcGllcywgb3IgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGFuZGxpbmcsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1MWQwMmM2YjRmNjQyM2I3Zjc2NTYyZWQwMmNiNDJmMDIxMjhlOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ2OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2V4dGVudC5jIGIvZnMvaGZzL2V4dGVudC5jXG5pbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NFxuLS0tIGEvZnMvaGZzL2V4dGVudC5jXG4rKysgYi9mcy9oZnMvZXh0ZW50LmNcbkBAIC0xMjYsNiArMTI2LDggQEAgc3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIFx0XHRIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoyMi41MDM4MTc1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgyMDUyNTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQ29kZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLCBhbG9uZ3NpZGUgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBpbXBsaWNhdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjYuIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGEgcmVhZC1maWxlIGZ1bmN0aW9uIG9yIGBncmVwcGVyYCB0byBnZXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLiBUaGlzIGlzIGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjYuMzI0MzQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmcy9leHRlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0e1xcbiAxMDE6XFx0XFx0aW50IGk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGV4dCArPSAyO1xcbiAxMDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGV4dC0tLCBpKyspXFxuIDEwNTpcXHRcXHRcXHRpZiAoZXh0LVxcdTAwM2Vjb3VudClcXG4gMTA2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDc6XFx0XFx0cmV0dXJuIGJlMTZfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2spICsgYmUxNl90b19jcHUoZXh0LVxcdTAwM2Vjb3VudCk7XFxuIDEwODpcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRpbnQgcmVzO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXFx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgSEZTX0lTX1JTUkMoaW5vZGUpID8gIEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xcbiAxMTY6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuIDExNzpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xcbiAxMTg6XFx0XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTIwOlxcdFxcdFxcdC8qIEZhaWwgZWFybHkgYW5kIGF2b2lkIEVOT1NQQyBkdXJpbmcgdGhlIGJ0cmVlIG9wZXJhdGlvbiAqL1xcbiAxMjE6XFx0XFx0XFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cXHUwMDNldHJlZSwgZmQtXFx1MDAzZXRyZWUtXFx1MDAzZWRlcHRoICsgMSk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI0OlxcdFxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuIDEyNTpcXHRcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4gMTI2OlxcdFxcdH0gZWxzZSB7XFxuIDEyNzpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI5OlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcXG4gMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMzE6XFx0XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiAxMzI6XFx0XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4gMTQwOlxcdFxcdGludCByZXMgPSAwO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuIDE0MzpcXHRcXHRcXHRyZXMgPSBoZnNfZmluZF9pbml0KEhGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZWV4dF90cmVlLCBcXHUwMDI2ZmQpO1xcbiAxNDQ6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTQ1OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDE0NjpcXHRcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbiAxNDc6XFx0XFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFx0cmV0dXJuIHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjYuMzI0NDUyMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYzMzI3OTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgb3BlcmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSB3cml0ZSBvcGVyYXRpb24gZm9yIGV4dGVudHMuIEl0IHNlZW1zIHRoYXQgYGNhY2hlZF9leHRlbnRzYCBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBibm9kZTogdGhlIGNvZGUgZXhwbGljaXRseSBjYWxscyBgaGZzX2Jub2RlX3dyaXRlYCB3aXRoIGBmZC1cdTAwM2Vibm9kZWAsIGBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHNgLCBgZmQtXHUwMDNlZW50cnlvZmZzZXRgLCBhbmQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBhcyBhcmd1bWVudHMuIFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgcHJvY2VzcywgYnV0IHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93IGlzOiBXaGF0IHRoZSAqaGVjayogaXMgYGNhY2hlZF9leHRlbnRzYD8gVGhpcyBpcyB0aGUgY2VudHJhbCBwaWVjZSBvZiBkYXRhIGJlaW5nIHdyaXR0ZW4sIGFuZCBrbm93aW5nIGl0cyB0eXBlIGlzIGNydWNpYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJ3MgaW1wbGljYXRpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGItdHJlZSBzdHJ1Y3R1cmUuIFRpbWUgdG8gdXNlIGdyZXAgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGBmcy9oZnMvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjMwLjk1NzczNDQxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNzM0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVkX2V4dGVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9leHRlbnQuYz0xMTA9c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMjMtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5mcy9oZnMvZXh0ZW50LmM6MTI0OlxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuZnMvaGZzL2V4dGVudC5jLTEyNS1cXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMzAtXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuZnMvaGZzL2V4dGVudC5jOjEzMTpcXHRcXHRoZnNfYm5vZGVfd3JpdGUoZmQtXFx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuZnMvaGZzL2V4dGVudC5jLTEzMi1cXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0xNzE9c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xODAtXFxuZnMvaGZzL2V4dGVudC5jOjE4MTpcXHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoZmQsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVxcdTAwM2VpX2lubyxcXG5mcy9oZnMvZXh0ZW50LmMtMTgyLVxcdFxcdFxcdFxcdCAgICBibG9jaywgSEZTX0lTX1JTUkMoaW5vZGUpID8gSEZTX0ZLX1JTUkMgOiBIRlNfRktfREFUQSk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTg0LVxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX3N0YXJ0ID0gYmUxNl90b19jcHUoZmQtXFx1MDAzZWtleS1cXHUwMDNlZXh0LkZBQk4pO1xcbmZzL2hmcy9leHRlbnQuYzoxODU6XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfYmxvY2tzID0gaGZzX2V4dF9ibG9ja19jb3VudChIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTg2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MzM4PWludCBoZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTM2OS1cXHRpZiAoIXJlcylcXG5mcy9oZnMvZXh0ZW50LmM6MzcwOlxcdFxcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbmZzL2hmcy9leHRlbnQuYy0zNzEtXFx0XFx0XFx0XFx0XFx0ICAgIGFibG9jayAtIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX3N0YXJ0KTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0zOTM9aW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTQwNS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9oZnMvZXh0ZW50LmM6NDA2OlxcdFxcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA3LVxcdH1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00MzYtXFx0fSBlbHNlIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDM3OlxcdFxcdHJlcyA9IGhmc19hZGRfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuZnMvaGZzL2V4dGVudC5jLTQzOC1cXHRcXHRcXHRcXHQgICAgIEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzIC1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00NDEtXFx0XFx0aWYgKCFyZXMpIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDQyOlxcdFxcdFxcdGhmc19kdW1wX2V4dGVudChIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDQzLVxcdFxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgfD0gSEZTX0ZMR19FWFRfRElSVFk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtNDY1LVxcbmZzL2hmcy9leHRlbnQuYzo0NjY6XFx0bWVtc2V0KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIDAsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xcbmZzL2hmcy9leHRlbnQuYzo0Njc6XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50c1swXS5ibG9jayA9IGNwdV90b19iZTE2KHN0YXJ0KTtcXG5mcy9oZnMvZXh0ZW50LmM6NDY4OlxcdEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHNbMF0uY291bnQgPSBjcHVfdG9fYmUxNihsZW4pO1xcbmZzL2hmcy9leHRlbnQuYzo0Njk6XFx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy00NzAtXFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyB8PSBIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVc7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9NDc4PXZvaWQgaGZzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy01MzEtXFx0XFx0c3RhcnQgPSBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydDtcXG5mcy9oZnMvZXh0ZW50LmM6NTMyOlxcdFxcdGhmc19mcmVlX2V4dGVudHMoc2IsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuZnMvaGZzL2V4dGVudC5jLTUzMy1cXHRcXHRcXHRcXHQgYWxsb2NfY250IC0gc3RhcnQsIGFsbG9jX2NudCAtIGJsa19jbnQpO1xcbmZzL2hmcy9leHRlbnQuYzo1MzQ6XFx0XFx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy01MzUtXFx0XFx0aWYgKGJsa19jbnQgXFx1MDAzZSBzdGFydCkge1xcbi0tXFxuZnMvaGZzL2hmc19mcy5oPTYxPXN0cnVjdCBoZnNfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtODEtXFx0dTE2IGZpcnN0X2Jsb2NrcztcXG5mcy9oZnMvaGZzX2ZzLmg6ODI6XFx0aGZzX2V4dGVudF9yZWMgY2FjaGVkX2V4dGVudHM7XFxuZnMvaGZzL2hmc19mcy5oLTgzLVxcdHUxNiBjYWNoZWRfc3RhcnQsIGNhY2hlZF9ibG9ja3M7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYz0xODI9c3RydWN0IGlub2RlICpoZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvaGZzL2lub2RlLmMtMjI5LVxcdFxcdG1lbXNldChIRlNfSShpbm9kZSktXFx1MDAzZWZpcnN0X2V4dGVudHMsIDAsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xcbmZzL2hmcy9pbm9kZS5jOjIzMDpcXHRcXHRtZW1zZXQoSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuZnMvaGZzL2lub2RlLmMtMjMxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MzEuMDA0OTE4NDY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDQxNjIzMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIEhGUyBFeHRlbnQgUmVjb3JkIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gV2UncmUgbG9va2luZyBhdCBhIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgZXh0ZW50IHJlY29yZHMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc19leHRlbnRfcmVjYCBzdHJ1Y3R1cmUuIEl0J3MgYSBmaXhlZC1zaXplIHN0cnVjdCwgYW4gYXJyYXkgb2YgZXh0ZW50IGRlc2NyaXB0b3JzLiBUaGUgcHJvYmxlbWF0aWMgY29kZSBpcyBpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAsIHdoZXJlIGBoZnNfYm5vZGVfd3JpdGVgIGlzIGNhbGxlZC4gVGhlIGNvcmUgaXNzdWUgYm9pbHMgZG93biB0byBhIHBvdGVudGlhbCBidWZmZXIgb3Zlci1yZWFkLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhg4oCUdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIHRvIGRpc2vigJR3YXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCwgYGhmc19ibm9kZV93cml0ZWAgd291bGQgYXR0ZW1wdCB0byByZWFkIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgYnl0ZXMgZnJvbSBgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzYC4gU2luY2UgYGNhY2hlZF9leHRlbnRzYCAqaXMqIG9mIGBoZnNfZXh0ZW50X3JlY2Agc2l6ZSwgdGhpcyBtZWFudCB3ZSB3ZXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkLCBhbiBleHRyZW1lbHkgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEtBU0FOLCBpbiBmYWN0LCBzaG91bGQgZGV0ZWN0IHRoaXMhXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzYW5pdHkgY2hlY2s6XG5cbmBgYGNcbmlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzX2V4dGVudF9yZWMpKVxuICAgIHJldHVybiAtRUlPO1xuYGBgXG5cblRoaXMgcHJldmVudHMgdGhlIE9PQiByZWFkIGJ5IGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciAoLUVJTykgaWYgdGhlIGxlbmd0aHMgZG9uJ3QgbWF0Y2guIEl04oCZcyBhIGNsZWFuIGFuZCBkaXJlY3QgZml4LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGNvbmZpcm06XG5cbiogICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBOb3BlLCB0aGUgcmV0dXJuIGhhcHBlbnMgZWFybHkuXG4qICAgTm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBObywgdGhlIHJldHVybiBoYXBwZW5zIGVhcmx5LlxuKiAgIE5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhIGRpc2sgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBibm9kZSBvciBidWZmZXIgY2FjaGUuXG4qICAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIE9PQiByZWFkIGZpeCwgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBgZmQtXHUwMDNlZW50cnlsZW5ndGggXHUwMDNlIHNpemVvZihoZnNfZXh0ZW50X3JlYylgLlxuXG5LQVNBTiB3aWxsIGNhdGNoIHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhbiBPT0IgcmVhZCwgYW5kIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBzb3J0IG9mIG1lbW9yeSBjb3JydXB0aW9uLiBEaXNrIGNvcnJ1cHRpb24gY291bGQgaGFwcGVuIGlmIGBlbnRyeWxlbmd0aGAgaGFzIGJhZCBkYXRhLlxuXG5JJ2xsIGFsc28gZ28gYmFjayBhbmQgY2FyZWZ1bGx5IGNoZWNrIHRoZSBgaGZzX2Jub2RlX3dyaXRlYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjQxLjA0NjU0NDQ0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2Jub2RlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYXR0ci5jPTIyPXN0YXRpYyBpbnQgX19oZnNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLFxcbi0tXFxuZnMvaGZzL2F0dHIuYy02MC1cXHRpZiAoIXJlcylcXG5mcy9oZnMvYXR0ci5jOjYxOlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXFxuZnMvaGZzL2F0dHIuYy02Mi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhmc19jYXRfZmlsZSkpO1xcbi0tXFxuZnMvaGZzL2Jub2RlLmM9MTE0PXZvaWQgaGZzX2Jub2RlX3JlYWRfa2V5KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmtleSwgaW50IG9mZilcXG4tLVxcbmZzL2hmcy9ibm9kZS5jLTEzNC1cXG5mcy9oZnMvYm5vZGUuYzoxMzU6dm9pZCBoZnNfYm5vZGVfd3JpdGUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKVxcbmZzL2hmcy9ibm9kZS5jLTEzNi17XFxuLS1cXG5mcy9oZnMvYm5vZGUuYy0xNTktXFxuZnMvaGZzL2Jub2RlLmM6MTYwOnZvaWQgaGZzX2Jub2RlX3dyaXRlX3UxNihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1MTYgZGF0YSlcXG5mcy9oZnMvYm5vZGUuYy0xNjEte1xcbi0tXFxuZnMvaGZzL2Jub2RlLmMtMTYzLVxcdC8vIG9wdGltaXplIGxhdGVyLi4uXFxuZnMvaGZzL2Jub2RlLmM6MTY0OlxcdGhmc19ibm9kZV93cml0ZShub2RlLCBcXHUwMDI2diwgb2ZmLCAyKTtcXG5mcy9oZnMvYm5vZGUuYy0xNjUtfVxcbmZzL2hmcy9ibm9kZS5jLTE2Ni1cXG5mcy9oZnMvYm5vZGUuYzoxNjc6dm9pZCBoZnNfYm5vZGVfd3JpdGVfdTgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgaW50IG9mZiwgdTggZGF0YSlcXG5mcy9oZnMvYm5vZGUuYy0xNjgte1xcbmZzL2hmcy9ibm9kZS5jLTE2OS1cXHQvLyBvcHRpbWl6ZSBsYXRlci4uLlxcbmZzL2hmcy9ibm9kZS5jOjE3MDpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNmRhdGEsIG9mZiwgMSk7XFxuZnMvaGZzL2Jub2RlLmMtMTcxLX1cXG4tLVxcbmZzL2hmcy9ibm9kZS5jPTI3Nz12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmcy9ibm9kZS5jLTI4OS1cXHRcXHRjbmlkID0gY3B1X3RvX2JlMzIodG1wLVxcdTAwM2VuZXh0KTtcXG5mcy9oZnMvYm5vZGUuYzoyOTA6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKHRtcCwgXFx1MDAyNmNuaWQsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbmV4dCksIDQpO1xcbmZzL2hmcy9ibm9kZS5jLTI5MS1cXHRcXHRoZnNfYm5vZGVfcHV0KHRtcCk7XFxuLS1cXG5mcy9oZnMvYm5vZGUuYy0zMDAtXFx0XFx0Y25pZCA9IGNwdV90b19iZTMyKHRtcC1cXHUwMDNlcHJldik7XFxuZnMvaGZzL2Jub2RlLmM6MzAxOlxcdFxcdGhmc19ibm9kZV93cml0ZSh0bXAsIFxcdTAwMjZjbmlkLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIHByZXYpLCA0KTtcXG5mcy9oZnMvYm5vZGUuYy0zMDItXFx0XFx0aGZzX2Jub2RlX3B1dCh0bXApO1xcbi0tXFxuZnMvaGZzL2JyZWMuYz02NT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIGludCBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTExMi1cXHQvKiB3cml0ZSBuZXcgbGFzdCBvZmZzZXQgKi9cXG5mcy9oZnMvYnJlYy5jOjExMzpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbnVtX3JlY3MpLCBub2RlLVxcdTAwM2VudW1fcmVjcyk7XFxuZnMvaGZzL2JyZWMuYzoxMTQ6XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBlbmRfcmVjX29mZiwgZW5kX29mZiArIHNpemUpO1xcbmZzL2hmcy9icmVjLmMtMTE1LVxcdGRhdGFfb2ZmID0gZW5kX29mZjtcXG4tLVxcbmZzL2hmcy9icmVjLmMtMTIyLVxcdFxcdGRhdGFfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIGRhdGFfcmVjX29mZiArIDIpO1xcbmZzL2hmcy9icmVjLmM6MTIzOlxcdFxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZGF0YV9yZWNfb2ZmLCBkYXRhX29mZiArIHNpemUpO1xcbmZzL2hmcy9icmVjLmMtMTI0LVxcdFxcdGRhdGFfcmVjX29mZiArPSAyO1xcbi0tXFxuZnMvaGZzL2JyZWMuYy0xMzEtc2tpcDpcXG5mcy9oZnMvYnJlYy5jOjEzMjpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgZmQtXFx1MDAzZXNlYXJjaF9rZXksIGRhdGFfb2ZmLCBrZXlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jOjEzMzpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgZW50cnksIGRhdGFfb2ZmICsga2V5X2xlbiwgZW50cnlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jLTEzNC1cXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG4tLVxcbmZzL2hmcy9icmVjLmM9MTc3PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2JyZWMuYy0yMDgtXFx0fVxcbmZzL2hmcy9icmVjLmM6MjA5OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBudW1fcmVjcyksIG5vZGUtXFx1MDAzZW51bV9yZWNzKTtcXG5mcy9oZnMvYnJlYy5jLTIxMC1cXG4tLVxcbmZzL2hmcy9icmVjLmMtMjE2LVxcdFxcdGRhdGFfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbmZzL2hmcy9icmVjLmM6MjE3OlxcdFxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgcmVjX29mZiArIDIsIGRhdGFfb2ZmIC0gc2l6ZSk7XFxuZnMvaGZzL2JyZWMuYy0yMTgtXFx0XFx0cmVjX29mZiAtPSAyO1xcbi0tXFxuZnMvaGZzL2JyZWMuYz0yMzE9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTMwNS1cXHR3aGlsZSAobnVtX3JlY3MpIHtcXG5mcy9oZnMvYnJlYy5jOjMwNjpcXHRcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCBuZXdfcmVjX29mZiwgbmV3X29mZik7XFxuZnMvaGZzL2JyZWMuYy0zMDctXFx0XFx0b2xkX3JlY19vZmYgLT0gMjtcXG4tLVxcbmZzL2hmcy9icmVjLmMtMzEyLVxcdH1cXG5mcy9oZnMvYnJlYy5jOjMxMzpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCBuZXdfcmVjX29mZiwgbmV3X29mZik7XFxuZnMvaGZzL2JyZWMuYy0zMTQtXFx0aGZzX2Jub2RlX2NvcHkobmV3X25vZGUsIDE0LCBub2RlLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCAtIGRhdGFfc3RhcnQpO1xcbi0tXFxuZnMvaGZzL2JyZWMuYy0zMjItXFx0bm9kZV9kZXNjLnJlc2VydmVkID0gMDtcXG5mcy9oZnMvYnJlYy5jOjMyMzpcXHRoZnNfYm5vZGVfd3JpdGUobmV3X25vZGUsIFxcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcXG5mcy9oZnMvYnJlYy5jLTMyNC1cXG4tLVxcbmZzL2hmcy9icmVjLmMtMzI5LVxcdG5vZGVfZGVzYy5udW1fcmVjcyA9IGNwdV90b19iZTE2KG5vZGUtXFx1MDAzZW51bV9yZWNzKTtcXG5mcy9oZnMvYnJlYy5jOjMzMDpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNm5vZGVfZGVzYywgMCwgc2l6ZW9mKG5vZGVfZGVzYykpO1xcbmZzL2hmcy9icmVjLmMtMzMxLVxcbi0tXFxuZnMvaGZzL2JyZWMuYy0zMzYtXFx0XFx0bm9kZV9kZXNjLnByZXYgPSBjcHVfdG9fYmUzMihuZXh0X25vZGUtXFx1MDAzZXByZXYpO1xcbmZzL2hmcy9icmVjLmM6MzM3OlxcdFxcdGhmc19ibm9kZV93cml0ZShuZXh0X25vZGUsIFxcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcXG5mcy9oZnMvYnJlYy5jLTMzOC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5leHRfbm9kZSk7XFxuLS1cXG5mcy9oZnMvYnJlYy5jPTM1Mj1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2JyZWMuYy00MDUtXFx0ZW5kX29mZiA9IHN0YXJ0X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihwYXJlbnQsIHJlY19vZmYpO1xcbmZzL2hmcy9icmVjLmM6NDA2OlxcdGhmc19ibm9kZV93cml0ZV91MTYocGFyZW50LCByZWNfb2ZmLCBzdGFydF9vZmYgKyBkaWZmKTtcXG5mcy9oZnMvYnJlYy5jLTQwNy1cXHRzdGFydF9vZmYgLT0gNDtcXHQvKiBtb3ZlIHByZXZpb3VzIGNuaWQgdG9vICovXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTQxMS1cXHRcXHRlbmRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KHBhcmVudCwgcmVjX29mZik7XFxuZnMvaGZzL2JyZWMuYzo0MTI6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihwYXJlbnQsIHJlY19vZmYsIGVuZF9vZmYgKyBkaWZmKTtcXG5mcy9oZnMvYnJlYy5jLTQxMy1cXHR9XFxuLS1cXG5mcy9oZnMvYnJlYy5jLTQxOC1cXHRpZiAoISh0cmVlLVxcdTAwM2VhdHRyaWJ1dGVzIFxcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykpXFxuZnMvaGZzL2JyZWMuYzo0MTk6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3U4KHBhcmVudCwgZmQtXFx1MDAzZWtleW9mZnNldCwgbmV3a2V5bGVuIC0gMSk7XFxuZnMvaGZzL2JyZWMuYy00MjAtXFx0aGZzX2Jub2RlX2R1bXAocGFyZW50KTtcXG4tLVxcbmZzL2hmcy9icmVjLmM9NDU4PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmcy9icmVjLmMtNDk2LVxcdG5vZGVfZGVzYy5yZXNlcnZlZCA9IDA7XFxuZnMvaGZzL2JyZWMuYzo0OTc6XFx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcXHUwMDI2bm9kZV9kZXNjLCAwLCBzaXplb2Yobm9kZV9kZXNjKSk7XFxuZnMvaGZzL2JyZWMuYy00OTgtXFxuZnMvaGZzL2JyZWMuYy00OTktXFx0cmVjID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMjtcXG5mcy9oZnMvYnJlYy5jOjUwMDpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCByZWMsIDE0KTtcXG5mcy9oZnMvYnJlYy5jLTUwMS1cXG4tLVxcbmZzL2hmcy9icmVjLmMtNTEzLVxcdFxcdFxcdGtleV9zaXplID0gdHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAxO1xcbmZzL2hmcy9icmVjLmM6NTE0OlxcdFxcdFxcdGhmc19ibm9kZV93cml0ZV91OChuZXdfbm9kZSwgMTQsIHRyZWUtXFx1MDAzZW1heF9rZXlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jLTUxNS1cXHRcXHR9XFxuLS1cXG5mcy9oZnMvYnJlYy5jLTUxNy1cXHRcXHRjbmlkID0gY3B1X3RvX2JlMzIobm9kZS1cXHUwMDNldGhpcyk7XFxuZnMvaGZzL2JyZWMuYzo1MTg6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcXHUwMDI2Y25pZCwgMTQgKyBrZXlfc2l6ZSwgNCk7XFxuZnMvaGZzL2JyZWMuYy01MTktXFxuZnMvaGZzL2JyZWMuYy01MjAtXFx0XFx0cmVjIC09IDI7XFxuZnMvaGZzL2JyZWMuYzo1MjE6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihuZXdfbm9kZSwgcmVjLCAxNCArIGtleV9zaXplICsgNCk7XFxuZnMvaGZzL2JyZWMuYy01MjItXFxuLS1cXG5mcy9oZnMvYnRyZWUuYz0yMjY9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX25ld19ibWFwKHN0cnVjdCBoZnNfYm5vZGUgKnByZXYsIHUzMiBpZHgpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0yNDEtXFx0Y25pZCA9IGNwdV90b19iZTMyKGlkeCk7XFxuZnMvaGZzL2J0cmVlLmM6MjQyOlxcdGhmc19ibm9kZV93cml0ZShwcmV2LCBcXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XFxuZnMvaGZzL2J0cmVlLmMtMjQzLVxcbi0tXFxuZnMvaGZzL2J0cmVlLmMtMjUyLVxcdGRlc2MucmVzZXJ2ZWQgPSAwO1xcbmZzL2hmcy9idHJlZS5jOjI1MzpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuZnMvaGZzL2J0cmVlLmM6MjU0OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgMTQsIDB4ODAwMCk7XFxuZnMvaGZzL2J0cmVlLmM6MjU1OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMiwgMTQpO1xcbmZzL2hmcy9idHJlZS5jOjI1NjpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDQsIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDYpO1xcbmZzL2hmcy9idHJlZS5jLTI1Ny1cXG4tLVxcbmZzL2hmcy9idHJlZS5oPTEwMD1leHRlcm4gdm9pZCBoZnNfYm5vZGVfcmVhZF9rZXkoc3RydWN0IGhmc19ibm9kZSAqLCB2b2lkICosIGludCk7XFxuZnMvaGZzL2J0cmVlLmg6MTAxOmV4dGVybiB2b2lkIGhmc19ibm9kZV93cml0ZShzdHJ1Y3QgaGZzX2Jub2RlICosIHZvaWQgKiwgaW50LCBpbnQpO1xcbmZzL2hmcy9idHJlZS5oOjEwMjpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTE2KHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCB1MTYpO1xcbmZzL2hmcy9idHJlZS5oOjEwMzpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTgoc3RydWN0IGhmc19ibm9kZSAqLCBpbnQsIHU4KTtcXG5mcy9oZnMvYnRyZWUuaC0xMDQtZXh0ZXJuIHZvaWQgaGZzX2Jub2RlX2NsZWFyKHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCBpbnQpO1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTExMD1zdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEzMC1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9oZnMvZXh0ZW50LmM6MTMxOlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC1cXHUwMDNlYm5vZGUsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVxcdTAwM2VlbnRyeW9mZnNldCwgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTMyLVxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xcbi0tXFxuZnMvaGZzL2lub2RlLmM9NDIxPWludCBoZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9oZnMvaW5vZGUuYy00NzctXFxuZnMvaGZzL2lub2RlLmM6NDc4OlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXFxuZnMvaGZzL2lub2RlLmMtNDc5LVxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGhmc19jYXRfZGlyKSk7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYy00ODYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmVjLmZpbGUuUkxnTGVuLCBcXHUwMDI2cmVjLmZpbGUuUlB5TGVuKTtcXG5mcy9oZnMvaW5vZGUuYzo0ODc6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcXG5mcy9oZnMvaW5vZGUuYy00ODgtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBoZnNfY2F0X2ZpbGUpKTtcXG4tLVxcbmZzL2hmcy9pbm9kZS5jLTUwNC1cXG5mcy9oZnMvaW5vZGUuYzo1MDU6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcXG5mcy9oZnMvaW5vZGUuYy01MDYtXFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjQxLjA5MzcxNDUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzIyNzUwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHNldC1yZXN1bHRzYCBDYWxsKipcblxuT2theSwgdGltZSB0byBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBLTVNBTiBpc24ndCBnb2luZyB0byBiZSBuZWVkZWQgZm9yIHRoaXMgb25lLiBMZXQgbWUgZXhwbGFpbiBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudCgpYC4gU3BlY2lmaWNhbGx5LCBpdCBtYWtlcyBzdXJlIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAg4oCTIHRoZSBsZW5ndGggb2YgdGhlIGVudHJ5IHdlJ3JlIHdvcmtpbmcgd2l0aCDigJMgaXMgKmV4YWN0bHkqIHRoZSBzaXplIG9mIGBoZnNfZXh0ZW50X3JlY2AgYmVmb3JlIGl0IGNhbGxzIGBoZnNfYm5vZGVfd3JpdGUoKWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgcHJldmVudHMgYSB2ZXJ5IHNwZWNpZmljIGtpbmQgb2YgdnVsbmVyYWJpbGl0eTogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuIFRoaXMgcmVhZCB3b3VsZCBvY2N1ciBpZiB3ZSBzdHVtYmxlIHVwb24gY29ycnVwdGVkIG9uLWRpc2sgbWV0YWRhdGEgd2hlcmUgdGhlIHJlY29yZCBsZW5ndGggaXMgdW5leHBlY3RlZC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhY3RzIGFzIGEgZ2F0ZWtlZXBlciwgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgc3RydWN0dXJlLCB0aHVzIHNhZmVndWFyZGluZyB0aGUgYm5vZGUgZW50cnkgZnJvbSBjb3JydXB0aW9uLiBOb3csIHRoZSByZWFzb24gS01TQU4gaXNuJ3QgYSBjb25jZXJuIGhlcmUgaXMgYmVjYXVzZSB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgY3J1Y2lhbGx5LCBkb2Vzbid0IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyB0aGUgcmVhbCB3aW4uIFNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0J3MgYWxsIGFib3V0IHByZXZlbnRpbmcgYW4gZXhpc3RpbmcgcmVhZCB2dWxuZXJhYmlsaXR5IOKAkyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGVjaywgYW5kIHRoZSBkZWVwZXIgYW5hbHlzaXMgYXNzb2NpYXRlZCB3aXRoIEtNU0FOIGlzIHNpbXBseSBub3QgbmVlZGVkLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1NiwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6NDUuODY1OTkyODQzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgv5xl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 11:43:51 +0000 UTC FinishedAt: 2026-09-09 12:47:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS" ], "series_id": "53f2ec72-765e-4a1f-b386-c21cb02b968f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__hfs_ext_write_extent", "hfs_ext_write_extent", "hfs_extend_file", "hfs_file_truncate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faGZzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzX2V4dGVuZF9maWxlJiMzNDssCiAgICAmIzM0O2hmc19maWxlX3RydW5jYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHNgIGludG8gYSBibm9kZS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyB3aGVyZSBgZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4gU3VjaCBidWZmZXIgb3Zlci1yZWFkcyBhcmUgbWVtb3J5IGJvdW5kYXJ5IGlzc3VlcyBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSB1c2VyLXNwYWNlIGNvcGllcywgb3IgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGFuZGxpbmcsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvZXh0ZW50LmMgYi9mcy9oZnMvZXh0ZW50LmNcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvZXh0ZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9leHRlbnQuY1xuQEAgLTEyNiw2ICYjNDM7MTI2LDggQEAgc3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzX2V4dGVudF9yZWMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRlbmRfZmlsZSYjMzQ7LAogICAgJiMzNDtoZnNfZmlsZV90cnVuY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuYwppbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NAotLS0gYS9mcy9oZnMvZXh0ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2V4dGVudC5jCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiAJfSBlbHNlIHsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHMsIGZkLSZndDtlbnRyeW9mZnNldCwgZmQtJmd0O2VudHJ5bGVuZ3RoKTsKIAkJSEZTX0koaW5vZGUpLSZndDtmbGFncyAmYW1wOz0gfkhGU19GTEdfRVhUX0RJUlRZOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMAoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBIRlMmIzQzOyBFeHRlbnQgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBUaGlzIHJlcXVpcmVzIGEgZm9jdXNlZCBhcHByb2FjaCwgc28gSSYjMzk7bSB0aGlua2luZzogbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgZnMvaGZzL2V4dGVudC5jYCBmaWxlLiBHaXZlbiB0aGUgZG9tYWluLCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZ3Jhc3AgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3QuCgpUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBhIGRpcmVjdCBpbnNwZWN0aW9uIG9mIHRoZSBjaGFuZ2VzLCBzbyBJJiMzOTtsbCBiZWdpbiBieSBhbmFseXppbmcgdGhlIGdpdCBkaWZmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBmYXZvcml0ZSB0b29scyBmb3IgZGVlcGVyIGFuYWx5c2lzIGhlcmUsIHNvIEkmIzM5O20gdGhpbmtpbmcgZWl0aGVyIGEgcmVsaWFibGUgYHJlYWQtZmlsZWAgdG8gdmlldyB0aGUgY29kZSwgb3IgcGVyaGFwcyBhIG1vcmUgZm9jdXNlZCBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIGNhbGxzIHRvIHRoZSBhZmZlY3RlZCBjb2RlLgoKTmV4dCB1cCwgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgdml0YWwuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGFuZCB0byBhY2NvbXBsaXNoIHRoYXQgSSB3aWxsIHJldmlldyB0aGUgZmlsZSAoYGZzL2hmcy9leHRlbnQuY2ApIGFuZCBhbGwgaXRzIHJlbGF0ZWQgY2FsbGVycyBhbmQgS2NvbmZpZyBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiAxMTE6XHR7XG4gMTEyOlx0XHRpbnQgcmVzO1xuIDExMzpcdFxuIDExNDpcdFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXHUwMDNlaV9pbm8sIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQsXG4gMTE1Olx0XHRcdFx0ICBIRlNfSVNfUlNSQyhpbm9kZSkgPyAgSEZTX0ZLX1JTUkMgOiBIRlNfRktfREFUQSk7XG4gMTE2Olx0XHRyZXMgPSBoZnNfYnJlY19maW5kKGZkKTtcbiAxMTc6XHRcdGlmIChIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xuIDExODpcdFx0XHRpZiAocmVzICE9IC1FTk9FTlQpXG4gMTE5Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxMjA6XHRcdFx0LyogRmFpbCBlYXJseSBhbmQgYXZvaWQgRU5PU1BDIGR1cmluZyB0aGUgYnRyZWUgb3BlcmF0aW9uICovXG4gMTIxOlx0XHRcdHJlcyA9IGhmc19ibWFwX3Jlc2VydmUoZmQtXHUwMDNldHJlZSwgZmQtXHUwMDNldHJlZS1cdTAwM2VkZXB0aCAmIzQzOyAxKTtcbiAxMjI6XHRcdFx0aWYgKHJlcylcbiAxMjM6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyNDpcdFx0XHRoZnNfYnJlY19pbnNlcnQoZmQsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG4gMTI1Olx0XHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcbiAxMjY6XHRcdH0gZWxzZSB7XG4gMTI3Olx0XHRcdGlmIChyZXMpXG4gMTI4Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxMjk6XHRcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXG4gMTMwOlx0XHRcdFx0cmV0dXJuIC1FSU87XG4gMTMxOlx0XHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIDEzMjpcdFx0XHRIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XHRyZXR1cm4gMDtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gMTM4Olx0e1xuIDEzOTpcdFx0c3RydWN0IGhmc19maW5kX2RhdGEgZmQ7XG4gMTQwOlx0XHRpbnQgcmVzID0gMDtcbiAxNDE6XHRcbiAxNDI6XHRcdGlmIChIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XG4gMTQzOlx0XHRcdHJlcyA9IGhmc19maW5kX2luaXQoSEZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZWV4dF90cmVlLCBcdTAwMjZmZCk7XG4gMTQ0Olx0XHRcdGlmIChyZXMpXG4gMTQ1Olx0XHRcdFx0cmV0dXJuIHJlcztcbiAxNDY6XHRcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuIDE0NzpcdFx0XHRoZnNfZmluZF9leGl0KFx1MDAyNmZkKTtcbiAxNDg6XHRcdH1cbiAxNDk6XHRcdHJldHVybiByZXM7XG4gMTUwOlx0fVxuIDE1MTpcdFxuIDE1MjpcdHN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBoZnNfZXh0ZW50ICpleHRlbnQsXG4gMTUzOlx0XHRcdFx0XHRcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXG4gMTU0Olx0e1xuIDE1NTpcdFx0aW50IHJlcztcbiAxNTY6XHRcbiAxNTc6XHRcdGhmc19leHRfYnVpbGRfa2V5KGZkLVx1MDAzZXNlYXJjaF9rZXksIGNuaWQsIGJsb2NrLCB0eXBlKTtcbiAxNTg6XHRcdGZkLVx1MDAzZWtleS1cdTAwM2VleHQuRk51bSA9IDA7XG4gMTU5Olx0XHRyZXMgPSBoZnNfYnJlY19maW5kKGZkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYz05OT1zdGF0aWMgdTE2IGhmc19leHRfbGFzdGJsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEwOS1cbmZzL2hmcy9leHRlbnQuYzoxMTA6c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbmZzL2hmcy9leHRlbnQuYy0xMTEte1xuLS1cbmZzL2hmcy9leHRlbnQuYz0xMzc9aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTE0NS1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzL2V4dGVudC5jOjE0NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE0Ny1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTE3MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuLS1cbmZzL2hmcy9leHRlbnQuYy0xNzUtXHRpZiAoSEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xuZnMvaGZzL2V4dGVudC5jOjE3NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE3Ny1cdFx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmcy9LY29uZmlnOjI6Y29uZmlnIEhGU19GU1xuZnMvaGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvaGZzL01ha2VmaWxlLTUtXG5mcy9oZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSEZTX0ZTKSAmIzQzOz0gaGZzLm9cbmZzL2hmcy9NYWtlZmlsZS03LVxuLS1cbmZzL2hmcy9oZnNfZnMuaC04LVxuZnMvaGZzL2hmc19mcy5oOjk6I2lmbmRlZiBfTElOVVhfSEZTX0ZTX0hcbmZzL2hmcy9oZnNfZnMuaDoxMDojZGVmaW5lIF9MSU5VWF9IRlNfRlNfSFxuZnMvaGZzL2hmc19mcy5oLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEhGUyYjNDM7IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBIRlMmIzQzOyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgZnMvaGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBwcm9iYWJseSBldmVuIHNvbWUgdXNlZnVsIGNvbW1lbnRhcnkgb24gdGhlaXIgZWZmZWN0cy4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IGJpYmxlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBIRlMmIzQzOyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgTWFjaW50b3NoLWZvcm1hdHRlZFxuICAxMDpcdFx0ICBmbG9wcHkgZGlza3MgYW5kIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDExOlx0XHQgIFBsZWFzZSByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XHUwMDNlIHRvIGxlYXJuIGFib3V0XG4gIDEyOlx0XHQgIHRoZSBhdmFpbGFibGUgbW91bnQgb3B0aW9ucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgaW4gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYGlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB3cml0aW5nIGNvcnJ1cHRlZCBvciBvdXQtb2YtYm91bmRzIGV4dGVudCByZWNvcmRzLiBUaGlzIGxvb2tzIGxpa2UgYSBzYW5pdHkgY2hlY2suCgpJcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzLCBkZWZpbml0ZWx5LiBUaGUgSEZTIGZpbGVzeXN0ZW0gY2FuIGJlIG1vdW50ZWQgdmlhIGEgbG9vcCBkZXZpY2UuIFN5emthbGxlciwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCBmb3IgZmlsZXN5c3RlbSBmdXp6aW5nLCBtb3VudHMgY29ycnVwdGVkIEhGUyBpbWFnZXMgcmVndWxhcmx5LiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBuZXcgY2hlY2sgd2lsbCBnZXQgdHJpZ2dlcmVkLgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvZGUgbW9kaWZpZXMgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wIG1vdW50cy4gSXQgYWxzbyB0b3VjaGVzIG9uIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBiYXNlZCBvbiB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgYWxpZ25zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBhbmQgcnVudGltZSBhc3NlcnRpb25zLiBGaWxlIHN5c3RlbXMgYXJlIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBhbnl3YXksIGdpdmVuIHRoZSBjb21wbGV4IGludGVyYWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZm9jdXMgc3ltYm9sczogYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHN0YXRpYywgYnV0IGlzIGNhbGxlZCBieSBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAuIExldCBtZSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgb3IgZXhwb3J0ZWQgc3ltYm9scywgc3VjaCBhcyBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAsIG9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBmcy9oZnMvZXh0ZW50LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVhY2hhYmxlIGVudHJ5IHBvaW50cy4gV2UgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2V4dF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzL2J0cmVlLmM9MTk9c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKVxuLS1cbmZzL2hmcy9idHJlZS5jLTg3LVxuZnMvaGZzL2J0cmVlLmM6ODg6XHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0kodHJlZS1cdTAwM2Vpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cywgMCk7XG5mcy9oZnMvYnRyZWUuYy04OS1cdHN0YXJ0X2Jsb2NrID0gSEZTX1NCKHNiKS1cdTAwM2Vmc19zdGFydCAmIzQzOyAoZGJsb2NrICogSEZTX1NCKHNiKS1cdTAwM2Vmc19kaXYpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0yMC0gKi9cbmZzL2hmcy9leHRlbnQuYzoyMTpzdGF0aWMgdm9pZCBoZnNfZXh0X2J1aWxkX2tleShoZnNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLCB1MTYgYmxvY2ssIHU4IHR5cGUpXG5mcy9oZnMvZXh0ZW50LmMtMjIte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0yOS0vKlxuZnMvaGZzL2V4dGVudC5jOjMwOiAqIGhmc19leHRfY29tcGFyZSgpXG5mcy9oZnMvZXh0ZW50LmMtMzEtICpcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzktICogSW5wdXQgVmFyaWFibGUocyk6XG5mcy9oZnMvZXh0ZW50LmM6NDA6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTE6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGtleSB0byBjb21wYXJlXG5mcy9oZnMvZXh0ZW50LmM6NDE6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTI6IHBvaW50ZXIgdG8gdGhlIHNlY29uZCBrZXkgdG8gY29tcGFyZVxuZnMvaGZzL2V4dGVudC5jLTQyLSAqIE91dHB1dCBWYXJpYWJsZShzKTpcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDYtICogUHJlY29uZGl0aW9uczpcbmZzL2hmcy9leHRlbnQuYzo0NzogKiAgIGtleTEgYW5kIGtleTIgcG9pbnQgdG8gXCYjMzQ7dmFsaWRcJiMzNDsgKHN0cnVjdCBoZnNfZXh0X2tleSlzLlxuZnMvaGZzL2V4dGVudC5jLTQ4LSAqIFBvc3Rjb25kaXRpb25zOlxuZnMvaGZzL2V4dGVudC5jLTQ5LSAqICAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gc2lkZS1lZmZlY3RzICovXG5mcy9oZnMvZXh0ZW50LmM6NTA6aW50IGhmc19leHRfa2V5Y21wKGNvbnN0IGJ0cmVlX2tleSAqa2V5MSwgY29uc3QgYnRyZWVfa2V5ICprZXkyKVxuZnMvaGZzL2V4dGVudC5jLTUxLXtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNjktLypcbmZzL2hmcy9leHRlbnQuYzo3MDogKiBoZnNfZXh0X2ZpbmRfYmxvY2tcbmZzL2hmcy9leHRlbnQuYy03MS0gKlxuLS1cbmZzL2hmcy9leHRlbnQuYy03My0gKi9cbmZzL2hmcy9leHRlbnQuYzo3NDp1MTYgaGZzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQsIHUxNiBvZmYpXG5mcy9oZnMvZXh0ZW50LmMtNzUte1xuLS1cbmZzL2hmcy9leHRlbnQuYy04OC1cbmZzL2hmcy9leHRlbnQuYzo4OTpzdGF0aWMgaW50IGhmc19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc19leHRlbnQgKmV4dClcbmZzL2hmcy9leHRlbnQuYy05MC17XG4tLVxuZnMvaGZzL2V4dGVudC5jLTk4LVxuZnMvaGZzL2V4dGVudC5jOjk5OnN0YXRpYyB1MTYgaGZzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc19leHRlbnQgKmV4dClcbmZzL2hmcy9leHRlbnQuYy0xMDAte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xMDktXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG5mcy9oZnMvZXh0ZW50LmMtMTExLXtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTEzLVxuZnMvaGZzL2V4dGVudC5jOjExNDpcdGhmc19leHRfYnVpbGRfa2V5KGZkLVx1MDAzZXNlYXJjaF9rZXksIGlub2RlLVx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0LFxuZnMvaGZzL2V4dGVudC5jLTExNS1cdFx0XHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTM2LVxuZnMvaGZzL2V4dGVudC5jOjEzNzppbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmcy9leHRlbnQuYy0xMzgte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNDUtXHRcdFx0cmV0dXJuIHJlcztcbmZzL2hmcy9leHRlbnQuYzoxNDY6XHRcdHJlcyA9IF9faGZzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFx1MDAyNmZkKTtcbmZzL2hmcy9leHRlbnQuYy0xNDctXHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNTEtXG5mcy9oZnMvZXh0ZW50LmM6MTUyOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBoZnNfZXh0ZW50ICpleHRlbnQsXG5mcy9oZnMvZXh0ZW50LmMtMTUzLVx0XHRcdFx0XHR1MzIgY25pZCwgdTMyIGJsb2NrLCB1OCB0eXBlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy0xNTYtXG5mcy9oZnMvZXh0ZW50LmM6MTU3Olx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXHUwMDNlc2VhcmNoX2tleSwgY25pZCwgYmxvY2ssIHR5cGUpO1xuZnMvaGZzL2V4dGVudC5jLTE1OC1cdGZkLVx1MDAzZWtleS1cdTAwM2VleHQuRk51bSA9IDA7XG4tLVxuZnMvaGZzL2V4dGVudC5jLTE3MC1cbmZzL2hmcy9leHRlbnQuYzoxNzE6c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbmZzL2hmcy9leHRlbnQuYy0xNzIte1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xNzUtXHRpZiAoSEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xuZnMvaGZzL2V4dGVudC5jOjE3NjpcdFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzL2V4dGVudC5jLTE3Ny1cdFx0aWYgKHJlcylcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTgwLVxuZnMvaGZzL2V4dGVudC5jOjE4MTpcdHJlcyA9IF9faGZzX2V4dF9yZWFkX2V4dGVudChmZCwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBpbm9kZS1cdTAwM2VpX2lubyxcbmZzL2hmcy9leHRlbnQuYy0xODItXHRcdFx0XHQgICAgYmxvY2ssIEhGU19JU19SU1JDKGlub2RlKSA/IEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xODQtXHRcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQgPSBiZTE2X3RvX2NwdShmZC1cdTAwM2VrZXktXHUwMDNlZXh0LkZBQk4pO1xuZnMvaGZzL2V4dGVudC5jOjE4NTpcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9ibG9ja3MgPSBoZnNfZXh0X2Jsb2NrX2NvdW50KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtMTg2LVx0fSBlbHNlIHtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTkyLVxuZnMvaGZzL2V4dGVudC5jOjE5MzpzdGF0aWMgaW50IGhmc19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTE2IGJsb2NrKVxuZnMvaGZzL2V4dGVudC5jLTE5NC17XG4tLVxuZnMvaGZzL2V4dGVudC5jLTIwMy1cdGlmICghcmVzKSB7XG5mcy9oZnMvZXh0ZW50LmM6MjA0Olx0XHRyZXMgPSBfX2hmc19leHRfY2FjaGVfZXh0ZW50KFx1MDAyNmZkLCBpbm9kZSwgYmxvY2spO1xuZnMvaGZzL2V4dGVudC5jLTIwNS1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTI4OT1pbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaGZzX2NhdF9maWxlICpmaWxlLCBpbnQgdHlwZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzIxLVx0ZG8ge1xuZnMvaGZzL2V4dGVudC5jOjMyMjpcdFx0cmVzID0gX19oZnNfZXh0X3JlYWRfZXh0ZW50KFx1MDAyNmZkLCBleHRlbnQsIGNuaWQsIHRvdGFsX2Jsb2NrcywgdHlwZSk7XG5mcy9oZnMvZXh0ZW50LmMtMzIzLVx0XHRpZiAocmVzKVxuLS1cbmZzL2hmcy9leHRlbnQuYz0zMzg9aW50IGhmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4tLVxuZnMvaGZzL2V4dGVudC5jLTM2Mi1cdGlmIChhYmxvY2sgXHUwMDNjIEhGU19JKGlub2RlKS1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbmZzL2hmcy9leHRlbnQuYzozNjM6XHRcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSShpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbmZzL2hmcy9leHRlbnQuYy0zNjQtXHRcdGdvdG8gZG9uZTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzY3LVx0bXV0ZXhfbG9jayhcdTAwMjZIRlNfSShpbm9kZSktXHUwMDNlZXh0ZW50c19sb2NrKTtcbmZzL2hmcy9leHRlbnQuYzozNjg6XHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xuZnMvaGZzL2V4dGVudC5jLTM2OS1cdGlmICghcmVzKVxuZnMvaGZzL2V4dGVudC5jOjM3MDpcdFx0ZGJsb2NrID0gaGZzX2V4dF9maW5kX2Jsb2NrKEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbmZzL2hmcy9leHRlbnQuYy0zNzEtXHRcdFx0XHRcdCAgICBhYmxvY2sgLSBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0KTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MzkzPWludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDAwLVx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VhbGxvY19ibG9ja3MgPT0gSEZTX0koaW5vZGUpLVx1MDAzZWZpcnN0X2Jsb2NrcylcbmZzL2hmcy9leHRlbnQuYzo0MDE6XHRcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXHUwMDNlZmlyc3RfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDAyLVx0ZWxzZSB7XG5mcy9oZnMvZXh0ZW50LmM6NDAzOlx0XHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlYWxsb2NfYmxvY2tzKTtcbmZzL2hmcy9leHRlbnQuYy00MDQtXHRcdGlmIChyZXMpXG5mcy9oZnMvZXh0ZW50LmMtNDA1LVx0XHRcdGdvdG8gb3V0O1xuZnMvaGZzL2V4dGVudC5jOjQwNjpcdFx0Z29hbCA9IGhmc19leHRfbGFzdGJsb2NrKEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDA3LVx0fVxuLS1cbmZzL2hmcy9leHRlbnQuYy00NjEtXHRoZnNfZGJnKEVYVEVOVCwgXCYjMzQ7aW5zZXJ0IG5ldyBleHRlbnRcXG5cJiMzNDspO1xuZnMvaGZzL2V4dGVudC5jOjQ2MjpcdHJlcyA9IGhmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlKTtcbmZzL2hmcy9leHRlbnQuYy00NjMtXHRpZiAocmVzKVxuLS1cbmZzL2hmcy9leHRlbnQuYz00Nzg9dm9pZCBoZnNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy01MjctXHRcdH1cbmZzL2hmcy9leHRlbnQuYzo1Mjg6XHRcdHJlcyA9IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoXHUwMDI2ZmQsIGlub2RlLCBhbGxvY19jbnQpO1xuZnMvaGZzL2V4dGVudC5jLTUyOS1cdFx0aWYgKHJlcylcbi0tXG5mcy9oZnMvaGZzLmgtNTctXG5mcy9oZnMvaGZzLmg6NTg6LyogbGVnYWwgdmFsdWVzIGZvciBoZnNfZXh0X2tleS5Ga1R5cGUgYW5kIGhmc19maWxlLmZvcmsgKi9cbmZzL2hmcy9oZnMuaC01OS0jZGVmaW5lIEhGU19GS19EQVRBXHQweDAwXG4tLVxuZnMvaGZzL2hmcy5oPTE0OT1zdHJ1Y3QgaGZzX2NhdF9rZXkge1xuLS1cbmZzL2hmcy9oZnMuaC0xNTYtLyogVGhlIGtleSB1c2VkIGluIHRoZSBleHRlbnRzIGItdHJlZTogKi9cbmZzL2hmcy9oZnMuaDoxNTc6c3RydWN0IGhmc19leHRfa2V5IHtcbmZzL2hmcy9oZnMuaC0xNTgtXHR1OCBrZXlfbGVuO1x0XHQvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGtleSAqL1xuLS1cbmZzL2hmcy9oZnMuaD0xNjQ9dHlwZWRlZiB1bmlvbiBoZnNfYnRyZWVfa2V5IHtcbi0tXG5mcy9oZnMvaGZzLmgtMTY2LVx0c3RydWN0IGhmc19jYXRfa2V5IGNhdDtcbmZzL2hmcy9oZnMuaDoxNjc6XHRzdHJ1Y3QgaGZzX2V4dF9rZXkgZXh0O1xuZnMvaGZzL2hmcy5oLTE2OC19IGhmc19idHJlZV9rZXk7XG4tLVxuZnMvaGZzL2hmcy5oLTE3MC0jZGVmaW5lIEhGU19NQVhfQ0FUX0tFWUxFTlx0KHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9rZXkpIC0gc2l6ZW9mKHU4KSlcbmZzL2hmcy9oZnMuaDoxNzE6I2RlZmluZSBIRlNfTUFYX0VYVF9LRVlMRU5cdChzaXplb2Yoc3RydWN0IGhmc19leHRfa2V5KSAtIHNpemVvZih1OCkpXG5mcy9oZnMvaGZzLmgtMTcyLVxuLS1cbmZzL2hmcy9oZnNfZnMuaD0xODk9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbi0tXG5mcy9oZnMvaGZzX2ZzLmgtMTkxLS8qIGV4dGVudC5jICovXG5mcy9oZnMvaGZzX2ZzLmg6MTkyOmV4dGVybiBpbnQgaGZzX2V4dF9rZXljbXAoY29uc3QgYnRyZWVfa2V5ICosIGNvbnN0IGJ0cmVlX2tleSAqKTtcbmZzL2hmcy9oZnNfZnMuaDoxOTM6ZXh0ZXJuIHUxNiBoZnNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc19leHRlbnQgKmV4dCwgdTE2IG9mZik7XG5mcy9oZnMvaGZzX2ZzLmgtMTk0LWV4dGVybiBpbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGhmc19jYXRfZmlsZSAqLCBpbnQpO1xuZnMvaGZzL2hmc19mcy5oOjE5NTpleHRlcm4gaW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqKTtcbmZzL2hmcy9oZnNfZnMuaC0xOTYtZXh0ZXJuIGludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2hmcy9pbm9kZS5jPTQyMT1pbnQgaGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTQyOC1cdGhmc19kYmcoSU5PREUsIFwmIzM0O2hmc193cml0ZV9pbm9kZTogJWx1XFxuXCYjMzQ7LCBpbm9kZS1cdTAwM2VpX2lubyk7XG5mcy9oZnMvaW5vZGUuYzo0Mjk6XHRyZXMgPSBoZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSk7XG5mcy9oZnMvaW5vZGUuYy00MzAtXHRpZiAocmVzKVxuLS1cbmZzL2hmcy9tZGIuYz03Mz1pbnQgaGZzX21kYl9nZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnMvbWRiLmMtMTk4LVxuZnMvaGZzL21kYi5jOjE5OTpcdEhGU19TQihzYiktXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0VYVF9DTklELCBoZnNfZXh0X2tleWNtcCk7XG5mcy9oZnMvbWRiLmMtMjAwLVx0aWYgKCFIRlNfU0Ioc2IpLVx1MDAzZWV4dF90cmVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MzEKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEhGUyBFeHRlbnQgV3JpdGluZyBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIEhGUyBleHRlbnQgd3JpdGUgcGF0aC4gRmlyc3QsIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbiBjYWxscy4gSSBzZWUgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHRoZSB0YXJnZXQsIGZvdW5kIHdpdGhpbiBgZnMvaGZzL2V4dGVudC5jYC4gSXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGFuZCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAuIERpZ2dpbmcgZGVlcGVyLCBgaGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIGludm9rZWQgYnkgYGhmc19leHRlbmRfZmlsZWAgYW5kIGBoZnNfd3JpdGVfaW5vZGVgLiBPbiB0aGUgb3RoZXIgaGFuZCwgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgIGlzIGNhbGxlZCBieSBgaGZzX2V4dF9yZWFkX2V4dGVudGAgd2hpY2ggaXMgdXNlZCBieSBgaGZzX2dldF9ibG9ja2AgYW5kIGBoZnNfZXh0ZW5kX2ZpbGVgICphbmQqIGJ5IGBoZnNfZmlsZV90cnVuY2F0ZWAuCgpUaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiBgaGZzX2V4dF93cml0ZV9leHRlbnRgLCBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAsIGBoZnNfZXh0ZW5kX2ZpbGVgLCBgaGZzX2ZpbGVfdHJ1bmNhdGVgLCBhbmQgYGhmc193cml0ZV9pbm9kZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgcHJvcGVybHkgZGVmaW5lZCwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgaXQmIzM5O3MgcHJlc2VudCB3aXRoaW4gdm1saW51eC9oZnMua28gKHdoaWNoIGl0IGlzLCBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbikuIEkmIzM5O2xsIGtlZXAgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGhhbmR5IGFzIGEgcmVmZXJlbmNlLgoKTmV4dCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGp1bXAgb3V0OiBgSEZTX0ZTYC4gSSBrbm93IGBIRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19IRlNfRlNgIGlzIHRoZSAqc3BlY2lmaWMqIGNvbmZpZyBmb3IgdGhpcyBIRlMgZnVuY3Rpb25hbGl0eS4gTm90aGluZyBlbHNlIHNlZW1zIGltbWVkaWF0ZWx5IG5lY2Vzc2FyeS4KCkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMuIFRoZSBwYXRjaCBhZGRzIGEgc2FmZXR5IGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAuIEl0IHZlcmlmaWVzIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGFnYWluc3QgYHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGJlZm9yZSB3cml0aW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAuIFdpdGhvdXQgaXQsIHRoZSBjb2RlIGNvdWxkIGJlIHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXItcmVhZHMgb3IgZXZlbiBjb3JydXB0ZWQgYm5vZGUgd3JpdGVzLCBlc3BlY2lhbGx5IHdpdGggbWFsaWNpb3VzbHkgY3JhZnRlZCBIRlMgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgdGVsbHMgbWUgdGhhdCBmdXp6aW5nIEhGUyBvcGVyYXRpb25zIOKAkyBsaWtlIGZpbGUgdHJ1bmNhdGlvbiwgZXh0ZW5zaW9uLCBhbmQgd3JpdGViYWNrcyDigJMgd2l0aCBzcGVjaWZpY2FsbHkgY3JhZnRlZCBmaWxlc3lzdGVtIGltYWdlcyBpcyBleHRyZW1lbHkgdmFsdWFibGUgdG8gdGVzdCB0aGUgcGF0Y2gmIzM5O3MgZWZmZWN0aXZlbmVzcyBhbmQgdG8gZGV0ZWN0IGFueSByZWdyZXNzaW9ucyB1bmRlciBwb3RlbnRpYWxseSBtYWxpY2lvdXMgaW5wdXRzLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19oZnNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNfZXh0ZW5kX2ZpbGUmIzM0OywKICAgICYjMzQ7aGZzX2ZpbGVfdHJ1bmNhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc19leHRlbmRfZmlsZSYjMzQ7LAogICAgJiMzNDtoZnNfZmlsZV90cnVuY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTFkMDJjNmI0ZjY0MjNiN2Y3NjU2MmVkMDJjYjQyZjAyMTI4ZTliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMjo0Njo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuYwppbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NAotLS0gYS9mcy9oZnMvZXh0ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2V4dGVudC5jCkBAIC0xMjYsNiAmIzQzOzEyNiw4IEBAIHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiAJfSBlbHNlIHsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHMsIGZkLSZndDtlbnRyeW9mZnNldCwgZmQtJmd0O2VudHJ5bGVuZ3RoKTsKIAkJSEZTX0koaW5vZGUpLSZndDtmbGFncyAmYW1wOz0gfkhGU19GTEdfRVhUX0RJUlRZOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb2RlIEFuYWx5c2lzKioKClJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLCBhbG9uZ3NpZGUgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBpbXBsaWNhdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjYuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIHJlYWQtZmlsZSBmdW5jdGlvbiBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9leHRlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0e1xuIDEwMTpcdFx0aW50IGk7XG4gMTAyOlx0XG4gMTAzOlx0XHRleHQgJiM0Mzs9IDI7XG4gMTA0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBleHQtLSwgaSYjNDM7JiM0MzspXG4gMTA1Olx0XHRcdGlmIChleHQtXHUwMDNlY291bnQpXG4gMTA2Olx0XHRcdFx0YnJlYWs7XG4gMTA3Olx0XHRyZXR1cm4gYmUxNl90b19jcHUoZXh0LVx1MDAzZWJsb2NrKSAmIzQzOyBiZTE2X3RvX2NwdShleHQtXHUwMDNlY291bnQpO1xuIDEwODpcdH1cbiAxMDk6XHRcbiAxMTA6XHRzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIDExMTpcdHtcbiAxMTI6XHRcdGludCByZXM7XG4gMTEzOlx0XG4gMTE0Olx0XHRoZnNfZXh0X2J1aWxkX2tleShmZC1cdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cdTAwM2VpX2lubywgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9zdGFydCxcbiAxMTU6XHRcdFx0XHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbiAxMTY6XHRcdHJlcyA9IGhmc19icmVjX2ZpbmQoZmQpO1xuIDExNzpcdFx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjYgSEZTX0ZMR19FWFRfTkVXKSB7XG4gMTE4Olx0XHRcdGlmIChyZXMgIT0gLUVOT0VOVClcbiAxMTk6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyMDpcdFx0XHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cbiAxMjE6XHRcdFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cdTAwM2V0cmVlLCBmZC1cdTAwM2V0cmVlLVx1MDAzZWRlcHRoICYjNDM7IDEpO1xuIDEyMjpcdFx0XHRpZiAocmVzKVxuIDEyMzpcdFx0XHRcdHJldHVybiByZXM7XG4gMTI0Olx0XHRcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBzaXplb2YoaGZzX2V4dGVudF9yZWMpKTtcbiAxMjU6XHRcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVcpO1xuIDEyNjpcdFx0fSBlbHNlIHtcbiAxMjc6XHRcdFx0aWYgKHJlcylcbiAxMjg6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEyOTpcdFx0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcbiAxMzA6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiAxMzE6XHRcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gMTMyOlx0XHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiAxMzM6XHRcdH1cbiAxMzQ6XHRcdHJldHVybiAwO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRpbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiAxMzg6XHR7XG4gMTM5Olx0XHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcbiAxNDA6XHRcdGludCByZXMgPSAwO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjYgSEZTX0ZMR19FWFRfRElSVFkpIHtcbiAxNDM6XHRcdFx0cmVzID0gaGZzX2ZpbmRfaW5pdChIRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZXh0X3RyZWUsIFx1MDAyNmZkKTtcbiAxNDQ6XHRcdFx0aWYgKHJlcylcbiAxNDU6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDE0NjpcdFx0XHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcdTAwMjZmZCk7XG4gMTQ3Olx0XHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFx0cmV0dXJuIHJlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBvcGVyYXRpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBmb3IgZXh0ZW50cy4gSXQgc2VlbXMgdGhhdCBgY2FjaGVkX2V4dGVudHNgIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGJub2RlOiB0aGUgY29kZSBleHBsaWNpdGx5IGNhbGxzIGBoZnNfYm5vZGVfd3JpdGVgIHdpdGggYGZkLSZndDtibm9kZWAsIGBIRlNfSShpbm9kZSktJmd0O2NhY2hlZF9leHRlbnRzYCwgYGZkLSZndDtlbnRyeW9mZnNldGAsIGFuZCBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBhcyBhcmd1bWVudHMuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIHByb2Nlc3MsIGJ1dCB0aGUga2V5IHF1ZXN0aW9uIHJpZ2h0IG5vdyBpczogV2hhdCB0aGUgKmhlY2sqIGlzIGBjYWNoZWRfZXh0ZW50c2A/IFRoaXMgaXMgdGhlIGNlbnRyYWwgcGllY2Ugb2YgZGF0YSBiZWluZyB3cml0dGVuLCBhbmQga25vd2luZyBpdHMgdHlwZSBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsaWNhdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYi10cmVlIHN0cnVjdHVyZS4gVGltZSB0byB1c2UgZ3JlcCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYGZzL2hmcy9gIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYWNoZWRfZXh0ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvZXh0ZW50LmM9MTEwPXN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEyMy1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzL2V4dGVudC5jOjEyNDpcdFx0aGZzX2JyZWNfaW5zZXJ0KGZkLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xuZnMvaGZzL2V4dGVudC5jLTEyNS1cdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVcpO1xuLS1cbmZzL2hmcy9leHRlbnQuYy0xMzAtXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9oZnMvZXh0ZW50LmM6MTMxOlx0XHRoZnNfYm5vZGVfd3JpdGUoZmQtXHUwMDNlYm5vZGUsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbmZzL2hmcy9leHRlbnQuYy0xMzItXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MTcxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4tLVxuZnMvaGZzL2V4dGVudC5jLTE4MC1cbmZzL2hmcy9leHRlbnQuYzoxODE6XHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoZmQsIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgaW5vZGUtXHUwMDNlaV9pbm8sXG5mcy9oZnMvZXh0ZW50LmMtMTgyLVx0XHRcdFx0ICAgIGJsb2NrLCBIRlNfSVNfUlNSQyhpbm9kZSkgPyBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMTg0LVx0XHRIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX3N0YXJ0ID0gYmUxNl90b19jcHUoZmQtXHUwMDNla2V5LVx1MDAzZWV4dC5GQUJOKTtcbmZzL2hmcy9leHRlbnQuYzoxODU6XHRcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfYmxvY2tzID0gaGZzX2V4dF9ibG9ja19jb3VudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xuZnMvaGZzL2V4dGVudC5jLTE4Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaGZzL2V4dGVudC5jPTMzOD1pbnQgaGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9oZnMvZXh0ZW50LmMtMzY5LVx0aWYgKCFyZXMpXG5mcy9oZnMvZXh0ZW50LmM6MzcwOlx0XHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuZnMvaGZzL2V4dGVudC5jLTM3MS1cdFx0XHRcdFx0ICAgIGFibG9jayAtIEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQpO1xuLS1cbmZzL2hmcy9leHRlbnQuYz0zOTM9aW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmcy9leHRlbnQuYy00MDUtXHRcdFx0Z290byBvdXQ7XG5mcy9oZnMvZXh0ZW50LmM6NDA2Olx0XHRnb2FsID0gaGZzX2V4dF9sYXN0YmxvY2soSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzKTtcbmZzL2hmcy9leHRlbnQuYy00MDctXHR9XG4tLVxuZnMvaGZzL2V4dGVudC5jLTQzNi1cdH0gZWxzZSB7XG5mcy9oZnMvZXh0ZW50LmM6NDM3Olx0XHRyZXMgPSBoZnNfYWRkX2V4dGVudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsXG5mcy9oZnMvZXh0ZW50LmMtNDM4LVx0XHRcdFx0ICAgICBIRlNfSShpbm9kZSktXHUwMDNlYWxsb2NfYmxvY2tzIC1cbi0tXG5mcy9oZnMvZXh0ZW50LmMtNDQxLVx0XHRpZiAoIXJlcykge1xuZnMvaGZzL2V4dGVudC5jOjQ0MjpcdFx0XHRoZnNfZHVtcF9leHRlbnQoSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzKTtcbmZzL2hmcy9leHRlbnQuYy00NDMtXHRcdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEhGU19GTEdfRVhUX0RJUlRZO1xuLS1cbmZzL2hmcy9leHRlbnQuYy00NjUtXG5mcy9oZnMvZXh0ZW50LmM6NDY2Olx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG5mcy9oZnMvZXh0ZW50LmM6NDY3Olx0SEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzWzBdLmJsb2NrID0gY3B1X3RvX2JlMTYoc3RhcnQpO1xuZnMvaGZzL2V4dGVudC5jOjQ2ODpcdEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c1swXS5jb3VudCA9IGNwdV90b19iZTE2KGxlbik7XG5mcy9oZnMvZXh0ZW50LmM6NDY5Olx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cyk7XG5mcy9oZnMvZXh0ZW50LmMtNDcwLVx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEhGU19GTEdfRVhUX0RJUlRZfEhGU19GTEdfRVhUX05FVztcbi0tXG5mcy9oZnMvZXh0ZW50LmM9NDc4PXZvaWQgaGZzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnMvZXh0ZW50LmMtNTMxLVx0XHRzdGFydCA9IEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfc3RhcnQ7XG5mcy9oZnMvZXh0ZW50LmM6NTMyOlx0XHRoZnNfZnJlZV9leHRlbnRzKHNiLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsXG5mcy9oZnMvZXh0ZW50LmMtNTMzLVx0XHRcdFx0IGFsbG9jX2NudCAtIHN0YXJ0LCBhbGxvY19jbnQgLSBibGtfY250KTtcbmZzL2hmcy9leHRlbnQuYzo1MzQ6XHRcdGhmc19kdW1wX2V4dGVudChIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xuZnMvaGZzL2V4dGVudC5jLTUzNS1cdFx0aWYgKGJsa19jbnQgXHUwMDNlIHN0YXJ0KSB7XG4tLVxuZnMvaGZzL2hmc19mcy5oPTYxPXN0cnVjdCBoZnNfaW5vZGVfaW5mbyB7XG4tLVxuZnMvaGZzL2hmc19mcy5oLTgxLVx0dTE2IGZpcnN0X2Jsb2NrcztcbmZzL2hmcy9oZnNfZnMuaDo4MjpcdGhmc19leHRlbnRfcmVjIGNhY2hlZF9leHRlbnRzO1xuZnMvaGZzL2hmc19mcy5oLTgzLVx0dTE2IGNhY2hlZF9zdGFydCwgY2FjaGVkX2Jsb2Nrcztcbi0tXG5mcy9oZnMvaW5vZGUuYz0xODI9c3RydWN0IGlub2RlICpoZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTIyOS1cdFx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VmaXJzdF9leHRlbnRzLCAwLCBzaXplb2YoaGZzX2V4dGVudF9yZWMpKTtcbmZzL2hmcy9pbm9kZS5jOjIzMDpcdFx0bWVtc2V0KEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XG5mcy9oZnMvaW5vZGUuYy0yMzEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSEZTIEV4dGVudCBSZWNvcmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgZXh0ZW50IHJlY29yZHMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc19leHRlbnRfcmVjYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgZml4ZWQtc2l6ZSBzdHJ1Y3QsIGFuIGFycmF5IG9mIGV4dGVudCBkZXNjcmlwdG9ycy4gVGhlIHByb2JsZW1hdGljIGNvZGUgaXMgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnRgLCB3aGVyZSBgaGZzX2Jub2RlX3dyaXRlYCBpcyBjYWxsZWQuIFRoZSBjb3JlIGlzc3VlIGJvaWxzIGRvd24gdG8gYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXItcmVhZC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhg4oCUdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIHRvIGRpc2vigJR3YXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCwgYGhmc19ibm9kZV93cml0ZWAgd291bGQgYXR0ZW1wdCB0byByZWFkIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGJ5dGVzIGZyb20gYEhGU19JKGlub2RlKS0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiBTaW5jZSBgY2FjaGVkX2V4dGVudHNgICppcyogb2YgYGhmc19leHRlbnRfcmVjYCBzaXplLCB0aGlzIG1lYW50IHdlIHdlcmUgZWZmZWN0aXZlbHkgcmVhZGluZyBvdXQgb2YgYm91bmRzLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQsIGFuIGV4dHJlbWVseSBjb21tb24gdnVsbmVyYWJpbGl0eS4gS0FTQU4sIGluIGZhY3QsIHNob3VsZCBkZXRlY3QgdGhpcyEKClRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzYW5pdHkgY2hlY2s6CgpgYGBjCmlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSkKICAgIHJldHVybiAtRUlPOwpgYGAKClRoaXMgcHJldmVudHMgdGhlIE9PQiByZWFkIGJ5IGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciAoLUVJTykgaWYgdGhlIGxlbmd0aHMgZG9uJiMzOTt0IG1hdGNoLiBJdOKAmXMgYSBjbGVhbiBhbmQgZGlyZWN0IGZpeC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBjb25maXJtOgoKKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIE5vcGUsIHRoZSByZXR1cm4gaGFwcGVucyBlYXJseS4KKiAgIE5vIGNvbnRyb2wgZmxvdyBjaGFuZ2VzIHRoYXQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTm8sIHRoZSByZXR1cm4gaGFwcGVucyBlYXJseS4KKiAgIE5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhIGRpc2sgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBibm9kZSBvciBidWZmZXIgY2FjaGUuCiogICBUaGlzIGlzIGRlZmluaXRlbHkgYW4gT09CIHJlYWQgZml4LCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGBmZC0mZ3Q7ZW50cnlsZW5ndGggJmd0OyBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4KCktBU0FOIHdpbGwgY2F0Y2ggdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhbiBPT0IgcmVhZCwgYW5kIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBzb3J0IG9mIG1lbW9yeSBjb3JydXB0aW9uLiBEaXNrIGNvcnJ1cHRpb24gY291bGQgaGFwcGVuIGlmIGBlbnRyeWxlbmd0aGAgaGFzIGJhZCBkYXRhLgoKSSYjMzk7bGwgYWxzbyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgY2hlY2sgdGhlIGBoZnNfYm5vZGVfd3JpdGVgIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibm9kZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYXR0ci5jPTIyPXN0YXRpYyBpbnQgX19oZnNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLFxuLS1cbmZzL2hmcy9hdHRyLmMtNjAtXHRpZiAoIXJlcylcbmZzL2hmcy9hdHRyLmM6NjE6XHRcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcbmZzL2hmcy9hdHRyLmMtNjItXHRcdFx0XHRzaXplb2Yoc3RydWN0IGhmc19jYXRfZmlsZSkpO1xuLS1cbmZzL2hmcy9ibm9kZS5jPTExND12b2lkIGhmc19ibm9kZV9yZWFkX2tleShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB2b2lkICprZXksIGludCBvZmYpXG4tLVxuZnMvaGZzL2Jub2RlLmMtMTM0LVxuZnMvaGZzL2Jub2RlLmM6MTM1OnZvaWQgaGZzX2Jub2RlX3dyaXRlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmJ1ZiwgaW50IG9mZiwgaW50IGxlbilcbmZzL2hmcy9ibm9kZS5jLTEzNi17XG4tLVxuZnMvaGZzL2Jub2RlLmMtMTU5LVxuZnMvaGZzL2Jub2RlLmM6MTYwOnZvaWQgaGZzX2Jub2RlX3dyaXRlX3UxNihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1MTYgZGF0YSlcbmZzL2hmcy9ibm9kZS5jLTE2MS17XG4tLVxuZnMvaGZzL2Jub2RlLmMtMTYzLVx0Ly8gb3B0aW1pemUgbGF0ZXIuLi5cbmZzL2hmcy9ibm9kZS5jOjE2NDpcdGhmc19ibm9kZV93cml0ZShub2RlLCBcdTAwMjZ2LCBvZmYsIDIpO1xuZnMvaGZzL2Jub2RlLmMtMTY1LX1cbmZzL2hmcy9ibm9kZS5jLTE2Ni1cbmZzL2hmcy9ibm9kZS5jOjE2Nzp2b2lkIGhmc19ibm9kZV93cml0ZV91OChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1OCBkYXRhKVxuZnMvaGZzL2Jub2RlLmMtMTY4LXtcbmZzL2hmcy9ibm9kZS5jLTE2OS1cdC8vIG9wdGltaXplIGxhdGVyLi4uXG5mcy9oZnMvYm5vZGUuYzoxNzA6XHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXHUwMDI2ZGF0YSwgb2ZmLCAxKTtcbmZzL2hmcy9ibm9kZS5jLTE3MS19XG4tLVxuZnMvaGZzL2Jub2RlLmM9Mjc3PXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmcy9ibm9kZS5jLTI4OS1cdFx0Y25pZCA9IGNwdV90b19iZTMyKHRtcC1cdTAwM2VuZXh0KTtcbmZzL2hmcy9ibm9kZS5jOjI5MDpcdFx0aGZzX2Jub2RlX3dyaXRlKHRtcCwgXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XG5mcy9oZnMvYm5vZGUuYy0yOTEtXHRcdGhmc19ibm9kZV9wdXQodG1wKTtcbi0tXG5mcy9oZnMvYm5vZGUuYy0zMDAtXHRcdGNuaWQgPSBjcHVfdG9fYmUzMih0bXAtXHUwMDNlcHJldik7XG5mcy9oZnMvYm5vZGUuYzozMDE6XHRcdGhmc19ibm9kZV93cml0ZSh0bXAsIFx1MDAyNmNuaWQsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgcHJldiksIDQpO1xuZnMvaGZzL2Jub2RlLmMtMzAyLVx0XHRoZnNfYm5vZGVfcHV0KHRtcCk7XG4tLVxuZnMvaGZzL2JyZWMuYz02NT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIGludCBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzL2JyZWMuYy0xMTItXHQvKiB3cml0ZSBuZXcgbGFzdCBvZmZzZXQgKi9cbmZzL2hmcy9icmVjLmM6MTEzOlx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG51bV9yZWNzKSwgbm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jOjExNDpcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZW5kX3JlY19vZmYsIGVuZF9vZmYgJiM0Mzsgc2l6ZSk7XG5mcy9oZnMvYnJlYy5jLTExNS1cdGRhdGFfb2ZmID0gZW5kX29mZjtcbi0tXG5mcy9oZnMvYnJlYy5jLTEyMi1cdFx0ZGF0YV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgZGF0YV9yZWNfb2ZmICYjNDM7IDIpO1xuZnMvaGZzL2JyZWMuYzoxMjM6XHRcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZGF0YV9yZWNfb2ZmLCBkYXRhX29mZiAmIzQzOyBzaXplKTtcbmZzL2hmcy9icmVjLmMtMTI0LVx0XHRkYXRhX3JlY19vZmYgJiM0Mzs9IDI7XG4tLVxuZnMvaGZzL2JyZWMuYy0xMzEtc2tpcDpcbmZzL2hmcy9icmVjLmM6MTMyOlx0aGZzX2Jub2RlX3dyaXRlKG5vZGUsIGZkLVx1MDAzZXNlYXJjaF9rZXksIGRhdGFfb2ZmLCBrZXlfbGVuKTtcbmZzL2hmcy9icmVjLmM6MTMzOlx0aGZzX2Jub2RlX3dyaXRlKG5vZGUsIGVudHJ5LCBkYXRhX29mZiAmIzQzOyBrZXlfbGVuLCBlbnRyeV9sZW4pO1xuZnMvaGZzL2JyZWMuYy0xMzQtXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbi0tXG5mcy9oZnMvYnJlYy5jPTE3Nz1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTIwOC1cdH1cbmZzL2hmcy9icmVjLmM6MjA5Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG51bV9yZWNzKSwgbm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jLTIxMC1cbi0tXG5mcy9oZnMvYnJlYy5jLTIxNi1cdFx0ZGF0YV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG5mcy9oZnMvYnJlYy5jOjIxNzpcdFx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCByZWNfb2ZmICYjNDM7IDIsIGRhdGFfb2ZmIC0gc2l6ZSk7XG5mcy9oZnMvYnJlYy5jLTIxOC1cdFx0cmVjX29mZiAtPSAyO1xuLS1cbmZzL2hmcy9icmVjLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfc3BsaXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmcy9icmVjLmMtMzA1LVx0d2hpbGUgKG51bV9yZWNzKSB7XG5mcy9oZnMvYnJlYy5jOjMwNjpcdFx0aGZzX2Jub2RlX3dyaXRlX3UxNihuZXdfbm9kZSwgbmV3X3JlY19vZmYsIG5ld19vZmYpO1xuZnMvaGZzL2JyZWMuYy0zMDctXHRcdG9sZF9yZWNfb2ZmIC09IDI7XG4tLVxuZnMvaGZzL2JyZWMuYy0zMTItXHR9XG5mcy9oZnMvYnJlYy5jOjMxMzpcdGhmc19ibm9kZV93cml0ZV91MTYobmV3X25vZGUsIG5ld19yZWNfb2ZmLCBuZXdfb2ZmKTtcbmZzL2hmcy9icmVjLmMtMzE0LVx0aGZzX2Jub2RlX2NvcHkobmV3X25vZGUsIDE0LCBub2RlLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCAtIGRhdGFfc3RhcnQpO1xuLS1cbmZzL2hmcy9icmVjLmMtMzIyLVx0bm9kZV9kZXNjLnJlc2VydmVkID0gMDtcbmZzL2hmcy9icmVjLmM6MzIzOlx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzI0LVxuLS1cbmZzL2hmcy9icmVjLmMtMzI5LVx0bm9kZV9kZXNjLm51bV9yZWNzID0gY3B1X3RvX2JlMTYobm9kZS1cdTAwM2VudW1fcmVjcyk7XG5mcy9oZnMvYnJlYy5jOjMzMDpcdGhmc19ibm9kZV93cml0ZShub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzMxLVxuLS1cbmZzL2hmcy9icmVjLmMtMzM2LVx0XHRub2RlX2Rlc2MucHJldiA9IGNwdV90b19iZTMyKG5leHRfbm9kZS1cdTAwM2VwcmV2KTtcbmZzL2hmcy9icmVjLmM6MzM3Olx0XHRoZnNfYm5vZGVfd3JpdGUobmV4dF9ub2RlLCBcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcbmZzL2hmcy9icmVjLmMtMzM4LVx0XHRoZnNfYm5vZGVfcHV0KG5leHRfbm9kZSk7XG4tLVxuZnMvaGZzL2JyZWMuYz0zNTI9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTQwNS1cdGVuZF9vZmYgPSBzdGFydF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYocGFyZW50LCByZWNfb2ZmKTtcbmZzL2hmcy9icmVjLmM6NDA2Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihwYXJlbnQsIHJlY19vZmYsIHN0YXJ0X29mZiAmIzQzOyBkaWZmKTtcbmZzL2hmcy9icmVjLmMtNDA3LVx0c3RhcnRfb2ZmIC09IDQ7XHQvKiBtb3ZlIHByZXZpb3VzIGNuaWQgdG9vICovXG4tLVxuZnMvaGZzL2JyZWMuYy00MTEtXHRcdGVuZF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYocGFyZW50LCByZWNfb2ZmKTtcbmZzL2hmcy9icmVjLmM6NDEyOlx0XHRoZnNfYm5vZGVfd3JpdGVfdTE2KHBhcmVudCwgcmVjX29mZiwgZW5kX29mZiAmIzQzOyBkaWZmKTtcbmZzL2hmcy9icmVjLmMtNDEzLVx0fVxuLS1cbmZzL2hmcy9icmVjLmMtNDE4LVx0aWYgKCEodHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSlcbmZzL2hmcy9icmVjLmM6NDE5Olx0XHRoZnNfYm5vZGVfd3JpdGVfdTgocGFyZW50LCBmZC1cdTAwM2VrZXlvZmZzZXQsIG5ld2tleWxlbiAtIDEpO1xuZnMvaGZzL2JyZWMuYy00MjAtXHRoZnNfYm5vZGVfZHVtcChwYXJlbnQpO1xuLS1cbmZzL2hmcy9icmVjLmM9NDU4PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbi0tXG5mcy9oZnMvYnJlYy5jLTQ5Ni1cdG5vZGVfZGVzYy5yZXNlcnZlZCA9IDA7XG5mcy9oZnMvYnJlYy5jOjQ5NzpcdGhmc19ibm9kZV93cml0ZShuZXdfbm9kZSwgXHUwMDI2bm9kZV9kZXNjLCAwLCBzaXplb2Yobm9kZV9kZXNjKSk7XG5mcy9oZnMvYnJlYy5jLTQ5OC1cbmZzL2hmcy9icmVjLmMtNDk5LVx0cmVjID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuZnMvaGZzL2JyZWMuYzo1MDA6XHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCByZWMsIDE0KTtcbmZzL2hmcy9icmVjLmMtNTAxLVxuLS1cbmZzL2hmcy9icmVjLmMtNTEzLVx0XHRcdGtleV9zaXplID0gdHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAxO1xuZnMvaGZzL2JyZWMuYzo1MTQ6XHRcdFx0aGZzX2Jub2RlX3dyaXRlX3U4KG5ld19ub2RlLCAxNCwgdHJlZS1cdTAwM2VtYXhfa2V5X2xlbik7XG5mcy9oZnMvYnJlYy5jLTUxNS1cdFx0fVxuLS1cbmZzL2hmcy9icmVjLmMtNTE3LVx0XHRjbmlkID0gY3B1X3RvX2JlMzIobm9kZS1cdTAwM2V0aGlzKTtcbmZzL2hmcy9icmVjLmM6NTE4Olx0XHRoZnNfYm5vZGVfd3JpdGUobmV3X25vZGUsIFx1MDAyNmNuaWQsIDE0ICYjNDM7IGtleV9zaXplLCA0KTtcbmZzL2hmcy9icmVjLmMtNTE5LVxuZnMvaGZzL2JyZWMuYy01MjAtXHRcdHJlYyAtPSAyO1xuZnMvaGZzL2JyZWMuYzo1MjE6XHRcdGhmc19ibm9kZV93cml0ZV91MTYobmV3X25vZGUsIHJlYywgMTQgJiM0Mzsga2V5X3NpemUgJiM0MzsgNCk7XG5mcy9oZnMvYnJlYy5jLTUyMi1cbi0tXG5mcy9oZnMvYnRyZWUuYz0yMjY9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX25ld19ibWFwKHN0cnVjdCBoZnNfYm5vZGUgKnByZXYsIHUzMiBpZHgpXG4tLVxuZnMvaGZzL2J0cmVlLmMtMjQxLVx0Y25pZCA9IGNwdV90b19iZTMyKGlkeCk7XG5mcy9oZnMvYnRyZWUuYzoyNDI6XHRoZnNfYm5vZGVfd3JpdGUocHJldiwgXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XG5mcy9oZnMvYnRyZWUuYy0yNDMtXG4tLVxuZnMvaGZzL2J0cmVlLmMtMjUyLVx0ZGVzYy5yZXNlcnZlZCA9IDA7XG5mcy9oZnMvYnRyZWUuYzoyNTM6XHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXHUwMDI2ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTtcbmZzL2hmcy9idHJlZS5jOjI1NDpcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgMTQsIDB4ODAwMCk7XG5mcy9oZnMvYnRyZWUuYzoyNTU6XHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMiwgMTQpO1xuZnMvaGZzL2J0cmVlLmM6MjU2Olx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDQsIHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gNik7XG5mcy9oZnMvYnRyZWUuYy0yNTctXG4tLVxuZnMvaGZzL2J0cmVlLmg9MTAwPWV4dGVybiB2b2lkIGhmc19ibm9kZV9yZWFkX2tleShzdHJ1Y3QgaGZzX2Jub2RlICosIHZvaWQgKiwgaW50KTtcbmZzL2hmcy9idHJlZS5oOjEwMTpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGUoc3RydWN0IGhmc19ibm9kZSAqLCB2b2lkICosIGludCwgaW50KTtcbmZzL2hmcy9idHJlZS5oOjEwMjpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTE2KHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCB1MTYpO1xuZnMvaGZzL2J0cmVlLmg6MTAzOmV4dGVybiB2b2lkIGhmc19ibm9kZV93cml0ZV91OChzdHJ1Y3QgaGZzX2Jub2RlICosIGludCwgdTgpO1xuZnMvaGZzL2J0cmVlLmgtMTA0LWV4dGVybiB2b2lkIGhmc19ibm9kZV9jbGVhcihzdHJ1Y3QgaGZzX2Jub2RlICosIGludCwgaW50KTtcbi0tXG5mcy9oZnMvZXh0ZW50LmM9MTEwPXN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzL2V4dGVudC5jLTEzMC1cdFx0XHRyZXR1cm4gLUVJTztcbmZzL2hmcy9leHRlbnQuYzoxMzE6XHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuZnMvaGZzL2V4dGVudC5jLTEzMi1cdFx0SEZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xuLS1cbmZzL2hmcy9pbm9kZS5jPTQyMT1pbnQgaGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmcy9pbm9kZS5jLTQ3Ny1cbmZzL2hmcy9pbm9kZS5jOjQ3ODpcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcdTAwMjZyZWMsIGZkLmVudHJ5b2Zmc2V0LFxuZnMvaGZzL2lub2RlLmMtNDc5LVx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGhmc19jYXRfZGlyKSk7XG4tLVxuZnMvaGZzL2lub2RlLmMtNDg2LVx0XHRcdFx0ICAgICBcdTAwMjZyZWMuZmlsZS5STGdMZW4sIFx1MDAyNnJlYy5maWxlLlJQeUxlbik7XG5mcy9oZnMvaW5vZGUuYzo0ODc6XHRcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcbmZzL2hmcy9pbm9kZS5jLTQ4OC1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XG4tLVxuZnMvaGZzL2lub2RlLmMtNTA0LVxuZnMvaGZzL2lub2RlLmM6NTA1Olx0XHRoZnNfYm5vZGVfd3JpdGUoZmQuYm5vZGUsIFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXG5mcy9oZnMvaW5vZGUuYy01MDYtXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTYKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzZXQtcmVzdWx0c2AgQ2FsbCoqCgpPa2F5LCB0aW1lIHRvIG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIEtNU0FOIGlzbiYjMzk7dCBnb2luZyB0byBiZSBuZWVkZWQgZm9yIHRoaXMgb25lLiBMZXQgbWUgZXhwbGFpbiBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudCgpYC4gU3BlY2lmaWNhbGx5LCBpdCBtYWtlcyBzdXJlIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIOKAkyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRyeSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIOKAkyBpcyAqZXhhY3RseSogdGhlIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCBiZWZvcmUgaXQgY2FsbHMgYGhmc19ibm9kZV93cml0ZSgpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBwcmV2ZW50cyBhIHZlcnkgc3BlY2lmaWMga2luZCBvZiB2dWxuZXJhYmlsaXR5OiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSBgSEZTX0koaW5vZGUpLSZndDtjYWNoZWRfZXh0ZW50c2AuIFRoaXMgcmVhZCB3b3VsZCBvY2N1ciBpZiB3ZSBzdHVtYmxlIHVwb24gY29ycnVwdGVkIG9uLWRpc2sgbWV0YWRhdGEgd2hlcmUgdGhlIHJlY29yZCBsZW5ndGggaXMgdW5leHBlY3RlZC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWN0cyBhcyBhIGdhdGVrZWVwZXIsIHByZXZlbnRpbmcgdXMgZnJvbSByZWFkaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZSwgdGh1cyBzYWZlZ3VhcmRpbmcgdGhlIGJub2RlIGVudHJ5IGZyb20gY29ycnVwdGlvbi4gTm93LCB0aGUgcmVhc29uIEtNU0FOIGlzbiYjMzk7dCBhIGNvbmNlcm4gaGVyZSBpcyBiZWNhdXNlIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZG9lc24mIzM5O3QgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGNydWNpYWxseSwgZG9lc24mIzM5O3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyB0aGUgcmVhbCB3aW4uIFNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGFuIGV4aXN0aW5nIHJlYWQgdnVsbmVyYWJpbGl0eSDigJMgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVtYWluaW5nIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hlY2ssIGFuZCB0aGUgZGVlcGVyIGFuYWx5c2lzIGFzc29jaWF0ZWQgd2l0aCBLTVNBTiBpcyBzaW1wbHkgbm90IG5lZWRlZC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaW50byBhIGJub2RlLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgY2FjaGVkX2V4dGVudHNgIGJ1ZmZlciB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIHdoZXJlIGBlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNfZXh0ZW50X3JlYylgLiBTdWNoIGJ1ZmZlciBvdmVyLXJlYWRzIGFyZSBtZW1vcnkgYm91bmRhcnkgaXNzdWVzIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHVzZXItc3BhY2UgY29waWVzLCBvciBhZmZlY3QgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYW5kbGluZywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAwLjc4ODEyNzUwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc3OTQ0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAwLjc4ODEzMjg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMDA5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUxZDAyYzZiNGY2NDIzYjdmNzY1NjJlZDAyY2I0MmYwMjEyOGU5YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9leHRlbnQuYyBiL2ZzL2hmcy9leHRlbnQuY1xcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzL2V4dGVudC5jXFxuKysrIGIvZnMvaGZzL2V4dGVudC5jXFxuQEAgLTEyNiw2ICsxMjYsOCBAQCBzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmVzKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRpZiAoZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHRoZnNfYm5vZGVfd3JpdGUoZmQtXFx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuIFxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAxLjMzOTgxNjE4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjExNjM0NjU0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfZXh0X3dyaXRlX2V4dGVudFwiLFxuICAgIFwiaGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRlbmRfZmlsZVwiLFxuICAgIFwiaGZzX2ZpbGVfdHJ1bmNhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIF9faGZzX2V4dF93cml0ZV9leHRlbnQoKSB3aXRoaW4gZnMvaGZzL2V4dGVudC5jIHRvIGVuc3VyZSB0aGUgYnRyZWUgZW50cnkgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVudCByZWNvcmQgc2l6ZSBiZWZvcmUgd3JpdGluZyB0byB0aGUgbm9kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgSEZTIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBzdWNoIGFzIGV4dGVuZGluZyBmaWxlcywgdHJ1bmNhdGluZyBmaWxlcywgb3Igc3luY2luZyBkaXJ0eSBpbm9kZXMgb24gbW91bnRlZCBIRlMgaW1hZ2VzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgdmFsaWRhdGlvbiBvbiBtYWxmb3JtZWQgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUxZDAyYzZiNGY2NDIzYjdmNzY1NjJlZDAyY2I0MmYwMjEyOGU5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NDY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvZXh0ZW50LmMgYi9mcy9oZnMvZXh0ZW50LmNcbmluZGV4IDU4MGM2Mjk4MWRiZDMuLmI1ODg0MTBmMDFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvZXh0ZW50LmNcbisrKyBiL2ZzL2hmcy9leHRlbnQuY1xuQEAgLTEyNiw2ICsxMjYsOCBAQCBzdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdEhGU19JKGlub2RlKS1cdTAwM2VmbGFncyBcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjAxLjMzOTgxNzQzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNjY2MTk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBIRlMrIEV4dGVudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRvb2xzLiBUaGlzIHJlcXVpcmVzIGEgZm9jdXNlZCBhcHByb2FjaCwgc28gSSdtIHRoaW5raW5nOiBsZXQncyBzdGFydCB3aXRoIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGZzL2hmcy9leHRlbnQuY2AgZmlsZS4gR2l2ZW4gdGhlIGRvbWFpbiwgSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBtb2RpZmljYXRpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LlxuXG5UaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyBhIGRpcmVjdCBpbnNwZWN0aW9uIG9mIHRoZSBjaGFuZ2VzLCBzbyBJJ2xsIGJlZ2luIGJ5IGFuYWx5emluZyB0aGUgZ2l0IGRpZmYuIEknbGwgbmVlZCB0byB1c2UgbXkgZmF2b3JpdGUgdG9vbHMgZm9yIGRlZXBlciBhbmFseXNpcyBoZXJlLCBzbyBJJ20gdGhpbmtpbmcgZWl0aGVyIGEgcmVsaWFibGUgYHJlYWQtZmlsZWAgdG8gdmlldyB0aGUgY29kZSwgb3IgcGVyaGFwcyBhIG1vcmUgZm9jdXNlZCBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIGNhbGxzIHRvIHRoZSBhZmZlY3RlZCBjb2RlLlxuXG5OZXh0IHVwLCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSB2aXRhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHRvIGFjY29tcGxpc2ggdGhhdCBJIHdpbGwgcmV2aWV3IHRoZSBmaWxlIChgZnMvaGZzL2V4dGVudC5jYCkgYW5kIGFsbCBpdHMgcmVsYXRlZCBjYWxsZXJzIGFuZCBLY29uZmlnIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAwLCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzowOS43MDY0NDE1NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvZXh0ZW50LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRpbnQgcmVzO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXFx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgSEZTX0lTX1JTUkMoaW5vZGUpID8gIEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xcbiAxMTY6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuIDExNzpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xcbiAxMTg6XFx0XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTIwOlxcdFxcdFxcdC8qIEZhaWwgZWFybHkgYW5kIGF2b2lkIEVOT1NQQyBkdXJpbmcgdGhlIGJ0cmVlIG9wZXJhdGlvbiAqL1xcbiAxMjE6XFx0XFx0XFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cXHUwMDNldHJlZSwgZmQtXFx1MDAzZXRyZWUtXFx1MDAzZWRlcHRoICsgMSk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI0OlxcdFxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuIDEyNTpcXHRcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4gMTI2OlxcdFxcdH0gZWxzZSB7XFxuIDEyNzpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI5OlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcXG4gMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMzE6XFx0XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiAxMzI6XFx0XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4gMTQwOlxcdFxcdGludCByZXMgPSAwO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuIDE0MzpcXHRcXHRcXHRyZXMgPSBoZnNfZmluZF9pbml0KEhGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZWV4dF90cmVlLCBcXHUwMDI2ZmQpO1xcbiAxNDQ6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTQ1OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDE0NjpcXHRcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbiAxNDc6XFx0XFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFx0cmV0dXJuIHJlcztcXG4gMTUwOlxcdH1cXG4gMTUxOlxcdFxcbiAxNTI6XFx0c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGhmc19leHRlbnQgKmV4dGVudCxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdFxcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXFxuIDE1NDpcXHR7XFxuIDE1NTpcXHRcXHRpbnQgcmVzO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgY25pZCwgYmxvY2ssIHR5cGUpO1xcbiAxNTg6XFx0XFx0ZmQtXFx1MDAzZWtleS1cXHUwMDNlZXh0LkZOdW0gPSAwO1xcbiAxNTk6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjA5LjcwNjUzMDI1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIwNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvZXh0ZW50LmM9OTk9c3RhdGljIHUxNiBoZnNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0KVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEwOS1cXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzL2V4dGVudC5jLTExMS17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MTM3PWludCBoZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE0NS1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbmZzL2hmcy9leHRlbnQuYzoxNDY6XFx0XFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXFx1MDAyNmZkKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTQ3LVxcdFxcdGhmc19maW5kX2V4aXQoXFx1MDAyNmZkKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0xNzE9c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNzUtXFx0aWYgKEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBIRlNfRkxHX0VYVF9ESVJUWSkge1xcbmZzL2hmcy9leHRlbnQuYzoxNzY6XFx0XFx0cmVzID0gX19oZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xcbmZzL2hmcy9leHRlbnQuYy0xNzctXFx0XFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MDkuNzUzNzM3NTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzEwNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnMvS2NvbmZpZzoyOmNvbmZpZyBIRlNfRlNcXG5mcy9oZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBNYWNpbnRvc2ggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2hmcy9NYWtlZmlsZS01LVxcbmZzL2hmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IRlNfRlMpICs9IGhmcy5vXFxuZnMvaGZzL01ha2VmaWxlLTctXFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtOC1cXG5mcy9oZnMvaGZzX2ZzLmg6OTojaWZuZGVmIF9MSU5VWF9IRlNfRlNfSFxcbmZzL2hmcy9oZnNfZnMuaDoxMDojZGVmaW5lIF9MSU5VWF9IRlNfRlNfSFxcbmZzL2hmcy9oZnNfZnMuaC0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MDkuODAxNDU1MTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczOTMyMjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBIRlMrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IEhGUysgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGZzL2hmcy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHByb2JhYmx5IGV2ZW4gc29tZSB1c2VmdWwgY29tbWVudGFyeSBvbiB0aGVpciBlZmZlY3RzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZXNzZW50aWFsbHkgYmUgbXkgYmlibGUgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEhGUysgaXMgaW1wbGVtZW50ZWQgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxMS41NDA3ODEyNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBNYWNpbnRvc2gtZm9ybWF0dGVkXFxuICAxMDpcXHRcXHQgIGZsb3BweSBkaXNrcyBhbmQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDExOlxcdFxcdCAgUGxlYXNlIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XFx1MDAzZSB0byBsZWFybiBhYm91dFxcbiAgMTI6XFx0XFx0ICB0aGUgYXZhaWxhYmxlIG1vdW50IG9wdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxMS41NDA4NDI0NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDY4MDg1OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgc25pcHBldCBpcyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpIHJldHVybiAtRUlPO2AuIEVzc2VudGlhbGx5LCBpdCdzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB3cml0aW5nIGNvcnJ1cHRlZCBvciBvdXQtb2YtYm91bmRzIGV4dGVudCByZWNvcmRzLiBUaGlzIGxvb2tzIGxpa2UgYSBzYW5pdHkgY2hlY2suXG5cbklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXMsIGRlZmluaXRlbHkuIFRoZSBIRlMgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB2aWEgYSBsb29wIGRldmljZS4gU3l6a2FsbGVyLCB3aGljaCBpcyBvZnRlbiB1c2VkIGZvciBmaWxlc3lzdGVtIGZ1enppbmcsIG1vdW50cyBjb3JydXB0ZWQgSEZTIGltYWdlcyByZWd1bGFybHkuIFRoaXMgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgbmV3IGNoZWNrIHdpbGwgZ2V0IHRyaWdnZXJlZC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvZGUgbW9kaWZpZXMgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvaGZzL2V4dGVudC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wIG1vdW50cy4gSXQgYWxzbyB0b3VjaGVzIG9uIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBiYXNlZCBvbiB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgYWxpZ25zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBhbmQgcnVudGltZSBhc3NlcnRpb25zLiBGaWxlIHN5c3RlbXMgYXJlIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBhbnl3YXksIGdpdmVuIHRoZSBjb21wbGV4IGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIGZvY3VzIHN5bWJvbHM6IGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBpcyBzdGF0aWMsIGJ1dCBpcyBjYWxsZWQgYnkgYGhmc19leHRfd3JpdGVfZXh0ZW50YCBhbmQgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgLiBMZXQgbWUgc2VhcmNoIGZvciBub24tc3RhdGljIG9yIGV4cG9ydGVkIHN5bWJvbHMsIHN1Y2ggYXMgYGhmc19leHRfd3JpdGVfZXh0ZW50YCBhbmQgYF9faGZzX2V4dF9jYWNoZV9leHRlbnRgLCBvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgZnMvaGZzL2V4dGVudC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlYWNoYWJsZSBlbnRyeSBwb2ludHMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoxNy4wMDg5MzA2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MjcxNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2V4dF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9idHJlZS5jPTE5PXN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG4tLVxcbmZzL2hmcy9idHJlZS5jLTg3LVxcbmZzL2hmcy9idHJlZS5jOjg4OlxcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSSh0cmVlLVxcdTAwM2Vpbm9kZSktXFx1MDAzZWZpcnN0X2V4dGVudHMsIDApO1xcbmZzL2hmcy9idHJlZS5jLTg5LVxcdHN0YXJ0X2Jsb2NrID0gSEZTX1NCKHNiKS1cXHUwMDNlZnNfc3RhcnQgKyAoZGJsb2NrICogSEZTX1NCKHNiKS1cXHUwMDNlZnNfZGl2KTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0yMC0gKi9cXG5mcy9oZnMvZXh0ZW50LmM6MjE6c3RhdGljIHZvaWQgaGZzX2V4dF9idWlsZF9rZXkoaGZzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwgdTE2IGJsb2NrLCB1OCB0eXBlKVxcbmZzL2hmcy9leHRlbnQuYy0yMi17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMjktLypcXG5mcy9oZnMvZXh0ZW50LmM6MzA6ICogaGZzX2V4dF9jb21wYXJlKClcXG5mcy9oZnMvZXh0ZW50LmMtMzEtICpcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0zOS0gKiBJbnB1dCBWYXJpYWJsZShzKTpcXG5mcy9oZnMvZXh0ZW50LmM6NDA6ICogICBzdHJ1Y3QgaGZzX2V4dF9rZXkgKmtleTE6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGtleSB0byBjb21wYXJlXFxuZnMvaGZzL2V4dGVudC5jOjQxOiAqICAgc3RydWN0IGhmc19leHRfa2V5ICprZXkyOiBwb2ludGVyIHRvIHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmVcXG5mcy9oZnMvZXh0ZW50LmMtNDItICogT3V0cHV0IFZhcmlhYmxlKHMpOlxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTQ2LSAqIFByZWNvbmRpdGlvbnM6XFxuZnMvaGZzL2V4dGVudC5jOjQ3OiAqICAga2V5MSBhbmQga2V5MiBwb2ludCB0byBcXFwidmFsaWRcXFwiIChzdHJ1Y3QgaGZzX2V4dF9rZXkpcy5cXG5mcy9oZnMvZXh0ZW50LmMtNDgtICogUG9zdGNvbmRpdGlvbnM6XFxuZnMvaGZzL2V4dGVudC5jLTQ5LSAqICAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gc2lkZS1lZmZlY3RzICovXFxuZnMvaGZzL2V4dGVudC5jOjUwOmludCBoZnNfZXh0X2tleWNtcChjb25zdCBidHJlZV9rZXkgKmtleTEsIGNvbnN0IGJ0cmVlX2tleSAqa2V5MilcXG5mcy9oZnMvZXh0ZW50LmMtNTEte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTY5LS8qXFxuZnMvaGZzL2V4dGVudC5jOjcwOiAqIGhmc19leHRfZmluZF9ibG9ja1xcbmZzL2hmcy9leHRlbnQuYy03MS0gKlxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTczLSAqL1xcbmZzL2hmcy9leHRlbnQuYzo3NDp1MTYgaGZzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNfZXh0ZW50ICpleHQsIHUxNiBvZmYpXFxuZnMvaGZzL2V4dGVudC5jLTc1LXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy04OC1cXG5mcy9oZnMvZXh0ZW50LmM6ODk6c3RhdGljIGludCBoZnNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNfZXh0ZW50ICpleHQpXFxuZnMvaGZzL2V4dGVudC5jLTkwLXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy05OC1cXG5mcy9oZnMvZXh0ZW50LmM6OTk6c3RhdGljIHUxNiBoZnNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0KVxcbmZzL2hmcy9leHRlbnQuYy0xMDAte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEwOS1cXG5mcy9oZnMvZXh0ZW50LmM6MTEwOnN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzL2V4dGVudC5jLTExMS17XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTEzLVxcbmZzL2hmcy9leHRlbnQuYzoxMTQ6XFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXFx1MDAzZXNlYXJjaF9rZXksIGlub2RlLVxcdTAwM2VpX2lubywgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfc3RhcnQsXFxuZnMvaGZzL2V4dGVudC5jLTExNS1cXHRcXHRcXHQgIEhGU19JU19SU1JDKGlub2RlKSA/ICBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMzYtXFxuZnMvaGZzL2V4dGVudC5jOjEzNzppbnQgaGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnMvZXh0ZW50LmMtMTM4LXtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNDUtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5mcy9oZnMvZXh0ZW50LmM6MTQ2OlxcdFxcdHJlcyA9IF9faGZzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFxcdTAwMjZmZCk7XFxuZnMvaGZzL2V4dGVudC5jLTE0Ny1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTUxLVxcbmZzL2hmcy9leHRlbnQuYzoxNTI6c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGhmc19leHRlbnQgKmV4dGVudCxcXG5mcy9oZnMvZXh0ZW50LmMtMTUzLVxcdFxcdFxcdFxcdFxcdHUzMiBjbmlkLCB1MzIgYmxvY2ssIHU4IHR5cGUpXFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTU2LVxcbmZzL2hmcy9leHRlbnQuYzoxNTc6XFx0aGZzX2V4dF9idWlsZF9rZXkoZmQtXFx1MDAzZXNlYXJjaF9rZXksIGNuaWQsIGJsb2NrLCB0eXBlKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTU4LVxcdGZkLVxcdTAwM2VrZXktXFx1MDAzZWV4dC5GTnVtID0gMDtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xNzAtXFxuZnMvaGZzL2V4dGVudC5jOjE3MTpzdGF0aWMgaW5saW5lIGludCBfX2hmc19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbmZzL2hmcy9leHRlbnQuYy0xNzIte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE3NS1cXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuZnMvaGZzL2V4dGVudC5jOjE3NjpcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzL2V4dGVudC5jLTE3Ny1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTE4MC1cXG5mcy9oZnMvZXh0ZW50LmM6MTgxOlxcdHJlcyA9IF9faGZzX2V4dF9yZWFkX2V4dGVudChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgaW5vZGUtXFx1MDAzZWlfaW5vLFxcbmZzL2hmcy9leHRlbnQuYy0xODItXFx0XFx0XFx0XFx0ICAgIGJsb2NrLCBIRlNfSVNfUlNSQyhpbm9kZSkgPyBIRlNfRktfUlNSQyA6IEhGU19GS19EQVRBKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xODQtXFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfc3RhcnQgPSBiZTE2X3RvX2NwdShmZC1cXHUwMDNla2V5LVxcdTAwM2VleHQuRkFCTik7XFxuZnMvaGZzL2V4dGVudC5jOjE4NTpcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9ibG9ja3MgPSBoZnNfZXh0X2Jsb2NrX2NvdW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy0xODYtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xOTItXFxuZnMvaGZzL2V4dGVudC5jOjE5MzpzdGF0aWMgaW50IGhmc19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTE2IGJsb2NrKVxcbmZzL2hmcy9leHRlbnQuYy0xOTQte1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTIwMy1cXHRpZiAoIXJlcykge1xcbmZzL2hmcy9leHRlbnQuYzoyMDQ6XFx0XFx0cmVzID0gX19oZnNfZXh0X2NhY2hlX2V4dGVudChcXHUwMDI2ZmQsIGlub2RlLCBibG9jayk7XFxuZnMvaGZzL2V4dGVudC5jLTIwNS1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9Mjg5PWludCBoZnNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBoZnNfY2F0X2ZpbGUgKmZpbGUsIGludCB0eXBlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTMyMS1cXHRkbyB7XFxuZnMvaGZzL2V4dGVudC5jOjMyMjpcXHRcXHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoXFx1MDAyNmZkLCBleHRlbnQsIGNuaWQsIHRvdGFsX2Jsb2NrcywgdHlwZSk7XFxuZnMvaGZzL2V4dGVudC5jLTMyMy1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTMzOD1pbnQgaGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0zNjItXFx0aWYgKGFibG9jayBcXHUwMDNjIEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfYmxvY2tzKSB7XFxuZnMvaGZzL2V4dGVudC5jOjM2MzpcXHRcXHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVxcdTAwM2VmaXJzdF9leHRlbnRzLCBhYmxvY2spO1xcbmZzL2hmcy9leHRlbnQuYy0zNjQtXFx0XFx0Z290byBkb25lO1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTM2Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZIRlNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuZnMvaGZzL2V4dGVudC5jOjM2ODpcXHRyZXMgPSBoZnNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xcbmZzL2hmcy9leHRlbnQuYy0zNjktXFx0aWYgKCFyZXMpXFxuZnMvaGZzL2V4dGVudC5jOjM3MDpcXHRcXHRkYmxvY2sgPSBoZnNfZXh0X2ZpbmRfYmxvY2soSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG5mcy9oZnMvZXh0ZW50LmMtMzcxLVxcdFxcdFxcdFxcdFxcdCAgICBhYmxvY2sgLSBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MzkzPWludCBoZnNfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00MDAtXFx0aWYgKEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzID09IEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfYmxvY2tzKVxcbmZzL2hmcy9leHRlbnQuYzo0MDE6XFx0XFx0Z29hbCA9IGhmc19leHRfbGFzdGJsb2NrKEhGU19JKGlub2RlKS1cXHUwMDNlZmlyc3RfZXh0ZW50cyk7XFxuZnMvaGZzL2V4dGVudC5jLTQwMi1cXHRlbHNlIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDAzOlxcdFxcdHJlcyA9IGhmc19leHRfcmVhZF9leHRlbnQoaW5vZGUsIEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA0LVxcdFxcdGlmIChyZXMpXFxuZnMvaGZzL2V4dGVudC5jLTQwNS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9oZnMvZXh0ZW50LmM6NDA2OlxcdFxcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA3LVxcdH1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00NjEtXFx0aGZzX2RiZyhFWFRFTlQsIFxcXCJpbnNlcnQgbmV3IGV4dGVudFxcXFxuXFxcIik7XFxuZnMvaGZzL2V4dGVudC5jOjQ2MjpcXHRyZXMgPSBoZnNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSk7XFxuZnMvaGZzL2V4dGVudC5jLTQ2My1cXHRpZiAocmVzKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTQ3OD12b2lkIGhmc19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtNTI3LVxcdFxcdH1cXG5mcy9oZnMvZXh0ZW50LmM6NTI4OlxcdFxcdHJlcyA9IF9faGZzX2V4dF9jYWNoZV9leHRlbnQoXFx1MDAyNmZkLCBpbm9kZSwgYWxsb2NfY250KTtcXG5mcy9oZnMvZXh0ZW50LmMtNTI5LVxcdFxcdGlmIChyZXMpXFxuLS1cXG5mcy9oZnMvaGZzLmgtNTctXFxuZnMvaGZzL2hmcy5oOjU4Oi8qIGxlZ2FsIHZhbHVlcyBmb3IgaGZzX2V4dF9rZXkuRmtUeXBlIGFuZCBoZnNfZmlsZS5mb3JrICovXFxuZnMvaGZzL2hmcy5oLTU5LSNkZWZpbmUgSEZTX0ZLX0RBVEFcXHQweDAwXFxuLS1cXG5mcy9oZnMvaGZzLmg9MTQ5PXN0cnVjdCBoZnNfY2F0X2tleSB7XFxuLS1cXG5mcy9oZnMvaGZzLmgtMTU2LS8qIFRoZSBrZXkgdXNlZCBpbiB0aGUgZXh0ZW50cyBiLXRyZWU6ICovXFxuZnMvaGZzL2hmcy5oOjE1NzpzdHJ1Y3QgaGZzX2V4dF9rZXkge1xcbmZzL2hmcy9oZnMuaC0xNTgtXFx0dTgga2V5X2xlbjtcXHRcXHQvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGtleSAqL1xcbi0tXFxuZnMvaGZzL2hmcy5oPTE2ND10eXBlZGVmIHVuaW9uIGhmc19idHJlZV9rZXkge1xcbi0tXFxuZnMvaGZzL2hmcy5oLTE2Ni1cXHRzdHJ1Y3QgaGZzX2NhdF9rZXkgY2F0O1xcbmZzL2hmcy9oZnMuaDoxNjc6XFx0c3RydWN0IGhmc19leHRfa2V5IGV4dDtcXG5mcy9oZnMvaGZzLmgtMTY4LX0gaGZzX2J0cmVlX2tleTtcXG4tLVxcbmZzL2hmcy9oZnMuaC0xNzAtI2RlZmluZSBIRlNfTUFYX0NBVF9LRVlMRU5cXHQoc2l6ZW9mKHN0cnVjdCBoZnNfY2F0X2tleSkgLSBzaXplb2YodTgpKVxcbmZzL2hmcy9oZnMuaDoxNzE6I2RlZmluZSBIRlNfTUFYX0VYVF9LRVlMRU5cXHQoc2l6ZW9mKHN0cnVjdCBoZnNfZXh0X2tleSkgLSBzaXplb2YodTgpKVxcbmZzL2hmcy9oZnMuaC0xNzItXFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmg9MTg5PWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtMTkxLS8qIGV4dGVudC5jICovXFxuZnMvaGZzL2hmc19mcy5oOjE5MjpleHRlcm4gaW50IGhmc19leHRfa2V5Y21wKGNvbnN0IGJ0cmVlX2tleSAqLCBjb25zdCBidHJlZV9rZXkgKik7XFxuZnMvaGZzL2hmc19mcy5oOjE5MzpleHRlcm4gdTE2IGhmc19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0LCB1MTYgb2ZmKTtcXG5mcy9oZnMvaGZzX2ZzLmgtMTk0LWV4dGVybiBpbnQgaGZzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGhmc19jYXRfZmlsZSAqLCBpbnQpO1xcbmZzL2hmcy9oZnNfZnMuaDoxOTU6ZXh0ZXJuIGludCBoZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvaGZzL2hmc19mcy5oLTE5Ni1leHRlcm4gaW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYz00MjE9aW50IGhmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL2hmcy9pbm9kZS5jLTQyOC1cXHRoZnNfZGJnKElOT0RFLCBcXFwiaGZzX3dyaXRlX2lub2RlOiAlbHVcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuZnMvaGZzL2lub2RlLmM6NDI5OlxcdHJlcyA9IGhmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlKTtcXG5mcy9oZnMvaW5vZGUuYy00MzAtXFx0aWYgKHJlcylcXG4tLVxcbmZzL2hmcy9tZGIuYz03Mz1pbnQgaGZzX21kYl9nZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmcy9tZGIuYy0xOTgtXFxuZnMvaGZzL21kYi5jOjE5OTpcXHRIRlNfU0Ioc2IpLVxcdTAwM2VleHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNfRVhUX0NOSUQsIGhmc19leHRfa2V5Y21wKTtcXG5mcy9oZnMvbWRiLmMtMjAwLVxcdGlmICghSEZTX1NCKHNiKS1cXHUwMDNlZXh0X3RyZWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MTcuMDU2NTYyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM2MzAwMDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBIRlMgRXh0ZW50IFdyaXRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgSEZTIGV4dGVudCB3cml0ZSBwYXRoLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIHNlZSBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgdGhlIHRhcmdldCwgZm91bmQgd2l0aGluIGBmcy9oZnMvZXh0ZW50LmNgLiBJdHMgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIGBoZnNfZXh0X3dyaXRlX2V4dGVudGAgYW5kIGBfX2hmc19leHRfY2FjaGVfZXh0ZW50YC4gRGlnZ2luZyBkZWVwZXIsIGBoZnNfZXh0X3dyaXRlX2V4dGVudGAgaXMgaW52b2tlZCBieSBgaGZzX2V4dGVuZF9maWxlYCBhbmQgYGhmc193cml0ZV9pbm9kZWAuIE9uIHRoZSBvdGhlciBoYW5kLCBgX19oZnNfZXh0X2NhY2hlX2V4dGVudGAgaXMgY2FsbGVkIGJ5IGBoZnNfZXh0X3JlYWRfZXh0ZW50YCB3aGljaCBpcyB1c2VkIGJ5IGBoZnNfZ2V0X2Jsb2NrYCBhbmQgYGhmc19leHRlbmRfZmlsZWAgKmFuZCogYnkgYGhmc19maWxlX3RydW5jYXRlYC5cblxuVGhlcmVmb3JlLCBteSBmb2N1cyBzaG91bGQgYmUgb24gYGhmc19leHRfd3JpdGVfZXh0ZW50YCwgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgLCBgaGZzX2V4dGVuZF9maWxlYCwgYGhmc19maWxlX3RydW5jYXRlYCwgYW5kIGBoZnNfd3JpdGVfaW5vZGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYF9faGZzX2V4dF93cml0ZV9leHRlbnRgIGlzIHByb3Blcmx5IGRlZmluZWQsIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgaXQncyBwcmVzZW50IHdpdGhpbiB2bWxpbnV4L2hmcy5rbyAod2hpY2ggaXQgaXMsIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uKS4gSSdsbCBrZWVwIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBoYW5keSBhcyBhIHJlZmVyZW5jZS5cblxuTmV4dCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGp1bXAgb3V0OiBgSEZTX0ZTYC4gSSBrbm93IGBIRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19IRlNfRlNgIGlzIHRoZSAqc3BlY2lmaWMqIGNvbmZpZyBmb3IgdGhpcyBIRlMgZnVuY3Rpb25hbGl0eS4gTm90aGluZyBlbHNlIHNlZW1zIGltbWVkaWF0ZWx5IG5lY2Vzc2FyeS5cblxuRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGFkZHMgYSBzYWZldHkgY2hlY2sgd2l0aGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YC4gSXQgdmVyaWZpZXMgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBhZ2FpbnN0IGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYCBiZWZvcmUgd3JpdGluZy4gVGhpcyBpcyBhIGNydWNpYWwgdmFsaWRhdGlvbiBzdGVwLiBXaXRob3V0IGl0LCB0aGUgY29kZSBjb3VsZCBiZSB2dWxuZXJhYmxlIHRvIGJ1ZmZlciBvdmVyLXJlYWRzIG9yIGV2ZW4gY29ycnVwdGVkIGJub2RlIHdyaXRlcywgZXNwZWNpYWxseSB3aXRoIG1hbGljaW91c2x5IGNyYWZ0ZWQgSEZTIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIHRlbGxzIG1lIHRoYXQgZnV6emluZyBIRlMgb3BlcmF0aW9ucyDigJMgbGlrZSBmaWxlIHRydW5jYXRpb24sIGV4dGVuc2lvbiwgYW5kIHdyaXRlYmFja3Mg4oCTIHdpdGggc3BlY2lmaWNhbGx5IGNyYWZ0ZWQgZmlsZXN5c3RlbSBpbWFnZXMgaXMgZXh0cmVtZWx5IHZhbHVhYmxlIHRvIHRlc3QgdGhlIHBhdGNoJ3MgZWZmZWN0aXZlbmVzcyBhbmQgdG8gZGV0ZWN0IGFueSByZWdyZXNzaW9ucyB1bmRlciBwb3RlbnRpYWxseSBtYWxpY2lvdXMgaW5wdXRzLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzMSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjIuNDE5NTY0NzUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3MTMxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faGZzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc19leHRfd3JpdGVfZXh0ZW50XCIsXG4gICAgXCJoZnNfZXh0ZW5kX2ZpbGVcIixcbiAgICBcImhmc19maWxlX3RydW5jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBfX2hmc19leHRfd3JpdGVfZXh0ZW50KCkgd2l0aGluIGZzL2hmcy9leHRlbnQuYyB0byBlbnN1cmUgdGhlIGJ0cmVlIGVudHJ5IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbnQgcmVjb3JkIHNpemUgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIG5vZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIEhGUyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcyBleHRlbmRpbmcgZmlsZXMsIHRydW5jYXRpbmcgZmlsZXMsIG9yIHN5bmNpbmcgZGlydHkgaW5vZGVzIG9uIG1vdW50ZWQgSEZTIGltYWdlcy4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIHZhbGlkYXRpb24gb24gbWFsZm9ybWVkIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoyMi41MDMyODU5NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzYyNzcwOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjIuNTAzODE1NDIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMzNjIyMDMyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAgaW4gYF9faGZzX2V4dF93cml0ZV9leHRlbnQoKWAgYmVmb3JlIHdyaXRpbmcgYEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHNgIGludG8gYSBibm9kZS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyB3aGVyZSBgZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIGBzaXplb2YoaGZzX2V4dGVudF9yZWMpYC4gU3VjaCBidWZmZXIgb3Zlci1yZWFkcyBhcmUgbWVtb3J5IGJvdW5kYXJ5IGlzc3VlcyBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSB1c2VyLXNwYWNlIGNvcGllcywgb3IgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGFuZGxpbmcsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1MWQwMmM2YjRmNjQyM2I3Zjc2NTYyZWQwMmNiNDJmMDIxMjhlOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ2OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzL2V4dGVudC5jIGIvZnMvaGZzL2V4dGVudC5jXG5pbmRleCA1ODBjNjI5ODFkYmQzLi5iNTg4NDEwZjAxYzc2IDEwMDY0NFxuLS0tIGEvZnMvaGZzL2V4dGVudC5jXG4rKysgYi9mcy9oZnMvZXh0ZW50LmNcbkBAIC0xMjYsNiArMTI2LDggQEAgc3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYykpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIFx0XHRIRlNfSShpbm9kZSktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0NzoyMi41MDM4MTc1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgyMDUyNTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQ29kZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLCBhbG9uZ3NpZGUgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBpbXBsaWNhdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmcy9leHRlbnQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjYuIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGEgcmVhZC1maWxlIGZ1bmN0aW9uIG9yIGBncmVwcGVyYCB0byBnZXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLiBUaGlzIGlzIGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjYuMzI0MzQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmcy9leHRlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0e1xcbiAxMDE6XFx0XFx0aW50IGk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGV4dCArPSAyO1xcbiAxMDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGV4dC0tLCBpKyspXFxuIDEwNTpcXHRcXHRcXHRpZiAoZXh0LVxcdTAwM2Vjb3VudClcXG4gMTA2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDc6XFx0XFx0cmV0dXJuIGJlMTZfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2spICsgYmUxNl90b19jcHUoZXh0LVxcdTAwM2Vjb3VudCk7XFxuIDEwODpcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdHN0YXRpYyBpbnQgX19oZnNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIDExMTpcXHR7XFxuIDExMjpcXHRcXHRpbnQgcmVzO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRoZnNfZXh0X2J1aWxkX2tleShmZC1cXHUwMDNlc2VhcmNoX2tleSwgaW5vZGUtXFx1MDAzZWlfaW5vLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgSEZTX0lTX1JTUkMoaW5vZGUpID8gIEhGU19GS19SU1JDIDogSEZTX0ZLX0RBVEEpO1xcbiAxMTY6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCk7XFxuIDExNzpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX05FVykge1xcbiAxMTg6XFx0XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbiAxMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTIwOlxcdFxcdFxcdC8qIEZhaWwgZWFybHkgYW5kIGF2b2lkIEVOT1NQQyBkdXJpbmcgdGhlIGJ0cmVlIG9wZXJhdGlvbiAqL1xcbiAxMjE6XFx0XFx0XFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cXHUwMDNldHJlZSwgZmQtXFx1MDAzZXRyZWUtXFx1MDAzZWRlcHRoICsgMSk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI0OlxcdFxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuIDEyNTpcXHRcXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4gMTI2OlxcdFxcdH0gZWxzZSB7XFxuIDEyNzpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTI5OlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc19leHRlbnRfcmVjKSlcXG4gMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMzE6XFx0XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiAxMzI6XFx0XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SEZTX0ZMR19FWFRfRElSVFk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGhmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4gMTQwOlxcdFxcdGludCByZXMgPSAwO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoSEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyBcXHUwMDI2IEhGU19GTEdfRVhUX0RJUlRZKSB7XFxuIDE0MzpcXHRcXHRcXHRyZXMgPSBoZnNfZmluZF9pbml0KEhGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZWV4dF90cmVlLCBcXHUwMDI2ZmQpO1xcbiAxNDQ6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTQ1OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDE0NjpcXHRcXHRcXHRyZXMgPSBfX2hmc19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbiAxNDc6XFx0XFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFx0cmV0dXJuIHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MjYuMzI0NDUyMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYzMzI3OTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgb3BlcmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSB3cml0ZSBvcGVyYXRpb24gZm9yIGV4dGVudHMuIEl0IHNlZW1zIHRoYXQgYGNhY2hlZF9leHRlbnRzYCBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBibm9kZTogdGhlIGNvZGUgZXhwbGljaXRseSBjYWxscyBgaGZzX2Jub2RlX3dyaXRlYCB3aXRoIGBmZC1cdTAwM2Vibm9kZWAsIGBIRlNfSShpbm9kZSktXHUwMDNlY2FjaGVkX2V4dGVudHNgLCBgZmQtXHUwMDNlZW50cnlvZmZzZXRgLCBhbmQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBhcyBhcmd1bWVudHMuIFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgcHJvY2VzcywgYnV0IHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93IGlzOiBXaGF0IHRoZSAqaGVjayogaXMgYGNhY2hlZF9leHRlbnRzYD8gVGhpcyBpcyB0aGUgY2VudHJhbCBwaWVjZSBvZiBkYXRhIGJlaW5nIHdyaXR0ZW4sIGFuZCBrbm93aW5nIGl0cyB0eXBlIGlzIGNydWNpYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJ3MgaW1wbGljYXRpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGItdHJlZSBzdHJ1Y3R1cmUuIFRpbWUgdG8gdXNlIGdyZXAgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGBmcy9oZnMvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjMwLjk1NzczNDQxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNzM0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVkX2V4dGVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9leHRlbnQuYz0xMTA9c3RhdGljIGludCBfX2hmc19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMjMtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5mcy9oZnMvZXh0ZW50LmM6MTI0OlxcdFxcdGhmc19icmVjX2luc2VydChmZCwgSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuZnMvaGZzL2V4dGVudC5jLTEyNS1cXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oSEZTX0ZMR19FWFRfRElSVFl8SEZTX0ZMR19FWFRfTkVXKTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xMzAtXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuZnMvaGZzL2V4dGVudC5jOjEzMTpcXHRcXHRoZnNfYm5vZGVfd3JpdGUoZmQtXFx1MDAzZWJub2RlLCBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLCBmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuZnMvaGZzL2V4dGVudC5jLTEzMi1cXHRcXHRIRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5IRlNfRkxHX0VYVF9ESVJUWTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0xNzE9c3RhdGljIGlubGluZSBpbnQgX19oZnNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy0xODAtXFxuZnMvaGZzL2V4dGVudC5jOjE4MTpcXHRyZXMgPSBfX2hmc19leHRfcmVhZF9leHRlbnQoZmQsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVxcdTAwM2VpX2lubyxcXG5mcy9oZnMvZXh0ZW50LmMtMTgyLVxcdFxcdFxcdFxcdCAgICBibG9jaywgSEZTX0lTX1JTUkMoaW5vZGUpID8gSEZTX0ZLX1JTUkMgOiBIRlNfRktfREFUQSk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtMTg0LVxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX3N0YXJ0ID0gYmUxNl90b19jcHUoZmQtXFx1MDAzZWtleS1cXHUwMDNlZXh0LkZBQk4pO1xcbmZzL2hmcy9leHRlbnQuYzoxODU6XFx0XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfYmxvY2tzID0gaGZzX2V4dF9ibG9ja19jb3VudChIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTg2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9MzM4PWludCBoZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTM2OS1cXHRpZiAoIXJlcylcXG5mcy9oZnMvZXh0ZW50LmM6MzcwOlxcdFxcdGRibG9jayA9IGhmc19leHRfZmluZF9ibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbmZzL2hmcy9leHRlbnQuYy0zNzEtXFx0XFx0XFx0XFx0XFx0ICAgIGFibG9jayAtIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX3N0YXJ0KTtcXG4tLVxcbmZzL2hmcy9leHRlbnQuYz0zOTM9aW50IGhmc19leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTQwNS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9oZnMvZXh0ZW50LmM6NDA2OlxcdFxcdGdvYWwgPSBoZnNfZXh0X2xhc3RibG9jayhIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDA3LVxcdH1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00MzYtXFx0fSBlbHNlIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDM3OlxcdFxcdHJlcyA9IGhmc19hZGRfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuZnMvaGZzL2V4dGVudC5jLTQzOC1cXHRcXHRcXHRcXHQgICAgIEhGU19JKGlub2RlKS1cXHUwMDNlYWxsb2NfYmxvY2tzIC1cXG4tLVxcbmZzL2hmcy9leHRlbnQuYy00NDEtXFx0XFx0aWYgKCFyZXMpIHtcXG5mcy9oZnMvZXh0ZW50LmM6NDQyOlxcdFxcdFxcdGhmc19kdW1wX2V4dGVudChIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzKTtcXG5mcy9oZnMvZXh0ZW50LmMtNDQzLVxcdFxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgfD0gSEZTX0ZMR19FWFRfRElSVFk7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmMtNDY1LVxcbmZzL2hmcy9leHRlbnQuYzo0NjY6XFx0bWVtc2V0KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIDAsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xcbmZzL2hmcy9leHRlbnQuYzo0Njc6XFx0SEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50c1swXS5ibG9jayA9IGNwdV90b19iZTE2KHN0YXJ0KTtcXG5mcy9oZnMvZXh0ZW50LmM6NDY4OlxcdEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHNbMF0uY291bnQgPSBjcHVfdG9fYmUxNihsZW4pO1xcbmZzL2hmcy9leHRlbnQuYzo0Njk6XFx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy00NzAtXFx0SEZTX0koaW5vZGUpLVxcdTAwM2VmbGFncyB8PSBIRlNfRkxHX0VYVF9ESVJUWXxIRlNfRkxHX0VYVF9ORVc7XFxuLS1cXG5mcy9oZnMvZXh0ZW50LmM9NDc4PXZvaWQgaGZzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmcy9leHRlbnQuYy01MzEtXFx0XFx0c3RhcnQgPSBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9zdGFydDtcXG5mcy9oZnMvZXh0ZW50LmM6NTMyOlxcdFxcdGhmc19mcmVlX2V4dGVudHMoc2IsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuZnMvaGZzL2V4dGVudC5jLTUzMy1cXHRcXHRcXHRcXHQgYWxsb2NfY250IC0gc3RhcnQsIGFsbG9jX2NudCAtIGJsa19jbnQpO1xcbmZzL2hmcy9leHRlbnQuYzo1MzQ6XFx0XFx0aGZzX2R1bXBfZXh0ZW50KEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMpO1xcbmZzL2hmcy9leHRlbnQuYy01MzUtXFx0XFx0aWYgKGJsa19jbnQgXFx1MDAzZSBzdGFydCkge1xcbi0tXFxuZnMvaGZzL2hmc19mcy5oPTYxPXN0cnVjdCBoZnNfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9oZnMvaGZzX2ZzLmgtODEtXFx0dTE2IGZpcnN0X2Jsb2NrcztcXG5mcy9oZnMvaGZzX2ZzLmg6ODI6XFx0aGZzX2V4dGVudF9yZWMgY2FjaGVkX2V4dGVudHM7XFxuZnMvaGZzL2hmc19mcy5oLTgzLVxcdHUxNiBjYWNoZWRfc3RhcnQsIGNhY2hlZF9ibG9ja3M7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYz0xODI9c3RydWN0IGlub2RlICpoZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvaGZzL2lub2RlLmMtMjI5LVxcdFxcdG1lbXNldChIRlNfSShpbm9kZSktXFx1MDAzZWZpcnN0X2V4dGVudHMsIDAsIHNpemVvZihoZnNfZXh0ZW50X3JlYykpO1xcbmZzL2hmcy9pbm9kZS5jOjIzMDpcXHRcXHRtZW1zZXQoSEZTX0koaW5vZGUpLVxcdTAwM2VjYWNoZWRfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc19leHRlbnRfcmVjKSk7XFxuZnMvaGZzL2lub2RlLmMtMjMxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6MzEuMDA0OTE4NDY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDQxNjIzMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIEhGUyBFeHRlbnQgUmVjb3JkIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gV2UncmUgbG9va2luZyBhdCBhIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgZXh0ZW50IHJlY29yZHMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc19leHRlbnRfcmVjYCBzdHJ1Y3R1cmUuIEl0J3MgYSBmaXhlZC1zaXplIHN0cnVjdCwgYW4gYXJyYXkgb2YgZXh0ZW50IGRlc2NyaXB0b3JzLiBUaGUgcHJvYmxlbWF0aWMgY29kZSBpcyBpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudGAsIHdoZXJlIGBoZnNfYm5vZGVfd3JpdGVgIGlzIGNhbGxlZC4gVGhlIGNvcmUgaXNzdWUgYm9pbHMgZG93biB0byBhIHBvdGVudGlhbCBidWZmZXIgb3Zlci1yZWFkLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhg4oCUdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIHRvIGRpc2vigJR3YXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYGhmc19leHRlbnRfcmVjYCwgYGhmc19ibm9kZV93cml0ZWAgd291bGQgYXR0ZW1wdCB0byByZWFkIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgYnl0ZXMgZnJvbSBgSEZTX0koaW5vZGUpLVx1MDAzZWNhY2hlZF9leHRlbnRzYC4gU2luY2UgYGNhY2hlZF9leHRlbnRzYCAqaXMqIG9mIGBoZnNfZXh0ZW50X3JlY2Agc2l6ZSwgdGhpcyBtZWFudCB3ZSB3ZXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkLCBhbiBleHRyZW1lbHkgY29tbW9uIHZ1bG5lcmFiaWxpdHkuIEtBU0FOLCBpbiBmYWN0LCBzaG91bGQgZGV0ZWN0IHRoaXMhXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBzYW5pdHkgY2hlY2s6XG5cbmBgYGNcbmlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzX2V4dGVudF9yZWMpKVxuICAgIHJldHVybiAtRUlPO1xuYGBgXG5cblRoaXMgcHJldmVudHMgdGhlIE9PQiByZWFkIGJ5IGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciAoLUVJTykgaWYgdGhlIGxlbmd0aHMgZG9uJ3QgbWF0Y2guIEl04oCZcyBhIGNsZWFuIGFuZCBkaXJlY3QgZml4LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGNvbmZpcm06XG5cbiogICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBOb3BlLCB0aGUgcmV0dXJuIGhhcHBlbnMgZWFybHkuXG4qICAgTm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBObywgdGhlIHJldHVybiBoYXBwZW5zIGVhcmx5LlxuKiAgIE5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhIGRpc2sgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBibm9kZSBvciBidWZmZXIgY2FjaGUuXG4qICAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIE9PQiByZWFkIGZpeCwgZnJvbSB0aGUgYGNhY2hlZF9leHRlbnRzYCBidWZmZXIgd2hlbiBgZmQtXHUwMDNlZW50cnlsZW5ndGggXHUwMDNlIHNpemVvZihoZnNfZXh0ZW50X3JlYylgLlxuXG5LQVNBTiB3aWxsIGNhdGNoIHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhbiBPT0IgcmVhZCwgYW5kIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBzb3J0IG9mIG1lbW9yeSBjb3JydXB0aW9uLiBEaXNrIGNvcnJ1cHRpb24gY291bGQgaGFwcGVuIGlmIGBlbnRyeWxlbmd0aGAgaGFzIGJhZCBkYXRhLlxuXG5JJ2xsIGFsc28gZ28gYmFjayBhbmQgY2FyZWZ1bGx5IGNoZWNrIHRoZSBgaGZzX2Jub2RlX3dyaXRlYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjQxLjA0NjU0NDQ0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2Jub2RlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYXR0ci5jPTIyPXN0YXRpYyBpbnQgX19oZnNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLFxcbi0tXFxuZnMvaGZzL2F0dHIuYy02MC1cXHRpZiAoIXJlcylcXG5mcy9oZnMvYXR0ci5jOjYxOlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXFxuZnMvaGZzL2F0dHIuYy02Mi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhmc19jYXRfZmlsZSkpO1xcbi0tXFxuZnMvaGZzL2Jub2RlLmM9MTE0PXZvaWQgaGZzX2Jub2RlX3JlYWRfa2V5KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHZvaWQgKmtleSwgaW50IG9mZilcXG4tLVxcbmZzL2hmcy9ibm9kZS5jLTEzNC1cXG5mcy9oZnMvYm5vZGUuYzoxMzU6dm9pZCBoZnNfYm5vZGVfd3JpdGUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdm9pZCAqYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKVxcbmZzL2hmcy9ibm9kZS5jLTEzNi17XFxuLS1cXG5mcy9oZnMvYm5vZGUuYy0xNTktXFxuZnMvaGZzL2Jub2RlLmM6MTYwOnZvaWQgaGZzX2Jub2RlX3dyaXRlX3UxNihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmLCB1MTYgZGF0YSlcXG5mcy9oZnMvYm5vZGUuYy0xNjEte1xcbi0tXFxuZnMvaGZzL2Jub2RlLmMtMTYzLVxcdC8vIG9wdGltaXplIGxhdGVyLi4uXFxuZnMvaGZzL2Jub2RlLmM6MTY0OlxcdGhmc19ibm9kZV93cml0ZShub2RlLCBcXHUwMDI2diwgb2ZmLCAyKTtcXG5mcy9oZnMvYm5vZGUuYy0xNjUtfVxcbmZzL2hmcy9ibm9kZS5jLTE2Ni1cXG5mcy9oZnMvYm5vZGUuYzoxNjc6dm9pZCBoZnNfYm5vZGVfd3JpdGVfdTgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgaW50IG9mZiwgdTggZGF0YSlcXG5mcy9oZnMvYm5vZGUuYy0xNjgte1xcbmZzL2hmcy9ibm9kZS5jLTE2OS1cXHQvLyBvcHRpbWl6ZSBsYXRlci4uLlxcbmZzL2hmcy9ibm9kZS5jOjE3MDpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNmRhdGEsIG9mZiwgMSk7XFxuZnMvaGZzL2Jub2RlLmMtMTcxLX1cXG4tLVxcbmZzL2hmcy9ibm9kZS5jPTI3Nz12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmcy9ibm9kZS5jLTI4OS1cXHRcXHRjbmlkID0gY3B1X3RvX2JlMzIodG1wLVxcdTAwM2VuZXh0KTtcXG5mcy9oZnMvYm5vZGUuYzoyOTA6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKHRtcCwgXFx1MDAyNmNuaWQsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbmV4dCksIDQpO1xcbmZzL2hmcy9ibm9kZS5jLTI5MS1cXHRcXHRoZnNfYm5vZGVfcHV0KHRtcCk7XFxuLS1cXG5mcy9oZnMvYm5vZGUuYy0zMDAtXFx0XFx0Y25pZCA9IGNwdV90b19iZTMyKHRtcC1cXHUwMDNlcHJldik7XFxuZnMvaGZzL2Jub2RlLmM6MzAxOlxcdFxcdGhmc19ibm9kZV93cml0ZSh0bXAsIFxcdTAwMjZjbmlkLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIHByZXYpLCA0KTtcXG5mcy9oZnMvYm5vZGUuYy0zMDItXFx0XFx0aGZzX2Jub2RlX3B1dCh0bXApO1xcbi0tXFxuZnMvaGZzL2JyZWMuYz02NT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIGludCBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTExMi1cXHQvKiB3cml0ZSBuZXcgbGFzdCBvZmZzZXQgKi9cXG5mcy9oZnMvYnJlYy5jOjExMzpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbnVtX3JlY3MpLCBub2RlLVxcdTAwM2VudW1fcmVjcyk7XFxuZnMvaGZzL2JyZWMuYzoxMTQ6XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBlbmRfcmVjX29mZiwgZW5kX29mZiArIHNpemUpO1xcbmZzL2hmcy9icmVjLmMtMTE1LVxcdGRhdGFfb2ZmID0gZW5kX29mZjtcXG4tLVxcbmZzL2hmcy9icmVjLmMtMTIyLVxcdFxcdGRhdGFfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIGRhdGFfcmVjX29mZiArIDIpO1xcbmZzL2hmcy9icmVjLmM6MTIzOlxcdFxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgZGF0YV9yZWNfb2ZmLCBkYXRhX29mZiArIHNpemUpO1xcbmZzL2hmcy9icmVjLmMtMTI0LVxcdFxcdGRhdGFfcmVjX29mZiArPSAyO1xcbi0tXFxuZnMvaGZzL2JyZWMuYy0xMzEtc2tpcDpcXG5mcy9oZnMvYnJlYy5jOjEzMjpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgZmQtXFx1MDAzZXNlYXJjaF9rZXksIGRhdGFfb2ZmLCBrZXlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jOjEzMzpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgZW50cnksIGRhdGFfb2ZmICsga2V5X2xlbiwgZW50cnlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jLTEzNC1cXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG4tLVxcbmZzL2hmcy9icmVjLmM9MTc3PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2JyZWMuYy0yMDgtXFx0fVxcbmZzL2hmcy9icmVjLmM6MjA5OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBudW1fcmVjcyksIG5vZGUtXFx1MDAzZW51bV9yZWNzKTtcXG5mcy9oZnMvYnJlYy5jLTIxMC1cXG4tLVxcbmZzL2hmcy9icmVjLmMtMjE2LVxcdFxcdGRhdGFfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbmZzL2hmcy9icmVjLmM6MjE3OlxcdFxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgcmVjX29mZiArIDIsIGRhdGFfb2ZmIC0gc2l6ZSk7XFxuZnMvaGZzL2JyZWMuYy0yMTgtXFx0XFx0cmVjX29mZiAtPSAyO1xcbi0tXFxuZnMvaGZzL2JyZWMuYz0yMzE9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTMwNS1cXHR3aGlsZSAobnVtX3JlY3MpIHtcXG5mcy9oZnMvYnJlYy5jOjMwNjpcXHRcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCBuZXdfcmVjX29mZiwgbmV3X29mZik7XFxuZnMvaGZzL2JyZWMuYy0zMDctXFx0XFx0b2xkX3JlY19vZmYgLT0gMjtcXG4tLVxcbmZzL2hmcy9icmVjLmMtMzEyLVxcdH1cXG5mcy9oZnMvYnJlYy5jOjMxMzpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCBuZXdfcmVjX29mZiwgbmV3X29mZik7XFxuZnMvaGZzL2JyZWMuYy0zMTQtXFx0aGZzX2Jub2RlX2NvcHkobmV3X25vZGUsIDE0LCBub2RlLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCAtIGRhdGFfc3RhcnQpO1xcbi0tXFxuZnMvaGZzL2JyZWMuYy0zMjItXFx0bm9kZV9kZXNjLnJlc2VydmVkID0gMDtcXG5mcy9oZnMvYnJlYy5jOjMyMzpcXHRoZnNfYm5vZGVfd3JpdGUobmV3X25vZGUsIFxcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcXG5mcy9oZnMvYnJlYy5jLTMyNC1cXG4tLVxcbmZzL2hmcy9icmVjLmMtMzI5LVxcdG5vZGVfZGVzYy5udW1fcmVjcyA9IGNwdV90b19iZTE2KG5vZGUtXFx1MDAzZW51bV9yZWNzKTtcXG5mcy9oZnMvYnJlYy5jOjMzMDpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNm5vZGVfZGVzYywgMCwgc2l6ZW9mKG5vZGVfZGVzYykpO1xcbmZzL2hmcy9icmVjLmMtMzMxLVxcbi0tXFxuZnMvaGZzL2JyZWMuYy0zMzYtXFx0XFx0bm9kZV9kZXNjLnByZXYgPSBjcHVfdG9fYmUzMihuZXh0X25vZGUtXFx1MDAzZXByZXYpO1xcbmZzL2hmcy9icmVjLmM6MzM3OlxcdFxcdGhmc19ibm9kZV93cml0ZShuZXh0X25vZGUsIFxcdTAwMjZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTtcXG5mcy9oZnMvYnJlYy5jLTMzOC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5leHRfbm9kZSk7XFxuLS1cXG5mcy9oZnMvYnJlYy5jPTM1Mj1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2JyZWMuYy00MDUtXFx0ZW5kX29mZiA9IHN0YXJ0X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihwYXJlbnQsIHJlY19vZmYpO1xcbmZzL2hmcy9icmVjLmM6NDA2OlxcdGhmc19ibm9kZV93cml0ZV91MTYocGFyZW50LCByZWNfb2ZmLCBzdGFydF9vZmYgKyBkaWZmKTtcXG5mcy9oZnMvYnJlYy5jLTQwNy1cXHRzdGFydF9vZmYgLT0gNDtcXHQvKiBtb3ZlIHByZXZpb3VzIGNuaWQgdG9vICovXFxuLS1cXG5mcy9oZnMvYnJlYy5jLTQxMS1cXHRcXHRlbmRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KHBhcmVudCwgcmVjX29mZik7XFxuZnMvaGZzL2JyZWMuYzo0MTI6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihwYXJlbnQsIHJlY19vZmYsIGVuZF9vZmYgKyBkaWZmKTtcXG5mcy9oZnMvYnJlYy5jLTQxMy1cXHR9XFxuLS1cXG5mcy9oZnMvYnJlYy5jLTQxOC1cXHRpZiAoISh0cmVlLVxcdTAwM2VhdHRyaWJ1dGVzIFxcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykpXFxuZnMvaGZzL2JyZWMuYzo0MTk6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3U4KHBhcmVudCwgZmQtXFx1MDAzZWtleW9mZnNldCwgbmV3a2V5bGVuIC0gMSk7XFxuZnMvaGZzL2JyZWMuYy00MjAtXFx0aGZzX2Jub2RlX2R1bXAocGFyZW50KTtcXG4tLVxcbmZzL2hmcy9icmVjLmM9NDU4PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmcy9icmVjLmMtNDk2LVxcdG5vZGVfZGVzYy5yZXNlcnZlZCA9IDA7XFxuZnMvaGZzL2JyZWMuYzo0OTc6XFx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcXHUwMDI2bm9kZV9kZXNjLCAwLCBzaXplb2Yobm9kZV9kZXNjKSk7XFxuZnMvaGZzL2JyZWMuYy00OTgtXFxuZnMvaGZzL2JyZWMuYy00OTktXFx0cmVjID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMjtcXG5mcy9oZnMvYnJlYy5jOjUwMDpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5ld19ub2RlLCByZWMsIDE0KTtcXG5mcy9oZnMvYnJlYy5jLTUwMS1cXG4tLVxcbmZzL2hmcy9icmVjLmMtNTEzLVxcdFxcdFxcdGtleV9zaXplID0gdHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAxO1xcbmZzL2hmcy9icmVjLmM6NTE0OlxcdFxcdFxcdGhmc19ibm9kZV93cml0ZV91OChuZXdfbm9kZSwgMTQsIHRyZWUtXFx1MDAzZW1heF9rZXlfbGVuKTtcXG5mcy9oZnMvYnJlYy5jLTUxNS1cXHRcXHR9XFxuLS1cXG5mcy9oZnMvYnJlYy5jLTUxNy1cXHRcXHRjbmlkID0gY3B1X3RvX2JlMzIobm9kZS1cXHUwMDNldGhpcyk7XFxuZnMvaGZzL2JyZWMuYzo1MTg6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKG5ld19ub2RlLCBcXHUwMDI2Y25pZCwgMTQgKyBrZXlfc2l6ZSwgNCk7XFxuZnMvaGZzL2JyZWMuYy01MTktXFxuZnMvaGZzL2JyZWMuYy01MjAtXFx0XFx0cmVjIC09IDI7XFxuZnMvaGZzL2JyZWMuYzo1MjE6XFx0XFx0aGZzX2Jub2RlX3dyaXRlX3UxNihuZXdfbm9kZSwgcmVjLCAxNCArIGtleV9zaXplICsgNCk7XFxuZnMvaGZzL2JyZWMuYy01MjItXFxuLS1cXG5mcy9oZnMvYnRyZWUuYz0yMjY9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX25ld19ibWFwKHN0cnVjdCBoZnNfYm5vZGUgKnByZXYsIHUzMiBpZHgpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0yNDEtXFx0Y25pZCA9IGNwdV90b19iZTMyKGlkeCk7XFxuZnMvaGZzL2J0cmVlLmM6MjQyOlxcdGhmc19ibm9kZV93cml0ZShwcmV2LCBcXHUwMDI2Y25pZCwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBuZXh0KSwgNCk7XFxuZnMvaGZzL2J0cmVlLmMtMjQzLVxcbi0tXFxuZnMvaGZzL2J0cmVlLmMtMjUyLVxcdGRlc2MucmVzZXJ2ZWQgPSAwO1xcbmZzL2hmcy9idHJlZS5jOjI1MzpcXHRoZnNfYm5vZGVfd3JpdGUobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuZnMvaGZzL2J0cmVlLmM6MjU0OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgMTQsIDB4ODAwMCk7XFxuZnMvaGZzL2J0cmVlLmM6MjU1OlxcdGhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMiwgMTQpO1xcbmZzL2hmcy9idHJlZS5jOjI1NjpcXHRoZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDQsIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDYpO1xcbmZzL2hmcy9idHJlZS5jLTI1Ny1cXG4tLVxcbmZzL2hmcy9idHJlZS5oPTEwMD1leHRlcm4gdm9pZCBoZnNfYm5vZGVfcmVhZF9rZXkoc3RydWN0IGhmc19ibm9kZSAqLCB2b2lkICosIGludCk7XFxuZnMvaGZzL2J0cmVlLmg6MTAxOmV4dGVybiB2b2lkIGhmc19ibm9kZV93cml0ZShzdHJ1Y3QgaGZzX2Jub2RlICosIHZvaWQgKiwgaW50LCBpbnQpO1xcbmZzL2hmcy9idHJlZS5oOjEwMjpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTE2KHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCB1MTYpO1xcbmZzL2hmcy9idHJlZS5oOjEwMzpleHRlcm4gdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTgoc3RydWN0IGhmc19ibm9kZSAqLCBpbnQsIHU4KTtcXG5mcy9oZnMvYnRyZWUuaC0xMDQtZXh0ZXJuIHZvaWQgaGZzX2Jub2RlX2NsZWFyKHN0cnVjdCBoZnNfYm5vZGUgKiwgaW50LCBpbnQpO1xcbi0tXFxuZnMvaGZzL2V4dGVudC5jPTExMD1zdGF0aWMgaW50IF9faGZzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzL2V4dGVudC5jLTEzMC1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9oZnMvZXh0ZW50LmM6MTMxOlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC1cXHUwMDNlYm5vZGUsIEhGU19JKGlub2RlKS1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGZkLVxcdTAwM2VlbnRyeW9mZnNldCwgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoKTtcXG5mcy9oZnMvZXh0ZW50LmMtMTMyLVxcdFxcdEhGU19JKGlub2RlKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhGU19GTEdfRVhUX0RJUlRZO1xcbi0tXFxuZnMvaGZzL2lub2RlLmM9NDIxPWludCBoZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9oZnMvaW5vZGUuYy00NzctXFxuZnMvaGZzL2lub2RlLmM6NDc4OlxcdFxcdGhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgXFx1MDAyNnJlYywgZmQuZW50cnlvZmZzZXQsXFxuZnMvaGZzL2lub2RlLmMtNDc5LVxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGhmc19jYXRfZGlyKSk7XFxuLS1cXG5mcy9oZnMvaW5vZGUuYy00ODYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmVjLmZpbGUuUkxnTGVuLCBcXHUwMDI2cmVjLmZpbGUuUlB5TGVuKTtcXG5mcy9oZnMvaW5vZGUuYzo0ODc6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcXG5mcy9oZnMvaW5vZGUuYy00ODgtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBoZnNfY2F0X2ZpbGUpKTtcXG4tLVxcbmZzL2hmcy9pbm9kZS5jLTUwNC1cXG5mcy9oZnMvaW5vZGUuYzo1MDU6XFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCBcXHUwMDI2cmVjLCBmZC5lbnRyeW9mZnNldCxcXG5mcy9oZnMvaW5vZGUuYy01MDYtXFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaGZzX2NhdF9maWxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ3OjQxLjA5MzcxNDUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzIyNzUwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHNldC1yZXN1bHRzYCBDYWxsKipcblxuT2theSwgdGltZSB0byBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBLTVNBTiBpc24ndCBnb2luZyB0byBiZSBuZWVkZWQgZm9yIHRoaXMgb25lLiBMZXQgbWUgZXhwbGFpbiBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIGNoZWNrIHdpdGhpbiBgX19oZnNfZXh0X3dyaXRlX2V4dGVudCgpYC4gU3BlY2lmaWNhbGx5LCBpdCBtYWtlcyBzdXJlIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAg4oCTIHRoZSBsZW5ndGggb2YgdGhlIGVudHJ5IHdlJ3JlIHdvcmtpbmcgd2l0aCDigJMgaXMgKmV4YWN0bHkqIHRoZSBzaXplIG9mIGBoZnNfZXh0ZW50X3JlY2AgYmVmb3JlIGl0IGNhbGxzIGBoZnNfYm5vZGVfd3JpdGUoKWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgcHJldmVudHMgYSB2ZXJ5IHNwZWNpZmljIGtpbmQgb2YgdnVsbmVyYWJpbGl0eTogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYEhGU19JKGlub2RlKS1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuIFRoaXMgcmVhZCB3b3VsZCBvY2N1ciBpZiB3ZSBzdHVtYmxlIHVwb24gY29ycnVwdGVkIG9uLWRpc2sgbWV0YWRhdGEgd2hlcmUgdGhlIHJlY29yZCBsZW5ndGggaXMgdW5leHBlY3RlZC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhY3RzIGFzIGEgZ2F0ZWtlZXBlciwgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgc3RydWN0dXJlLCB0aHVzIHNhZmVndWFyZGluZyB0aGUgYm5vZGUgZW50cnkgZnJvbSBjb3JydXB0aW9uLiBOb3csIHRoZSByZWFzb24gS01TQU4gaXNuJ3QgYSBjb25jZXJuIGhlcmUgaXMgYmVjYXVzZSB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgY3J1Y2lhbGx5LCBkb2Vzbid0IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyB0aGUgcmVhbCB3aW4uIFNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0J3MgYWxsIGFib3V0IHByZXZlbnRpbmcgYW4gZXhpc3RpbmcgcmVhZCB2dWxuZXJhYmlsaXR5IOKAkyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZW1haW5pbmcgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGVjaywgYW5kIHRoZSBkZWVwZXIgYW5hbHlzaXMgYXNzb2NpYXRlZCB3aXRoIEtNU0FOIGlzIHNpbXBseSBub3QgbmVlZGVkLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1NiwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDc6NDUuODY1OTkyODQzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNfZXh0ZW50X3JlYylgIGluIGBfX2hmc19leHRfd3JpdGVfZXh0ZW50KClgIGJlZm9yZSB3cml0aW5nIGBIRlNfSShpbm9kZSktXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBpbnRvIGEgYm5vZGUuIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBjYWNoZWRfZXh0ZW50c2AgYnVmZmVyIHdoZW4gZGVhbGluZyB3aXRoIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgd2hlcmUgYGVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc19leHRlbnRfcmVjKWAuIFN1Y2ggYnVmZmVyIG92ZXItcmVhZHMgYXJlIG1lbW9yeSBib3VuZGFyeSBpc3N1ZXMgZnVsbHkgY292ZXJlZCBieSBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFmZmVjdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhhbmRsaW5nLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgv5xl[1] Phase: Succeeded StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 12:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 12:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2] Phase: Succeeded StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 12:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 12:47:57 +0000 UTC FinishedAt: 2026-09-09 12:48:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowgv5xl/series-workflowgv5xl-convert-artifact-3497565955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 12:48:07 +0000 UTC FinishedAt: 2026-09-09 13:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 12:48:07 +0000 UTC FinishedAt: 2026-09-09 13:03:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*217059ca-ad0a-4ad2-9ab9-5f0e560dafd4,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-workflowgv5xl/series-workflowgv5xl-convert-artifact-3497565955/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": "4d3f93c5-e802-4b52-95ab-06d0a0f1d45b", "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-workflowgv5xl/series-workflowgv5xl-build-action-1588285297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 12:48:07 +0000 UTC FinishedAt: 2026-09-09 13:03: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:*217059ca-ad0a-4ad2-9ab9-5f0e560dafd4,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-workflowgv5xl/series-workflowgv5xl-convert-artifact-3497565955/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": "4d3f93c5-e802-4b52-95ab-06d0a0f1d45b", "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-workflowgv5xl/series-workflowgv5xl-build-action-1588285297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 13:03:57 +0000 UTC FinishedAt: 2026-09-09 13:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 13:03:57 +0000 UTC FinishedAt: 2026-09-09 13:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 13:03:57 +0000 UTC FinishedAt: 2026-09-09 13:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 13:03:57 +0000 UTC FinishedAt: 2026-09-09 13:04:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowgv5xl/series-workflowgv5xl-convert-artifact-2712625082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 13:04:18 +0000 UTC FinishedAt: 2026-09-09 13:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 13:04:18 +0000 UTC FinishedAt: 2026-09-09 13:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d3f93c5-e802-4b52-95ab-06d0a0f1d45b,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-workflowgv5xl/series-workflowgv5xl-build-action-1588285297/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-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 13:06:16 +0000 UTC FinishedAt: 2026-09-09 13:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:06:16 +0000 UTC FinishedAt: 2026-09-09 13:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 13:06:16 +0000 UTC FinishedAt: 2026-09-09 13:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 13:06:16 +0000 UTC FinishedAt: 2026-09-09 13:26:47 +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:*217059ca-ad0a-4ad2-9ab9-5f0e560dafd4,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-workflowgv5xl/series-workflowgv5xl-convert-artifact-2712625082/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": "ed919865-5296-4e66-809d-fa2cb3c1ab4f", "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-workflowgv5xl/series-workflowgv5xl-build-action-886967838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:06:16 +0000 UTC FinishedAt: 2026-09-09 13:26:10 +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:*217059ca-ad0a-4ad2-9ab9-5f0e560dafd4,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-workflowgv5xl/series-workflowgv5xl-convert-artifact-2712625082/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": "ed919865-5296-4e66-809d-fa2cb3c1ab4f", "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-workflowgv5xl/series-workflowgv5xl-build-action-886967838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 13:26:47 +0000 UTC FinishedAt: 2026-09-09 13:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 13:26:47 +0000 UTC FinishedAt: 2026-09-09 13:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 13:26:47 +0000 UTC FinishedAt: 2026-09-09 13:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 13:26:47 +0000 UTC FinishedAt: 2026-09-09 13:29:15 +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:*ed919865-5296-4e66-809d-fa2cb3c1ab4f,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-workflowgv5xl/series-workflowgv5xl-build-action-886967838/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-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"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:*4d3f93c5-e802-4b52-95ab-06d0a0f1d45b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed919865-5296-4e66-809d-fa2cb3c1ab4f,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-workflowgv5xl/series-workflowgv5xl-build-action-1588285297/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-workflowgv5xl/series-workflowgv5xl-build-action-886967838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 13:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 13:29:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"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-workflowgv5xl/series-workflowgv5xl-convert-artifact-3019485167/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 13:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 13:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:29:25 +0000 UTC FinishedAt: 2026-09-09 13:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 13:29:35 +0000 UTC FinishedAt: 2026-09-09 16:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv5xl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_ext_write_extent","hfs_ext_write_extent","hfs_extend_file","hfs_file_truncate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS"],"series_id":"53f2ec72-765e-4a1f-b386-c21cb02b968f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 13:29:35 +0000 UTC FinishedAt: 2026-09-09 16:35:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d3f93c5-e802-4b52-95ab-06d0a0f1d45b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed919865-5296-4e66-809d-fa2cb3c1ab4f,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-workflowgv5xl/series-workflowgv5xl-build-action-1588285297/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-workflowgv5xl/series-workflowgv5xl-build-action-886967838/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-workflowgv5xl/series-workflowgv5xl-convert-artifact-3019485167/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,}