Name: series-workflow24mv7 Phase: Succeeded StartedAt: 2026-09-09 11:11:53 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[0] Phase: Succeeded StartedAt: 2026-09-09 11:11:53 +0000 UTC FinishedAt: 2026-09-09 11:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 11:11:53 +0000 UTC FinishedAt: 2026-09-09 11:14:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "9eca8a55-fa40-4423-bac3-a40747b30820" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_create_inode", "ntfs_create", "ntfs_mknod", "ntfs_symlink", "ntfs_mkdir" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19jcmVhdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7bnRmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7bnRmc19ta25vZCYjMzQ7LAogICAgJiMzNDtudGZzX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7bnRmc19ta2RpciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTlRGUzMgaW5vZGUgY3JlYXRpb24gaW4gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjYWxsIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAgaW5zdGVhZCBvZiBjYWxsaW5nIGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpYCBmb2xsb3dlZCBsYXRlciBieSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGNoYW5nZSBwZXJ0YWlucyBzdHJpY3RseSB0byBWRlMgaW5vZGUgbGlmZWN5Y2xlIHN0YXRlIG1hbmFnZW1lbnQgKGNsZWFyaW5nIGBJX05FV2AgYXRvbWljYWx5IHVwb24gZGVudHJ5IGluc3RhbnRpYXRpb24pIGFuZCBsb2NraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG9wZXJhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGlub2RlIHN0YXRlIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgTE9DS0RFUCwgYW5kIG1lbW9yeSBlcnJvcnMgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBudGZzX2NyZWF0ZV9pbm9kZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGRfaW5zdGFudGlhdGUoKSB0byBkX2luc3RhbnRpYXRlX25ldygpIGFuZCByZW1vdmluZyB1bmxvY2tfbmV3X2lub2RlKCksIHdoaWNoIGFmZmVjdHMgaW5vZGUgc3RhdGUgbWFuYWdlbWVudCBhbmQgZGVudHJ5IGluc3RhbnRpYXRpb24gaW4gdGhlIHJlYWNoYWJsZSBudGZzMyBmaWxlc3lzdGVtLiBGdXp6aW5nIGNhbiBoZWxwIHRlc3QgaW5vZGUgY3JlYXRpb24gYW5kIHVubG9jayBzZW1hbnRpY3MgYWNyb3NzIE5URlMgY3JlYXRpb24gcGF0aHMgKGNyZWF0LCBta25vZCwgc3ltbGluaywgbWtkaXIpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDg4NWNmMjYwMmRiMjk2ZGE3YWY3YTkzNDBkMzU0YTM4OGYyZjIzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmNcbmluZGV4IDU2YjRmNjQ2OWEyODAuLjRhYzI2YzgwYmQzNGYgMTAwNjQ0XG4tLS0gYS9mcy9udGZzMy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbm9kZS5jXG5AQCAtMTg2NiwxMCAmIzQzOzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBvdXQ2O1xuIFxuIFx0Lypcbi1cdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlJiMzOTsgYWZ0ZXIgaW5vZGUtXHUwMDNlaV9vcCBpcyBzZXRcbiYjNDM7XHQgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuIFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cbiBcdCAqL1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbiBcbiBcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbiBcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuQEAgLTE5MTcsOSAmIzQzOzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFmbmQpXG4gXHRcdG5pX3VubG9jayhkaXJfbmkpO1xuIFxuLVx0aWYgKCFlcnIpXG4tXHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2NyZWF0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX21rbm9kJiMzNDssCiAgICAmIzM0O250ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtudGZzX21rZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMToxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2lub2RlLmMgYi9mcy9udGZzMy9pbm9kZS5jCmluZGV4IDU2YjRmNjQ2OWEyODAuLjRhYzI2YzgwYmQzNGYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvaW5vZGUuYwpAQCAtMTg2NiwxMCAmIzQzOzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBvdXQ2OwogCiAJLyoKLQkgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZSYjMzk7IGFmdGVyIGlub2RlLSZndDtpX29wIGlzIHNldAomIzQzOwkgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS0mZ3Q7aV9vcCBpcyBzZXQKIAkgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLgogCSAqLwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiYjNDM7CWRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpOwogCiAJLyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqLwogCWlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktJmd0O2lfY3J0aW1lKTsKQEAgLTE5MTcsOSAmIzQzOzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZm5kKQogCQluaV91bmxvY2soZGlyX25pKTsKIAotCWlmICghZXJyKQotCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKLQogCXJldHVybiBlcnI7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIElub2RlIENyZWF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFuZCwgY3JpdGljYWxseSwgdGhlIGFkamFjZW50IGNvZGUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyBgZnMvbnRmczMvaW5vZGUuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBudGZzX2NyZWF0ZV9pbm9kZWAgZnVuY3Rpb24uCgpJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYXJvdW5kIGlub2RlIGluc3RhbnRpYXRpb24uIFRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtgIGZvciBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7YC4gVGhhdCYjMzk7cyBub3QgYSB0cml2aWFsIHN3aXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmV3IGlub2RlcyBtb3JlIGNhcmVmdWxseSBvciBkaWZmZXJlbnRseS4gSXQmIzM5O3Mgb2Z0ZW4gYSBzaWduYWwgYWJvdXQgaG93IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gYXJlIGhhbmRsZWQuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICghZXJyKSB1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtgIGJsb2NrLiBUaGlzIGlzIGFsc28gaW1wb3J0YW50LiBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSXMgaXQgaW1wbHlpbmcgdGhhdCB0aGUgYGRfaW5zdGFudGlhdGVfbmV3YCBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1bmxvY2s/IE9yIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQsIHBvdGVudGlhbGx5IG1vcmUgZmluZS1ncmFpbmVkLCBsb2NraW5nIG1lY2hhbmlzbT8gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZnMvbnRmczMvaW5vZGUuY2AgYXJvdW5kIGxpbmUgMTg2Ni4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG92ZXJhbGwgZ29hbCBoZXJlLiBJcyB0aGlzIG9wdGltaXphdGlvbj8gQSBidWcgZml4PyBBIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50PyBBIG5ldyBmZWF0dXJlPyBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyBlc3NlbnRpYWwgdG8gdmFsaWRhdGUgYW5kIGNvbnRleHR1YWxpemUgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODUwOlx0XHRcdFx0XHQgICAgTlVMTCk7XG4xODUxOlx0XHRcdGlmIChhdHRyKSB7XG4xODUyOlx0XHRcdFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHRmbiA9IHJlc2lkZW50X2RhdGFfZXgoYXR0ciwgU0laRU9GX0FUVFJJQlVURV9GSUxFTkFNRSk7XG4xODU1Olx0XHRcdFx0aWYgKGZuKVxuMTg1NjpcdFx0XHRcdFx0Zm4tXHUwMDNlZHVwLmV4dGVuZF9kYXRhID0gZm5hbWUtXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xuMTg1NzpcdFx0XHR9XG4xODU4Olx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xuMTg2MTpcdFx0bmktXHUwMDNlbmlfZmxhZ3MgXHUwMDI2PSB+TklfRkxBR19VUERBVEVfUEFSRU5UO1xuMTg2MjpcdFxuMTg2MzpcdFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXG4xODY0Olx0XHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcdTAwMjZkaXJfbmktXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xuMTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbjE5MTA6XHRcdG50ZnNfbWFya19yZWNfZnJlZShzYmksIGlubywgZmFsc2UpO1xuMTkxMTpcdFxuMTkxMjpcdG91dDI6XG4xOTEzOlx0XHRrZnJlZShuZXdfZGUpO1xuMTkxNDpcdFx0a2ZyZWUocnApO1xuMTkxNTpcdFxuMTkxNjpcdG91dDE6XG4xOTE3Olx0XHRpZiAoIWZuZClcbjE5MTg6XHRcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4xOTE5Olx0XG4xOTIwOlx0XHRyZXR1cm4gZXJyO1xuMTkyMTpcdH1cbjE5MjI6XHRcbjE5MjM6XHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbjE5MjQ6XHR7XG4xOTI1Olx0XHRpbnQgZXJyO1xuMTkyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbjE5Mjc6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuMTkyODpcdFx0c3RydWN0IE5URlNfREUgKmRlO1xuMTkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGRlbnRyeSBhbmQgaW5vZGUgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoYXQgaW5zaWRlIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAsIHRoZXJlJiMzOTtzIGEgY2FsbCB0byBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB1bmxvY2sgb3BlcmF0aW9uIGluIHRoaXMgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBgZF9pbnN0YW50aWF0ZV9uZXdgLiBJJiMzOTtsbCBqdW1wIG92ZXIgdG8gZWl0aGVyIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUgb3IgcGVyaGFwcyB0aGUgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGhlYWRlciB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGF0IGB1bmxvY2tfbmV3X2lub2RlYCBjYWxsIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlIHRoZSBgaW5vZGVgIGlzIGluIGF0IHRoYXQgcG9pbnQuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIGdyYXNwIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgc3VidGxldGllcyBhcm91bmQgdGhpcyBkZW50cnktaW5vZGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzLiBJcyB0aGlzIGFuIGF0b21pYyBvcGVyYXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhpcyB1bmxvY2sgaXMgbW92ZWQ/IFRoZSBkZXRhaWxzIHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRfaW5zdGFudGlhdGVfbmV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcbi0tXG5mcy9kY2FjaGUuYy0yMTkxLSAqL1xuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjE5My17XG4tLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD0yNTA9ZXh0ZXJuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yNTItZXh0ZXJuIHZvaWQgX19kX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBkX2luc3RhbnRpYXRlX25ld2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkY2FjaGUgaXMgaGFuZGxpbmcgbmV3IGlub2Rlcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGxpbmtpbmcgYW4gaW5vZGUgdG8gYSBkZW50cnkuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGlub2RlJiMzOTtzIGxpZmVjeWNsZSDigJMgaG93IHRoZSBpbm9kZSYjMzk7cyBhdHRyaWJ1dGVzIGFyZSBzZXQsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgYW5kIHVsdGltYXRlbHksIGhvdyB0aGlzIG5ldyBkZW50cnkgYmVjb21lcyBhIGxlZ2l0aW1hdGUgbWVtYmVyIG9mIHRoZSBkY2FjaGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGxpa2UgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZWR1bmRhbnQgb3BlcmF0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGNhY2hlIGNvaGVyZW5jeSwgY29uc2lkZXJpbmcgSSYjMzk7bGwgbGlrZWx5IG5lZWQgdG8gY29tcGFyZSB0aGlzIGNvZGUgd2l0aCBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBpbiBvdGhlciBmaWxlc3lzdGVtcy4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCByZXZpZXc7IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHN1YnRsZSBidWdzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTkwOlx0ICogdW5sb2NrX25ld19pbm9kZSgpIGNvbWJpbmF0aW9ucy5cbjIxOTE6XHQgKi9cbjIxOTI6XHR2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjE5MzpcdHtcbjIxOTQ6XHRcdEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpO1xuMjE5NTpcdFx0QlVHX09OKCFpbm9kZSk7XG4yMTk2Olx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG4yMTk3Olx0XHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMTk4Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIxOTk6XHRcdHNwaW5fbG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMDpcdFx0X19kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMjAxOlx0XHRzcGluX3VubG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMjpcdFx0V0FSTl9PTighKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX05FVykpO1xuMjIwMzpcdFx0LypcbjIyMDQ6XHRcdCAqIFBhaXJlZCB3aXRoIGlncmFiX2Zyb21faGFzaCgpXG4yMjA1Olx0XHQgKi9cbjIyMDY6XHRcdHNtcF93bWIoKTtcbjIyMDc6XHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX05FVyB8IElfQ1JFQVRJTkcpO1xuMjIwODpcdFx0aW5vZGVfd2FrZV91cF9iaXQoaW5vZGUsIF9fSV9ORVcpO1xuMjIwOTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5vZGUgSW5zdGFudGlhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUgYWJvdXQgYGRfaW5zdGFudGlhdGVfbmV3YC4gSXQgc2VlbXMgbGlrZSAqdGhpcyogZnVuY3Rpb24gaXMgbm93IGhhbmRsaW5nIHVubG9ja2luZyB0aGUgbmV3IGlub2RlLCBzcGVjaWZpY2FsbHkgY2xlYXJpbmcgYElfTkVXYCBhbmQgd2FraW5nIHVwIGFueSB3YWl0aW5nIHByb2Nlc3NlcywgcmlnaHQgd2l0aGluIGl0c2VsZi4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEJlZm9yZSwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIHRoZSBvbGQgYXBwcm9hY2ggd2l0aCBgbnRmc19jcmVhdGVfaW5vZGVgIHdhcyBkaWZmZXJlbnQuIEl0IHdvdWxkIGNhbGwgYGRfaW5zdGFudGlhdGVg4oCUYW5kIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseeKAlGBkX2luc3RhbnRpYXRlYCAqZGlkbiYjMzk7dCogdW5sb2NrIHRoZSBpbm9kZS4gSXQgd2FzIGZvbGxvd2VkIHVwIHdpdGggdGltZXN0YW1wIHVwZGF0ZXMsIG1hcmtpbmcgdGhlIGlub2RlIGRpcnR5LCBhbmQgKnRoZW4qIHRoZSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFNvLCB0aGUgbG9ja2luZy91bmxvY2tpbmcgc3RyYXRlZ3kgc2VlbXMgdG8gaGF2ZSBzaGlmdGVkLgoKVGhpcyBjaGFuZ2UgaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIGZvciBiZXR0ZXIgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyB0byBzdHJlYW1saW5lIHRoZSBjb250cm9sIGZsb3cuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsIGNoYWluIHRvIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHVzYWdlIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19jcmVhdGVfaW5vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYz0xMjk3PW50ZnNfY3JlYXRlX3JlcGFyc2VfYnVmZmVyKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgY29uc3QgY2hhciAqc3ltbmFtZSxcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTEzNzItLypcbmZzL250ZnMzL2lub2RlLmM6MTM3MzogKiBudGZzX2NyZWF0ZV9pbm9kZVxuZnMvbnRmczMvaW5vZGUuYy0xMzc0LSAqXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzgzLSAqL1xuZnMvbnRmczMvaW5vZGUuYzoxMzg0OmludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcbi0tXG5mcy9udGZzMy9uYW1laS5jPTExND1zdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTExNi17XG5mcy9udGZzMy9uYW1laS5jOjExNzpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXHRcdFx0XHQgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTEyNi17XG5mcy9udGZzMy9uYW1laS5jOjEyNzpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIG1vZGUsIHJkZXYsIE5VTEwsIDAsXG5mcy9udGZzMy9uYW1laS5jLTEyOC1cdFx0XHRcdCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTIxMj1zdGF0aWMgaW50IG50ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0yMjMtXG5mcy9udGZzMy9uYW1laS5jOjIyNDpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmczMvbmFtZWkuYy0yMjUtXHRcdFx0XHQgc3ltbmFtZSwgc2l6ZSwgTlVMTCk7XG4tLVxuZnMvbnRmczMvbmFtZWkuYz0yMzE9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcbmZzL250ZnMzL25hbWVpLmM6MjM0Olx0cmV0dXJuIEVSUl9QVFIobnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXHRcdFx0XHRcdCBtb2RlLCAwLCBOVUxMLCAwLCBOVUxMKSk7XG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTgwNT1pbnQgaW5vZGVfcmVhZF9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmRhdGEsIHNpemVfdCBieXRlcyk7XG5mcy9udGZzMy9udGZzX2ZzLmg6ODA2OmludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBjcHVfc3RyICp1bmksXG4tLVxuZnMvbnRmczMveGF0dHIuYz02ODA9aW50IG50ZnNfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXG5mcy9udGZzMy94YXR0ci5jOjY4OTogKiBDYWxsZWQgZnJvbSBudGZzX2NyZWF0ZV9pbm9kZSgpLlxuZnMvbnRmczMveGF0dHIuYy02OTAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIE5URlMzIGFuZCBTeXprYWxsZXImIzM5O3MgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudGZzM2AgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIExpbnV4IGxhbmRzY2FwZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgaXMgYSAqcmVhY2hhYmxlKiBmaWxlc3lzdGVtLCBtZWFuaW5nIGl0JiMzOTtzIGVuYWJsZWQgdmlhIGBDT05GSUdfTlRGUzNfRlNgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgY29uY2VybiBub3cgaXMgaG93IFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBlbmdhZ2VzIHdpdGggaXQuCgpJIGtub3cgU3l6a2FsbGVyIGhhcyBhIGZldyBwcmltYXJ5IG1ldGhvZHMgZm9yIGF0dGFja2luZyBmaWxlc3lzdGVtcy4gSXQgY2FuIG1vdW50IGltYWdlcyBkaXJlY3RseSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBwb3NzaWJsZS4gSXQgY2FuIHVzZSBsb29wYmFjayBkZXZpY2VzIGNvdXBsZWQgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgKGludGVybmFsLCBlbXVsYXRlZCBzeXN0ZW0gY2FsbHMpIHRoYXQgYXJlIHNwZWNpYWxseSBidWlsdCBmb3IgaXQuIExhc3RseSwgaXQgY2FuIHJlbHkgb24gbW9yZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHN5c2NhbGxzLCB5b3VyIGJyZWFkLWFuZC1idXR0ZXIgb25lczogYG1rbm9kYCwgYG1rZGlyYCwgYG9wZW5gLCBgY3JlYXRgLCBgc3ltbGlua2AsIGV0Yy4gVGhlc2UgZm9ybSB0aGUgYnVpbGRpbmcgYmxvY2tzLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTlRGUzMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHdpbGwgbGV0IG1lIGtub3cgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgaG93IFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSBmaWxlc3lzdGVtLCBhbmQgaXRzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTM19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzMy9LY29uZmlnOjI6Y29uZmlnIE5URlMzX0ZTXG5mcy9udGZzMy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIFJlYWQtV3JpdGUgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMzL0tjb25maWc9Mjg9Y29uZmlnIE5URlMzX0xaWF9YUFJFU1Ncbi0tXG5mcy9udGZzMy9LY29uZmlnLTM3LVxuZnMvbnRmczMvS2NvbmZpZzozODpjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXG5mcy9udGZzMy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBOVEZTMyBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgZnMvbnRmczNgIG1vZHVsZS4gVGhlIG1vc3QgZGlyZWN0IGFuZCByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcywgaW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZnMvbnRmczNgIGRpcmVjdG9yeSBpdHNlbGYuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkLiBCeSBhbmFseXppbmcgdGhlIGNvbnRlbnRzIG9mIGBmcy9udGZzMy9LY29uZmlnYCwgSSBjYW4gcXVpY2tseSBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgbW9kdWxlcywgb3Igb3B0aW9ucyB0aGF0IGBudGZzM2AgcmVsaWVzIG9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgZmlsZXN5c3RlbSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGUzNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O05URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uICFOVEZTX0ZTIHx8IG1cbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgV2luZG93cyBPUyBuYXRpdmUgZmlsZSBzeXN0ZW0gKE5URlMpIHN1cHBvcnQgdXAgdG8gTlRGUyB2ZXJzaW9uIDMuMS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgWSBvciBNIGVuYWJsZXMgdGhlIE5URlMzIGRyaXZlciB3aXRoIGZ1bGwgZmVhdHVyZXMgZW5hYmxlZCAocmVhZCxcbiAgMTI6XHRcdCAgd3JpdGUsIGpvdXJuYWwgcmVwbGF5aW5nLCBzcGFyc2UvY29tcHJlc3NlZCBmaWxlcyBzdXBwb3J0KS5cbiAgMTM6XHRcdCAgRmlsZSBzeXN0ZW0gdHlwZSB0byB1c2Ugb24gbW91bnQgaXMgXCYjMzQ7bnRmczNcJiMzNDsuIE1vZHVsZSBuYW1lIChNIG9wdGlvbilcbiAgMTQ6XHRcdCAgaXMgYWxzbyBcJiMzNDtudGZzM1wmIzM0Oy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbjogXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMzLnJzdFx1MDAzZVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBOVEZTM182NEJJVF9DTFVTVEVSXG4gIDE5Olx0XHRib29sIFwmIzM0OzY0IGJpdHMgcGVyIE5URlMgY2x1c3RlcnNcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTlRGUzNfRlMgXHUwMDI2XHUwMDI2IDY0QklUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgbnRmcy5zeXMgdXNlcyAzMiBiaXRzIHBlciBjbHVzdGVycy5cbiAgMjM6XHRcdCAgSWYgYWN0aXZhdGVkIDY0IGJpdHMgcGVyIGNsdXN0ZXJzIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIDRrIGNsdXN0ZXJcbiAgMjQ6XHRcdCAgZm9yIDE2VCYjNDM7IHZvbHVtZXMuIFdpbmRvd3Mgd2lsbCBub3QgYmUgYWJsZSB0byBtb3VudCBzdWNoIHZvbHVtZXMuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBOIGhlcmUuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5URlMzX0xaWF9YUFJFU1NcbiAgMjk6XHRcdGJvb2wgXCYjMzQ7YWN0aXZhdGUgc3VwcG9ydCBvZiBleHRlcm5hbCBjb21wcmVzc2lvbnMgbHp4L3hwcmVzc1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBJbiBXaW5kb3dzIDEwIG9uZSBjYW4gdXNlIGNvbW1hbmQgXCYjMzQ7Y29tcGFjdFwmIzM0OyB0byBjb21wcmVzcyBhbnkgZmlsZXMuXG4gIDMzOlx0XHQgIDQgcG9zc2libGUgdmFyaWFudHMgb2YgY29tcHJlc3Npb24gYXJlOiB4cHJlc3M0aywgeHByZXNzOGssIHhwcmVzczE2ayBhbmQgbHp4LlxuICAzNDpcdFx0ICBJZiBhY3RpdmF0ZWQgeW91IHdpbGwgYmUgYWJsZSB0byByZWFkIHN1Y2ggZmlsZXMgY29ycmVjdGx5LlxuICAzNTpcdFxuICAzNjpcdFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xuICA0MTpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDQ6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUsXG4gIDQ1Olx0XHQgIGFuZCB0aGlzIG9wdGlvbiBzZWxlY3RzIHN1cHBvcnQgZm9yIEFDTHMgc3BlY2lmaWNhbGx5IGZvciBudGZzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIEFuYWx5c2lzIGFuZCBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgd2UgbmVlZCB0byBhc3Nlc3MgdGhlIHRyaWFnZSBjcml0ZXJpYS4gSXMgdGhpcyBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgdG8/IFllcCwgYG50ZnMzYCBpcyBhIGxlZ2l0IGZpbGUgc3lzdGVtIGluIExpbnV4LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gYG50ZnNfY3JlYXRlX2lub2RlYCBpcyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgLiBDaGVjay4KCk5leHQsIGRvZXMgdGhpcyBwb3RlbnRpYWxseSBtZXNzIHdpdGggZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gTG9va3MgbGlrZSBpdCBkb2VzOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2luZyBgZF9pbnN0YW50aWF0ZWAgdG8gYGRfaW5zdGFudGlhdGVfbmV3YCBhbmQgcmVtb3ZpbmcgdGhhdCBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSAmIzM0O3llcy4mIzM0OwoKTm93LCBpcyB0aGlzIHdvcnRoIG91ciB0aW1lIGFuZCBlZmZvcnQgdG8gZnV6ej8gQWJzb2x1dGVseS4gRmlsZSBzeXN0ZW0gaW5vZGUgY3JlYXRpb24sIGNvbWJpbmVkIHdpdGggY29uY3VycmVuY3kgYW5kIHN0YXRlIHRyYW5zaXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIElfTkVXIGhhbmRsaW5nLCBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHN5emthbGxlci4gQ3JpdGljYWwgcGF0aCwgZnV6emFibGUsIGRlZmluaXRlbHkgYSBnby4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBvdXIga2V5IGBGb2N1c1N5bWJvbHNgIGFyZS4gRGVmaW5pdGVseSBgbnRmc19jcmVhdGVfaW5vZGVgLCBhbmQgc2luY2UgdGhhdCYjMzk7cyB0aGUgY29yZSwgdGhlIGNhbGxlcnMgYXJlIGFsc28gY3J1Y2lhbDogYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtub2RgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rZGlyYCBuZWVkIHRvIGJlIGluIHRoZSBjcm9zc2hhaXJzLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiBhbnl0aGluZyBlbHNlIGluIGBudGZzM2AgY2FsbHMgYG50ZnNfY3JlYXRlX2lub2RlYC4gSSB0aGluayBJIHNhdyBzb21ldGhpbmcgYWJvdXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBmcy9udGZzMy9uYW1laS5jYC4gV29ydGggYSBxdWljayBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2NyZWF0ZV9pbm9kZXxudGZzX2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzcyLS8qXG5mcy9udGZzMy9pbm9kZS5jOjEzNzM6ICogbnRmc19jcmVhdGVfaW5vZGVcbmZzL250ZnMzL2lub2RlLmMtMTM3NC0gKlxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTM3OS0gKiAtIG50ZnNfbWtkaXJcbmZzL250ZnMzL2lub2RlLmM6MTM4MDogKiAtIG50ZnNfYXRvbWljX29wZW5cbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxuZnMvbnRmczMvaW5vZGUuYzoxMzgyOiAqIE5PVEU6IGlmIGZuZCAhPSBOVUxMIChudGZzX2F0b21pY19vcGVuKSB0aGVuIEBkaXIgaXMgbG9ja2VkXG5mcy9udGZzMy9pbm9kZS5jLTEzODMtICovXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMzL2lub2RlLmMtMTM4NS1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxuLS1cbmZzL250ZnMzL25hbWVpLmM9MTE0PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMTE2LXtcbmZzL250ZnMzL25hbWVpLmM6MTE3Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXG5mcy9udGZzMy9uYW1laS5jLTExOC1cdFx0XHRcdCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTEyND1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcbmZzL250ZnMzL25hbWVpLmM6MTI3Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgbW9kZSwgcmRldiwgTlVMTCwgMCxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVx0XHRcdFx0IE5VTEwpO1xuLS1cbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTIyMy1cbmZzL250ZnMzL25hbWVpLmM6MjI0Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRkxOSyB8IDA3NzcsIDAsXG5mcy9udGZzMy9uYW1laS5jLTIyNS1cdFx0XHRcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTIzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0yMzMte1xuZnMvbnRmczMvbmFtZWkuYzoyMzQ6XHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXG5mcy9udGZzMy9uYW1laS5jLTIzNS1cdFx0XHRcdFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9ODA1PWludCBpbm9kZV9yZWFkX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGJ5dGVzKTtcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMzL250ZnNfZnMuaC04MDctXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcbi0tXG5mcy9udGZzMy94YXR0ci5jPTY4MD1pbnQgbnRmc19zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbnRmczMveGF0dHIuYy02ODgtICpcbmZzL250ZnMzL3hhdHRyLmM6Njg5OiAqIENhbGxlZCBmcm9tIG50ZnNfY3JlYXRlX2lub2RlKCkuXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBOVEZTIEF0b21pYyBPcGVuKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhdG9taWMgb3BlbnMgYXJlIGhhbmRsZWQgaW4gTlRGUy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBudGZzX2F0b21pY19vcGVuYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvbnRmczMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIG5hbWVpIG9wZXJhdGlvbnMgaXMsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBob3cgZmlsZXMgYXJlIGNyZWF0ZWQgb3Igb3BlbmVkIHNhZmVseSBpbiBOVEZTLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGF0b21pYyBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG5hbWVpLmNgIGZpbGUgYmVjYXVzZSBpdCBnZW5lcmFsbHkgaGFuZGxlcyBuYW1lIGxvb2t1cHMsIHBhdGggdHJhdmVyc2FsLCBhbmQgdGhlIHVsdGltYXRlIGFzc29jaWF0aW9uIG9mIGEgZmlsZSBuYW1lIHdpdGggaXRzIHVuZGVybHlpbmcgaW5vZGUuIEkgd2FudCB0byBzZWUgaG93IE5URlMgZ3VhcmFudGVlcyBlaXRoZXIgY29tcGxldGUgc3VjY2VzcyBvciBjb21wbGV0ZSBmYWlsdXJlIGR1cmluZyB0aGUgb3BlbiBwcm9jZXNzLCBtaW5pbWl6aW5nIGRhdGEgY29ycnVwdGlvbiByaXNrcywgcGFydGljdWxhcmx5IGluIHRoZSBldmVudCBvZiBhIHN5c3RlbSBjcmFzaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkgYWJvdXQgaGFuZGxpbmcgdGhhdCBjcml0aWNhbCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzc5LSAqIC0gbnRmc19ta2RpclxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxuZnMvbnRmczMvaW5vZGUuYy0xMzgxLSAqXG5mcy9udGZzMy9pbm9kZS5jOjEzODI6ICogTk9URTogaWYgZm5kICE9IE5VTEwgKG50ZnNfYXRvbWljX29wZW4pIHRoZW4gQGRpciBpcyBsb2NrZWRcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWJ1Z2dpbmcgYW4gTlRGUyBBdG9taWMgT3BlbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGJlaGF2aW5nLiAgVGhlIGNvZGUgaXRzZWxmIGlzIGxpa2VseSBpbiBgZnMvbnRmczMvbmFtZWkuY2AsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gIFNpbmNlIGl0JiMzOTtzIGFuIGF0b21pYyBvcGVuLCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbnRmc19kaXJfaW5vZGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlIGRlZmluZWQgaW4gdGhlIHNhbWUgZmlsZSAoYG5hbWVpLmNgKS4gSSYjMzk7bGwgcHJvYmFibHkgZmluZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvciB0aGVyZSwgbGlrZWx5IGluIGhvdyB0aGUgZGlyZWN0b3J5IGVudHJ5IGlzIGxvb2tlZCB1cCBvciBjcmVhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYz0yOT1zdGF0aWMgaW50IG50ZnNfcmVhZF9tZnQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKm5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy00NTgtXHRcdCAqL1xuZnMvbnRmczMvaW5vZGUuYzo0NTk6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvbnRmczMvaW5vZGUuYy00NjAtXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2bnRmc19kaXJfb3BlcmF0aW9ucztcbi0tXG5mcy9udGZzMy9pbm9kZS5jPTEzODQ9aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTE4MDMtXHRpZiAoU19JU0RJUihtb2RlKSkge1xuZnMvbnRmczMvaW5vZGUuYzoxODA0Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbmZzL250ZnMzL2lub2RlLmMtMTgwNS1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZudGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL250ZnMzL25hbWVpLmM9NDYyPXN0YXRpYyBpbnQgbnRmc19kX2NvbXBhcmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgbGVuMSxcbi0tXG5mcy9udGZzMy9uYW1laS5jLTUyOC0vLyBjbGFuZy1mb3JtYXQgb2ZmXG5mcy9udGZzMy9uYW1laS5jOjUyOTpjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvbnRmczMvbmFtZWkuYy01MzAtXHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTgyMj1zdHJ1Y3QgZGVudHJ5ICpudGZzM19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKTtcbmZzL250ZnMzL250ZnNfZnMuaC04MjMtXG5mcy9udGZzMy9udGZzX2ZzLmg6ODI0OmV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvbnRmczMvbnRmc19mcy5oLTgyNS1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBOYW1lIFJlc29sdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBuYW1lIHJlc29sdXRpb24gaW4gTlRGUywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGBmcy9udGZzM2Agc3Vic3lzdGVtLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGUgYG5hbWVpLmNgIGZpbGUgaXMgdXN1YWxseSB0aGUgZ28tdG8gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmFtZS10by1pbm9kZSBsb29rdXBzIGFuZCBwYXRoIHRyYXZlcnNhbCB3aXRoaW4gYSBmaWxlc3lzdGVtLiBOb3csIGxldCYjMzk7cyBzZWUsIGxpbmVzIDUyMC01NDAuLi4gdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSYjMzk7bSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCwgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHRyZXQgPSAhbnRmc19jbXBfbmFtZXNfY3B1KHVuaTEsIHVuaTIsIHNiaS1cdTAwM2V1cGNhc2UsIGZhbHNlKSA/IDAgOiAxO1xuIDUyMjpcdFxuIDUyMzpcdG91dDpcbiA1MjQ6XHRcdGtmcmVlKHVuaTEpO1xuIDUyNTpcdFx0cmV0dXJuIHJldDtcbiA1MjY6XHR9XG4gNTI3Olx0XG4gNTI4Olx0Ly8gY2xhbmctZm9ybWF0IG9mZlxuIDUyOTpcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gNTMwOlx0XHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXG4gNTMxOlx0XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG4gNTMyOlx0XHQubGlua1x0XHQ9IG50ZnNfbGluayxcbiA1MzM6XHRcdC51bmxpbmtcdFx0PSBudGZzX3VubGluayxcbiA1MzQ6XHRcdC5zeW1saW5rXHQ9IG50ZnNfc3ltbGluayxcbiA1MzU6XHRcdC5ta2Rpclx0XHQ9IG50ZnNfbWtkaXIsXG4gNTM2Olx0XHQucm1kaXJcdFx0PSBudGZzX3JtZGlyLFxuIDUzNzpcdFx0Lm1rbm9kXHRcdD0gbnRmc19ta25vZCxcbiA1Mzg6XHRcdC5yZW5hbWVcdFx0PSBudGZzX3JlbmFtZSxcbiA1Mzk6XHRcdC5nZXRfYWNsXHQ9IG50ZnNfZ2V0X2FjbCxcbiA1NDA6XHRcdC5zZXRfYWNsXHQ9IG50ZnNfc2V0X2FjbCxcbiA1NDE6XHRcdC5zZXRhdHRyXHQ9IG50ZnNfc2V0YXR0cixcbiA1NDI6XHRcdC5nZXRhdHRyXHQ9IG50ZnNfZ2V0YXR0cixcbiA1NDM6XHRcdC5saXN0eGF0dHJcdD0gbnRmc19saXN0eGF0dHIsXG4gNTQ0Olx0XHQuZmllbWFwXHRcdD0gbnRmc19maWVtYXAsXG4gNTQ1Olx0XHQuZmlsZWF0dHJfZ2V0XHQ9IG50ZnNfZmlsZWF0dHJfZ2V0LFxuIDU0NjpcdFx0LmZpbGVhdHRyX3NldFx0PSBudGZzX2ZpbGVhdHRyX3NldCxcbiA1NDc6XHR9O1xuIDU0ODpcdFxuIDU0OTpcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMwOQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IE5URlMgRmlsZSBDcmVhdGlvbiBPcGVyYXRpb25zKioKCk9rYXksIHRoaXMgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgTlRGUyBmaWxlIGNyZWF0aW9uIG9wZXJhdGlvbnM6IGBudGZzX2NyZWF0ZV9pbm9kZWAsIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rbm9kYCwgYG50ZnNfc3ltbGlua2AsIGFuZCBgbnRmc19ta2RpcmAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhlc2UgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEZ1cnRoZXJtb3JlLCBgTlRGUzNfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBzZXR1cC4gTm90aGluZyBjb21wbGV4IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHVwIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTM19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfY3JlYXRlX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O250ZnNfbWtub2QmIzM0OywKICAgICYjMzQ7bnRmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O250ZnNfbWtkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2NyZWF0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX21rbm9kJiMzNDssCiAgICAmIzM0O250ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtudGZzX21rZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4ODVjZjI2MDJkYjI5NmRhN2FmN2E5MzQwZDM1NGEzODhmMmYyMzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmMKaW5kZXggNTZiNGY2NDY5YTI4MC4uNGFjMjZjODBiZDM0ZiAxMDA2NDQKLS0tIGEvZnMvbnRmczMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbm9kZS5jCkBAIC0xODY2LDEwICYjNDM7MTg2NiwxMCBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIG91dDY7CiAKIAkvKgotCSAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlJiMzOTsgYWZ0ZXIgaW5vZGUtJmd0O2lfb3AgaXMgc2V0CiYjNDM7CSAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLSZndDtpX29wIGlzIHNldAogCSAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uCiAJICovCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKJiM0MzsJZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7CiAKIAkvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovCiAJaW5vZGVfc2V0X2F0aW1lX3RvX3RzKGlub2RlLCBuaS0mZ3Q7aV9jcnRpbWUpOwpAQCAtMTkxNyw5ICYjNDM7MTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFmbmQpCiAJCW5pX3VubG9jayhkaXJfbmkpOwogCi0JaWYgKCFlcnIpCi0JCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEZTMyBJbm9kZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBmcy9udGZzMy9pbm9kZS5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBpbm9kZXMgaW4gdGhlIE5URlMzIGZpbGVzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBvciB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYG50ZnNfY3JlYXRlX2lub2RlYC4gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBteSBiZXN0IGJldCB0byBxdWlja2x5IGdldCB0byB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNyZWF0aW5nIHRoZSBpbm9kZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODUwOlx0XHRcdFx0XHQgICAgTlVMTCk7XG4xODUxOlx0XHRcdGlmIChhdHRyKSB7XG4xODUyOlx0XHRcdFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHRmbiA9IHJlc2lkZW50X2RhdGFfZXgoYXR0ciwgU0laRU9GX0FUVFJJQlVURV9GSUxFTkFNRSk7XG4xODU1Olx0XHRcdFx0aWYgKGZuKVxuMTg1NjpcdFx0XHRcdFx0Zm4tXHUwMDNlZHVwLmV4dGVuZF9kYXRhID0gZm5hbWUtXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xuMTg1NzpcdFx0XHR9XG4xODU4Olx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xuMTg2MTpcdFx0bmktXHUwMDNlbmlfZmxhZ3MgXHUwMDI2PSB+TklfRkxBR19VUERBVEVfUEFSRU5UO1xuMTg2MjpcdFxuMTg2MzpcdFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXG4xODY0Olx0XHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcdTAwMjZkaXJfbmktXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xuMTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbjE5MTA6XHRcdG50ZnNfbWFya19yZWNfZnJlZShzYmksIGlubywgZmFsc2UpO1xuMTkxMTpcdFxuMTkxMjpcdG91dDI6XG4xOTEzOlx0XHRrZnJlZShuZXdfZGUpO1xuMTkxNDpcdFx0a2ZyZWUocnApO1xuMTkxNTpcdFxuMTkxNjpcdG91dDE6XG4xOTE3Olx0XHRpZiAoIWZuZClcbjE5MTg6XHRcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4xOTE5Olx0XG4xOTIwOlx0XHRyZXR1cm4gZXJyO1xuMTkyMTpcdH1cbjE5MjI6XHRcbjE5MjM6XHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbjE5MjQ6XHR7XG4xOTI1Olx0XHRpbnQgZXJyO1xuMTkyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbjE5Mjc6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuMTkyODpcdFx0c3RydWN0IE5URlNfREUgKmRlO1xuMTkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipBbmFseXppbmcgYGRfaW5zdGFudGlhdGVfbmV3YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dC4gSXQgbG9va3MgbGlrZSBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGlzIG91ciB0YXJnZXQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgd29ya3MuIEkgc2VlIGl0IHN0YXJ0cyB3aXRoIGEgYFdBUk5fT05gIGNoZWNrLCBlbnN1cmluZyB0aGUgYGlub2RlYCBpcyBpbiBhIG5ldyBzdGF0ZSB1c2luZyB0aGUgYElfTkVXYCBmbGFnLiBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBjaGVjayBpbW1lZGlhdGVseSBzdWdnZXN0cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHNlcXVlbmNpbmcgaXNzdWVzIGlmIHRoZSBgaW5vZGVgIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCwgd2hpY2ggaXMgY3JpdGljYWw7IGlmIHRoZSBpbm9kZSB3YXNuJiMzOTt0IHByb3Blcmx5IGxvY2tlZCwgb3IgaWYgdGhpcyBjYWxsIGdldHMgbWlzc2VkLCBpdCB3aWxsIGNhdXNlIHJlYWwgaXNzdWVzLiBBZnRlciB0aGF0LCB3ZSYjMzk7cmUgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgd29yayBsaWtlbHkgaGFwcGVucyDigJMgYXNzb2NpYXRpbmcgdGhlIGBpbm9kZWAgd2l0aCB0aGUgYGRlbnRyeWAsIGVmZmVjdGl2ZWx5ICYjMzQ7aW5zdGFudGlhdGluZyYjMzQ7IHRoZSBuZXcgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSB0cmVlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHdhcm5pbmcgbWFrZXMgbWUgY3VyaW91cyBhYm91dCB0aGUgc2NlbmFyaW9zIHRoYXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlOyBJIHdpbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGRfaW5zdGFudGlhdGVfbmV3YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24sIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSByZXN0IG9mIHRoZSBmaWxlc3lzdGVtLiBJIHdpbGwgbG9vayB0aGVyZSBmb3IgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkX2luc3RhbnRpYXRlX25ldyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTExOTQ9YmUgcmV0dXJuZWQuICBBbnkgZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkIHdpdGggRVJSX1BUUigpLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk1LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTk2OkluIGdlbmVyYWwsIGZpbGVzeXN0ZW1zIHdoaWNoIHVzZSBkX2luc3RhbnRpYXRlX25ldygpIHRvIGluc3RhbGwgdGhlIG5ld1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk3LWlub2RlIGNhbiBzYWZlbHkgcmV0dXJuIE5VTEwuICBGaWxlc3lzdGVtcyB3aGljaCBtYXkgbm90IGhhdmUgYW4gSV9ORVcgaW5vZGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9NDUxPW90aGVyd2lzZSBub3RlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkxLVx0dG8gc3VwcG9ydCBjcmVhdGluZyBzdWJkaXJlY3Rvcmllcy4gIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG9cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDo0OTI6XHRjYWxsIGRfaW5zdGFudGlhdGVfbmV3KCkganVzdCBhcyB5b3Ugd291bGQgaW4gdGhlIGNyZWF0ZSgpIG1ldGhvZC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC00OTMtXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6NDk0Olx0SWYgZF9pbnN0YW50aWF0ZV9uZXcoKSBpcyBub3QgdXNlZCBhbmQgaWYgdGhlIGZoX3RvX2RlbnRyeSgpXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDk1LVx0ZXhwb3J0IG9wZXJhdGlvbiBpcyBwcm92aWRlZCwgb3IgaWYgdGhlIHN0b3JhZ2UgbWlnaHQgYmVcbi0tXG5mcy9idHJmcy9pbm9kZS5jPTY5Njk9c3RhdGljIGludCBidHJmc19jcmVhdGVfY29tbW9uKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvYnRyZnMvaW5vZGUuYy02OTk2LVx0XHRcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfRkFTVFBFUk1fTUFZX0VYRUM7XG5mcy9idHJmcy9pbm9kZS5jOjY5OTc6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvYnRyZnMvaW5vZGUuYy02OTk4LVx0fVxuLS1cbmZzL2J0cmZzL2lub2RlLmM9OTAyOT1zdGF0aWMgaW50IGJ0cmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2J0cmZzL2lub2RlLmMtOTEyMC1cbmZzL2J0cmZzL2lub2RlLmM6OTEyMTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvYnRyZnMvaW5vZGUuYy05MTIyLVx0cmV0ID0gMDtcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTU1Mj1zdGF0aWMgbm9pbmxpbmUgaW50IGNyZWF0ZV9zdWJ2b2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy03MzQtXHRzZXRfYml0KEJUUkZTX1JPT1RfT1JQSEFOX0NMRUFOVVAsIFx1MDAyNm5ld19yb290LVx1MDAzZXN0YXRlKTtcbmZzL2J0cmZzL2lvY3RsLmM6NzM1Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBuZXdfaW5vZGVfYXJncy5pbm9kZSk7XG5mcy9idHJmcy9pb2N0bC5jLTczNi1cdG5ld19pbm9kZV9hcmdzLmlub2RlID0gTlVMTDtcbi0tXG5mcy9idHJmcy94YXR0ci5jPTIxND1pbnQgYnRyZnNfc2V0eGF0dHJfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9idHJmcy94YXR0ci5jLTIzMi1cdFx0ICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gc21hY2sgaXMgZW5hYmxlZCBhbmQgYSBkaXJlY3RvcnkgaXMgYmVpbmdcbmZzL2J0cmZzL3hhdHRyLmM6MjMzOlx0XHQgKiBjcmVhdGVkLiBJdCBoYXBwZW5zIHRocm91Z2ggZF9pbnN0YW50aWF0ZV9uZXcoKSwgd2hpY2ggY2FsbHNcbmZzL2J0cmZzL3hhdHRyLmMtMjM0LVx0XHQgKiBzbWFja19kX2luc3RhbnRpYXRlKCksIHdoaWNoIGluIHR1cm4gY2FsbHMgX192ZnNfc2V0eGF0dHIoKSB0b1xuLS1cbmZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcbi0tXG5mcy9kY2FjaGUuYy0yMTkxLSAqL1xuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjE5My17XG4tLVxuZnMvZGNhY2hlLmMtMjIxMC19XG5mcy9kY2FjaGUuYzoyMjExOkVYUE9SVF9TWU1CT0woZF9pbnN0YW50aWF0ZV9uZXcpO1xuZnMvZGNhY2hlLmMtMjIxMi1cbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jPTI2OT1lY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTItXHR9XG5mcy9lY3J5cHRmcy9pbm9kZS5jOjI5MzpcdGRfaW5zdGFudGlhdGVfbmV3KGVjcnlwdGZzX2RlbnRyeSwgZWNyeXB0ZnNfaW5vZGUpO1xuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTQtb3V0OlxuLS1cbmZzL2V4dDIvbmFtZWkuYz0zOD1zdGF0aWMgaW5saW5lIGludCBleHQyX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDIvbmFtZWkuYy00MS1cdGlmICghZXJyKSB7XG5mcy9leHQyL25hbWVpLmM6NDI6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZXh0Mi9uYW1laS5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQyL25hbWVpLmM9MjI2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCxcbi0tXG5mcy9leHQyL25hbWVpLmMtMjU3LVxuZnMvZXh0Mi9uYW1laS5jOjI1ODpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZXh0Mi9uYW1laS5jLTI1OS1vdXQ6XG4tLVxuZnMvZXh0NC9uYW1laS5jPTI3ODY9c3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjc5NS1cdFx0XHRleHQ0X2hhbmRsZV9zeW5jKGhhbmRsZSk7XG5mcy9leHQ0L25hbWVpLmM6Mjc5NjpcdFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9leHQ0L25hbWVpLmMtMjc5Ny1cdFx0Kmlub2RlcCA9IE5VTEw7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTI5OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMDQ3LVx0XHRnb3RvIG91dF9jbGVhcl9pbm9kZTtcbmZzL2V4dDQvbmFtZWkuYzozMDQ4Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9leHQ0L25hbWVpLmMtMzA0OS1cdGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZSwgZGVudHJ5KTtcbi0tXG5mcy9mMmZzL25hbWVpLmM9MzY4PXN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy00MDItXG5mcy9mMmZzL25hbWVpLmM6NDAzOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNDA0LVxuLS1cbmZzL2YyZnMvbmFtZWkuYz02NjU9c3RhdGljIGludCBmMmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy03MTctXG5mcy9mMmZzL25hbWVpLmM6NzE4Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNzE5LVxuLS1cbmZzL2YyZnMvbmFtZWkuYy03NDMtXHRcdC8qIEdpdmUgdXAgYW5kIGxlYXZlIGEgYnJva2VuIHN5bWxpbmsuICovXG5mcy9mMmZzL25hbWVpLmM6NzQ0Olx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL2YyZnMvbmFtZWkuYy03NDUtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2YyZnMvbmFtZWkuYz03NTQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmYyZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy03ODYtXG5mcy9mMmZzL25hbWVpLmM6Nzg3Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNzg4LVxuLS1cbmZzL2YyZnMvbmFtZWkuYz04MTM9c3RhdGljIGludCBmMmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9mMmZzL25hbWVpLmMtODQ0LVxuZnMvZjJmcy9uYW1laS5jOjg0NTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZjJmcy9uYW1laS5jLTg0Ni1cbi0tXG5mcy9nZnMyL2lub2RlLmM9NzAwPXN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9nZnMyL2lub2RlLmMtOTAxLVx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG5mcy9nZnMyL2lub2RlLmM6OTAyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9nZnMyL2lub2RlLmMtOTAzLVx0LyogQWZ0ZXIgaW5zdGFudGlhdGUsIGVycm9ycyBzaG91bGQgcmVzdWx0IGluIGV2aWN0IHdoaWNoIHdpbGwgZGVzdHJveVxuLS1cbmZzL2pmZnMyL2Rpci5jPTE2NT1zdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcbi0tXG5mcy9qZmZzMi9kaXIuYy0yMTctXG5mcy9qZmZzMi9kaXIuYzoyMTg6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL2pmZnMyL2Rpci5jLTIxOS1cdHJldHVybiAwO1xuLS1cbmZzL2pmZnMyL2Rpci5jPTI4Nz1zdGF0aWMgaW50IGpmZnMyX3N5bWxpbmsgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxuLS1cbmZzL2pmZnMyL2Rpci5jLTQ0MS1cbmZzL2pmZnMyL2Rpci5jOjQ0MjpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvamZmczIvZGlyLmMtNDQzLVx0cmV0dXJuIDA7XG4tLVxuZnMvamZmczIvZGlyLmM9NDUxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9ta2RpciAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tLVxuZnMvamZmczIvZGlyLmMtNTg1LVxuZnMvamZmczIvZGlyLmM6NTg2Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9qZmZzMi9kaXIuYy01ODctXHRyZXR1cm4gTlVMTDtcbi0tXG5mcy9qZmZzMi9kaXIuYz02MjM9c3RhdGljIGludCBqZmZzMl9ta25vZCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tLVxuZnMvamZmczIvZGlyLmMtNzYzLVxuZnMvamZmczIvZGlyLmM6NzY0Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9qZmZzMi9kaXIuYy03NjUtXHRyZXR1cm4gMDtcbi0tXG5mcy9qZnMvbmFtZWkuYz02Mz1zdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxuLS1cbmZzL2pmcy9uYW1laS5jLTE2Ny1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxNjg6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xuZnMvamZzL25hbWVpLmMtMTY5LVx0fVxuLS1cbmZzL2pmcy9uYW1laS5jPTE5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcbi0tXG5mcy9qZnMvbmFtZWkuYy0zMDEtXHR9IGVsc2Uge1xuZnMvamZzL25hbWVpLmM6MzAyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTMwMy1cdH1cbi0tXG5mcy9qZnMvbmFtZWkuYz04Nzk9c3RhdGljIGludCBqZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXAsXG4tLVxuZnMvamZzL25hbWVpLmMtMTA1MS1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxMDUyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTEwNTMtXHR9XG4tLVxuZnMvamZzL25hbWVpLmM9MTM1OD1zdGF0aWMgaW50IGpmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvamZzL25hbWVpLmMtMTQ0MC1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxNDQxOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTE0NDItXHR9XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9MzU9c3RhdGljIGlubGluZSBpbnQgbmlsZnNfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmlsZnMyL25hbWVpLmMtMzktXHRpZiAoIWVycikge1xuZnMvbmlsZnMyL25hbWVpLmM6NDA6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmMtNDEtXHRcdHJldHVybiAwO1xuLS1cbmZzL25pbGZzMi9uYW1laS5jPTIyMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTI1My1cdG5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmM6MjU0Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9uaWxmczIvbmFtZWkuYy0yNTUtb3V0OlxuLS1cbmZzL250ZnMvbmFtZWkuYz0zOTQ9c3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtNDkwLVx0ICogUHJldmVudCBpZ2V0IGFuZCB3cml0ZWJhY2sgZnJvbSBmaW5kaW5nIHRoaXMgaW5vZGUuXG5mcy9udGZzL25hbWVpLmM6NDkxOlx0ICogQ2FsbGVyIG11c3QgY2FsbCBkX2luc3RhbnRpYXRlX25ldyBpbnN0ZWFkIG9mIGRfaW5zdGFudGlhdGUuXG5mcy9udGZzL25hbWVpLmMtNDkyLVx0ICovXG4tLVxuZnMvbnRmcy9uYW1laS5jPTczNT1zdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtNzY3LVxuZnMvbnRmcy9uYW1laS5jOjc2ODpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgVkZTX0kobmkpKTtcbmZzL250ZnMvbmFtZWkuYy03NjktXG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTI9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg4LVxuZnMvbnRmcy9uYW1laS5jOjEwODk6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIFZGU19JKG5pKSk7XG5mcy9udGZzL25hbWVpLmMtMTA5MC1cdHJldHVybiBOVUxMO1xuLS1cbmZzL250ZnMvbmFtZWkuYz0xNDAyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ0NC1cdHZpLVx1MDAzZWlfc2l6ZSA9IHN5bWxlbjtcbmZzL250ZnMvbmFtZWkuYzoxNDQ1Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCB2aSk7XG5mcy9udGZzL25hbWVpLmMtMTQ0Ni1vdXQ6XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0NTA9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ5Ni1cbmZzL250ZnMvbmFtZWkuYzoxNDk3Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xuZnMvbnRmcy9uYW1laS5jLTE0OTgtb3V0OlxuLS1cbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTg2OC1cdC8qXG5mcy9udGZzMy9pbm9kZS5jOjE4Njk6XHQgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuZnMvbnRmczMvaW5vZGUuYy0xODcwLVx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cbmZzL250ZnMzL2lub2RlLmMtMTg3MS1cdCAqL1xuZnMvbnRmczMvaW5vZGUuYzoxODcyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9udGZzMy9pbm9kZS5jLTE4NzMtXG4tLVxuZnMvb3JhbmdlZnMvbmFtZWkuYz0xOD1zdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTc0LVxuZnMvb3JhbmdlZnMvbmFtZWkuYzo3NTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvb3JhbmdlZnMvbmFtZWkuYy03Ni1cdG9yYW5nZWZzX3NldF90aW1lb3V0KGRlbnRyeSk7XG4tLVxuZnMvb3JhbmdlZnMvbmFtZWkuYz0yMTQ9c3RhdGljIGludCBvcmFuZ2Vmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMjgwLVxuZnMvb3JhbmdlZnMvbmFtZWkuYzoyODE6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL29yYW5nZWZzL25hbWVpLmMtMjgyLVx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jPTI5OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb3JhbmdlZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMzQ1LVxuZnMvb3JhbmdlZnMvbmFtZWkuYzozNDY6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL29yYW5nZWZzL25hbWVpLmMtMzQ3LVx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmM9Mjk4PXN0YXRpYyBpbnQgb3ZsX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmMtMzE4LVx0XHQgKiBmaWxlIGhhbmRsZXMsIG5lZWQgdG8gdXNlIG92bF9nZXRfaW5vZGVfbG9ja2VkKCkgYW5kXG5mcy9vdmVybGF5ZnMvZGlyLmM6MzE5Olx0XHQgKiBkX2luc3RhbnRpYXRlX25ldygpIGhlcmUgdG8gcHJldmVudCBmcm9tIGNyZWF0aW5nIHR3b1xuZnMvb3ZlcmxheWZzL2Rpci5jLTMyMC1cdFx0ICogaGFzaGVkIGRpcmVjdG9yeSBpbm9kZSBhbGlhc2VzLiAgV2UgdGhlbiBuZWVkIHRvIHJldHVyblxuLS1cbmZzL3VkZi9uYW1laS5jPTM0Nj1zdGF0aWMgaW50IHVkZl9hZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy91ZGYvbmFtZWkuYy0zNjctXHR1ZGZfYWRkX2ZpZF9jb3VudGVyKGRpci1cdTAwM2VpX3NiLCBmYWxzZSwgMSk7XG5mcy91ZGYvbmFtZWkuYzozNjg6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3VkZi9uYW1laS5jLTM2OS1cbi0tXG5mcy91ZGYvbmFtZWkuYz00MjI9c3RhdGljIHN0cnVjdCBkZW50cnkgKnVkZl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvdWRmL25hbWVpLmMtNDcxLVx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuZnMvdWRmL25hbWVpLmM6NDcyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy91ZGYvbmFtZWkuYy00NzMtXG4tLVxuZnMvdWZzL25hbWVpLmM9Mzg9c3RhdGljIGlubGluZSBpbnQgdWZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3Vmcy9uYW1laS5jLTQxLVx0aWYgKCFlcnIpIHtcbmZzL3Vmcy9uYW1laS5jOjQyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3Vmcy9uYW1laS5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy91ZnMvbmFtZWkuYz0xNjg9c3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsIHN0cnVjdCBpbm9kZSAqIGRpcixcbi0tXG5mcy91ZnMvbmFtZWkuYy0xOTQtXG5mcy91ZnMvbmFtZWkuYzoxOTU6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3Vmcy9uYW1laS5jLTE5Ni1cdHJldHVybiBOVUxMO1xuLS1cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg9MjUwPWV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI1MTpleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlX25ldyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkX2luc3RhbnRpYXRlX25ld2AqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgaW4gYGZzL2RjYWNoZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbDsgaXQmIzM5O3Mgd2hlcmUgd2UgYWN0dWFsbHkgYnJpbmcgYSBkZW50cnkgdG8gbGlmZSwgcmlnaHQ/IEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIG5pdHR5LWdyaXR0eSBvZiBsaW5raW5nIHRoZSBkZW50cnkgaW50byB0aGUgZGNhY2hlIHN0cnVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcg4oCTIGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgYWNjZXNzIHRvIHRoZSBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhlIHZhcmlvdXMgbGlzdHMgaXQgbWFpbnRhaW5zLiBJcyBpdCB1c2luZyBSQ1UgaGVyZSwgb3Igc29tZXRoaW5nIG1vcmUgdHJhZGl0aW9uYWwgbGlrZSBzcGlubG9ja3MgYW5kIG11dGV4ZXM/IFRoZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFyb3VuZCBjcmVhdGluZyBuZXcgZGVudHJpZXMgYXJlIHNpZ25pZmljYW50LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbmV3IGRlbnRyeTogYGRfY291bnRgLCBgZF9pbm9kZWAsIGZsYWdzIGxpa2UgYERDQUNIRV9SRUZFUkVOQ0VEYC4gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbmQgd2hlbiBhcmUgdGhleSBzZXQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGlub2RlIGxheWVyPyBTcGVjaWZpY2FsbHksIGlzIGl0IGRvaW5nIGFuIGBpbm9kZV9nZXRgIGF0IHRoaXMgcG9pbnQ/IEFuZCBob3cgaXMgdGhlICYjMzQ7bmFtZSYjMzQ7IGluaXRpYWxpemVkLCBzaW5jZSB0aGUgbmFtZSBpcyBwcm9iYWJseSB0aGUgZXNzZW50aWFsIHBhcnQgb2YgdGhlIGxvb2t1cCBrZXkgYW5kIGlzIGEgZnJlcXVlbnQgY29udHJpYnV0b3IgdG8gcHJvYmxlbXM/CgpBbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIHdpdGhpbiB0aGlzIHJvdXRpbmU/IEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGNvbnNpc3RlbmN5IGV2ZW4gaWYgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGR1cmluZyBkZW50cnkgY3JlYXRpb24/IFNlZWluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9idXN0bmVzcy4gSSYjMzk7bSBsb29raW5nIGZvciBncmFjZWZ1bCBmYWlsdXJlIG1vZGVzLgoKRmluYWxseSwgZG9lcyB0aGlzIGZ1bmN0aW9uIGRvIGFueSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBpbm9kZSBkYXRhLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBjb29yZGluYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbT8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZGVudHJ5IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gSXQgYWxsIHN0YXJ0cyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTkwOlx0ICogdW5sb2NrX25ld19pbm9kZSgpIGNvbWJpbmF0aW9ucy5cbjIxOTE6XHQgKi9cbjIxOTI6XHR2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjE5MzpcdHtcbjIxOTQ6XHRcdEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpO1xuMjE5NTpcdFx0QlVHX09OKCFpbm9kZSk7XG4yMTk2Olx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG4yMTk3Olx0XHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMTk4Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIxOTk6XHRcdHNwaW5fbG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMDpcdFx0X19kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMjAxOlx0XHRzcGluX3VubG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMjpcdFx0V0FSTl9PTighKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX05FVykpO1xuMjIwMzpcdFx0LypcbjIyMDQ6XHRcdCAqIFBhaXJlZCB3aXRoIGlncmFiX2Zyb21faGFzaCgpXG4yMjA1Olx0XHQgKi9cbjIyMDY6XHRcdHNtcF93bWIoKTtcbjIyMDc6XHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX05FVyB8IElfQ1JFQVRJTkcpO1xuMjIwODpcdFx0aW5vZGVfd2FrZV91cF9iaXQoaW5vZGUsIF9fSV9ORVcpO1xuMjIwOTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyMTA6XHR9XG4yMjExOlx0RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlX25ldyk7XG4yMjEyOlx0XG4yMjEzOlx0c3RydWN0IGRlbnRyeSAqZF9tYWtlX3Jvb3Qoc3RydWN0IGlub2RlICpyb290X2lub2RlKVxuMjIxNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbnRmc19jcmVhdGVfaW5vZGVgIGZ1bmN0aW9uIGluIGBmcy9udGZzMy9pbm9kZS5jYC4gQmVmb3JlLCBpdCB3YXMgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgYW5kIHRoZW4gYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gSSYjMzk7bSBzZWVpbmcgbm93IHRoYXQgYGRfaW5zdGFudGlhdGVfbmV3YCBpcyBiZWluZyB1c2VkIGluc3RlYWQuIEFoLCByaWdodCEgVGhlIG9yaWdpbmFsIG1ldGhvZCwgYGRfaW5zdGFudGlhdGVgIGZvbGxvd2VkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3MsIHdhc24mIzM5O3QgY2xlYXJpbmcgYElfTkVXYC4gVGhpcyBjcmVhdGVkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBwcm9ibGVtcywgZXNwZWNpYWxseSB3aXRoIExTTS9zZWN1cml0eSBob29rcyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLCBiZWNhdXNlIHRoZSBpbm9kZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBpbnN0YW50aWF0ZWQgKmJlZm9yZSogd2UgY2FsbGVkIGB1bmxvY2tfbmV3X2lub2RlYC4gVGhlIG5ldyBhcHByb2FjaCwgYGRfaW5zdGFudGlhdGVfbmV3YCwgbmVhdGx5IGNvbWJpbmVzIHRoZSBzZWN1cml0eSBjaGVja3MsIHRoZSBhY3R1YWwgaW5zdGFudGlhdGlvbiwgYW5kIGNsZWFyaW5nIG9mIGBJX05FV2AgYWxsIHVuZGVyIGBpbm9kZS0mZ3Q7aV9sb2NrYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQgZWxpbWluYXRlcyB0aGF0IHNlcGFyYXRlIGNhbGwgdG8gYHVubG9ja19uZXdfaW5vZGVgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNsZWFuZXIgYW5kIHNhZmVyLgoKTm93LCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSB0aG9yb3VnaCBhbmQgc2VlIGlmIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgbmV3IGBkX2luc3RhbnRpYXRlX25ld2AgYWxsb2NhdGlvbiBoYXBwZW4gYW55d2hlcmU/IE5vcGUuIERvZXMgaXQgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGFueSBtZW1vcnkgYm91bmRzPyBObywgbm90IGF0IGFsbC4gQW5kIHdoYXQgYWJvdXQgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gT2theSwgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyBoZXJlIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBEb2VzIHRoaXMgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzPyBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRob3NlIGVpdGhlci4gT2theSwgYmFzZWQgb24gdGhpcyBxdWljayBhc3Nlc3NtZW50LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2VsbC1jb250YWluZWQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVtYWluaW5nIGNoYW5nZXMgaW4gdGhlIGZ1bmN0aW9uLCBidXQgc28gZmFyIHNvIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODQKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgVkZTIEFQSSBtaWdyYXRpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgdGhlIG9sZGVyIGBkX2luc3RhbnRpYXRlYCBhbmQgYHVubG9ja19uZXdfaW5vZGVgIHNlcXVlbmNlIHdpdGggdGhlIG1vcmUgbW9kZXJuIGBkX2luc3RhbnRpYXRlX25ld2AgY2FsbCB3aXRoaW4gdGhlIGBudGZzX2NyZWF0ZV9pbm9kZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjb21tb24gYW5kIGdlbmVyYWxseSBzYWZlIHByYWN0aWNlIGZvciBoYW5kbGluZyBuZXdseSBhbGxvY2F0ZWQgaW5vZGVzLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHJhY2UgY29uZGl0aW9ucy4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSByaXNrIGZhY3RvcnMgc3VjaCBhcyBzZW5kaW5nIHBhcnRpYWxseSBpbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYW5pcHVsYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLgoKQW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIFZGUyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgaW5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoYW5rZnVsbHksIHRoZXNlIHR5cGVzIG9mIHByb2JsZW1zIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBpbnN0cnVtZW50YXRpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCwgYWxvbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIGFzc2VydGlvbnMgbGlrZSBgV0FSTl9PTmAgYW5kIGBCVUdfT05gLiBJJiMzOTttIHRoZXJlZm9yZSBjb21mb3J0YWJsZSB0aGF0IHRoZXkgYXJlIGNvdmVyZWQuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSBiZWxpZXZlIHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOIHRvIGJlIGFjdGl2YXRlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgY2xlYW4gYW5kIHdlbGwtdW5kZXJzdG9vZCBjaGFuZ2UuIExldCYjMzk7cyBzaWduYWwgdGhhdCByZXN1bHQsIGFuZCBleHBsaWNpdGx5IHN0YXRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTlRGUzMgaW5vZGUgY3JlYXRpb24gaW4gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjYWxsIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAgaW5zdGVhZCBvZiBjYWxsaW5nIGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpYCBmb2xsb3dlZCBsYXRlciBieSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGNoYW5nZSBwZXJ0YWlucyBzdHJpY3RseSB0byBWRlMgaW5vZGUgbGlmZWN5Y2xlIHN0YXRlIG1hbmFnZW1lbnQgKGNsZWFyaW5nIGBJX05FV2AgYXRvbWljYWx5IHVwb24gZGVudHJ5IGluc3RhbnRpYXRpb24pIGFuZCBsb2NraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG9wZXJhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGlub2RlIHN0YXRlIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgTE9DS0RFUCwgYW5kIG1lbW9yeSBlcnJvcnMgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNC41NDUzMTEzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDE0NjA2NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBudGZzX2NyZWF0ZV9pbm9kZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGRfaW5zdGFudGlhdGUoKSB0byBkX2luc3RhbnRpYXRlX25ldygpIGFuZCByZW1vdmluZyB1bmxvY2tfbmV3X2lub2RlKCksIHdoaWNoIGFmZmVjdHMgaW5vZGUgc3RhdGUgbWFuYWdlbWVudCBhbmQgZGVudHJ5IGluc3RhbnRpYXRpb24gaW4gdGhlIHJlYWNoYWJsZSBudGZzMyBmaWxlc3lzdGVtLiBGdXp6aW5nIGNhbiBoZWxwIHRlc3QgaW5vZGUgY3JlYXRpb24gYW5kIHVubG9jayBzZW1hbnRpY3MgYWNyb3NzIE5URlMgY3JlYXRpb24gcGF0aHMgKGNyZWF0LCBta25vZCwgc3ltbGluaywgbWtkaXIpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNC41NDUzMTgzMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI4NjAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmNcXG5pbmRleCA1NmI0ZjY0NjlhMjgwLi40YWMyNmM4MGJkMzRmIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMzL2lub2RlLmNcXG4rKysgYi9mcy9udGZzMy9pbm9kZS5jXFxuQEAgLTE4NjYsMTAgKzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0Z290byBvdXQ2O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZScgYWZ0ZXIgaW5vZGUtXFx1MDAzZWlfb3AgaXMgc2V0XFxuK1xcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG4gXFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG4gXFx0ICovXFxuLVxcdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbiBcXG4gXFx0LyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqL1xcbiBcXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuQEAgLTE5MTcsOSArMTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZm5kKVxcbiBcXHRcXHRuaV91bmxvY2soZGlyX25pKTtcXG4gXFxuLVxcdGlmICghZXJyKVxcbi1cXHRcXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcXG4tXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjE1Ljk4ODc2MzA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDkwMDMzODY4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2NyZWF0ZV9pbm9kZVwiLFxuICAgIFwibnRmc19jcmVhdGVcIixcbiAgICBcIm50ZnNfbWtub2RcIixcbiAgICBcIm50ZnNfc3ltbGlua1wiLFxuICAgIFwibnRmc19ta2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4NWNmMjYwMmRiMjk2ZGE3YWY3YTkzNDBkMzU0YTM4OGYyZjIzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbm9kZS5jIGIvZnMvbnRmczMvaW5vZGUuY1xuaW5kZXggNTZiNGY2NDY5YTI4MC4uNGFjMjZjODBiZDM0ZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL2lub2RlLmNcbisrKyBiL2ZzL250ZnMzL2lub2RlLmNcbkBAIC0xODY2LDEwICsxODY2LDEwIEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gb3V0NjtcbiBcbiBcdC8qXG4tXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlJyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuK1x0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZV9uZXcnIGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4gXHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuIFx0ICovXG4tXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xuK1x0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG4gXG4gXHQvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovXG4gXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbkBAIC0xOTE3LDkgKzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFmbmQpXG4gXHRcdG5pX3VubG9jayhkaXJfbmkpO1xuIFxuLVx0aWYgKCFlcnIpXG4tXHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNS45ODg3NjQxNDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDg1OTEyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUzMgSW5vZGUgQ3JlYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFuZCwgY3JpdGljYWxseSwgdGhlIGFkamFjZW50IGNvZGUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyBgZnMvbnRmczMvaW5vZGUuY2AsIHNvIHRoYXQncyB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byBiZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbi5cblxuSXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYXJvdW5kIGlub2RlIGluc3RhbnRpYXRpb24uIFRoZXkncmUgc3dhcHBpbmcgb3V0IGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO2AgZm9yIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtgLiBUaGF0J3Mgbm90IGEgdHJpdmlhbCBzd2l0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmV3IGlub2RlcyBtb3JlIGNhcmVmdWxseSBvciBkaWZmZXJlbnRseS4gSXQncyBvZnRlbiBhIHNpZ25hbCBhYm91dCBob3cgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZC5cblxuVGhlbiwgdGhlcmUncyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICghZXJyKSB1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtgIGJsb2NrLiBUaGlzIGlzIGFsc28gaW1wb3J0YW50LiBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSXMgaXQgaW1wbHlpbmcgdGhhdCB0aGUgYGRfaW5zdGFudGlhdGVfbmV3YCBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1bmxvY2s/IE9yIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQsIHBvdGVudGlhbGx5IG1vcmUgZmluZS1ncmFpbmVkLCBsb2NraW5nIG1lY2hhbmlzbT8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZnMvbnRmczMvaW5vZGUuY2AgYXJvdW5kIGxpbmUgMTg2Ni4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBjaGFuZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIGdvYWwgaGVyZS4gSXMgdGhpcyBvcHRpbWl6YXRpb24/IEEgYnVnIGZpeD8gQSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudD8gQSBuZXcgZmVhdHVyZT8gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMgZXNzZW50aWFsIHRvIHZhbGlkYXRlIGFuZCBjb250ZXh0dWFsaXplIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MjUuNDc0Njc4NzQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg1MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg1MDpcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuMTg1MTpcXHRcXHRcXHRpZiAoYXR0cikge1xcbjE4NTI6XFx0XFx0XFx0XFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcXG4xODUzOlxcdFxcbjE4NTQ6XFx0XFx0XFx0XFx0Zm4gPSByZXNpZGVudF9kYXRhX2V4KGF0dHIsIFNJWkVPRl9BVFRSSUJVVEVfRklMRU5BTUUpO1xcbjE4NTU6XFx0XFx0XFx0XFx0aWYgKGZuKVxcbjE4NTY6XFx0XFx0XFx0XFx0XFx0Zm4tXFx1MDAzZWR1cC5leHRlbmRfZGF0YSA9IGZuYW1lLVxcdTAwM2VkdXAuZXh0ZW5kX2RhdGE7XFxuMTg1NzpcXHRcXHRcXHR9XFxuMTg1ODpcXHRcXHR9XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdC8qIFdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSBwYXJlbnQgZGlyZWN0b3J5IGxhdGVyICovXFxuMTg2MTpcXHRcXHRuaS1cXHUwMDNlbmlfZmxhZ3MgXFx1MDAyNj0gfk5JX0ZMQUdfVVBEQVRFX1BBUkVOVDtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXFxuMTg2NDpcXHRcXHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcXHUwMDI2ZGlyX25pLVxcdTAwM2VkaXIsIGRpcl9uaSwgbmV3X2RlLCBzYmksIGZuZCwgMCk7XFxuMTg2NTpcXHRcXHRpZiAoZXJyKVxcbjE4NjY6XFx0XFx0XFx0Z290byBvdXQ2O1xcbjE4Njc6XFx0XFxuMTg2ODpcXHRcXHQvKlxcbjE4Njk6XFx0XFx0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZV9uZXcnIGFmdGVyIGlub2RlLVxcdTAwM2VpX29wIGlzIHNldFxcbjE4NzA6XFx0XFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG4xODcxOlxcdFxcdCAqL1xcbjE4NzI6XFx0XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuMTg3MzpcXHRcXG4xODc0OlxcdFxcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cXG4xODc1OlxcdFxcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc2OlxcdFxcdGlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc3OlxcdFxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc4OlxcdFxcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3OTpcXHRcXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoZGlyLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4ODA6XFx0XFxuMTg4MTpcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuMTg4MjpcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4xODgzOlxcdFxcbjE4ODQ6XFx0XFx0LyogTm9ybWFsIGV4aXQuICovXFxuMTg4NTpcXHRcXHRnb3RvIG91dDI7XFxuMTg4NjpcXHRcXG4xODg3OlxcdG91dDY6XFxuMTg4ODpcXHRcXHRhdHRyID0gbmlfZmluZF9hdHRyKG5pLCBOVUxMLCBOVUxMLCBBVFRSX0VBLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTtcXG4xODg5OlxcdFxcdGlmIChhdHRyIFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZW5vbl9yZXMpIHtcXG4xODkwOlxcdFxcdFxcdC8qIERlbGV0ZSBBVFRSX0VBLCBpZiBub24tcmVzaWRlbnQuICovXFxuMTg5MTpcXHRcXHRcXHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcXG4xODkyOlxcdFxcdFxcdHJ1bl9pbml0KFxcdTAwMjZydW4pO1xcbjE4OTM6XFx0XFx0XFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXFx1MDAyNnJ1biwgMCwgTlVMTCwgZmFsc2UpO1xcbjE4OTQ6XFx0XFx0XFx0cnVuX2Nsb3NlKFxcdTAwMjZydW4pO1xcbjE4OTU6XFx0XFx0fVxcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHRpZiAocnBfaW5zZXJ0ZWQpXFxuMTg5ODpcXHRcXHRcXHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXFx1MDAyNm5ld19kZS1cXHUwMDNlcmVmKTtcXG4xODk5OlxcdFxcbjE5MDA6XFx0b3V0NTpcXG4xOTAxOlxcdFxcdGlmICghU19JU0RJUihtb2RlKSlcXG4xOTAyOlxcdFxcdFxcdHJ1bl9kZWFsbG9jYXRlKHNiaSwgXFx1MDAyNm5pLVxcdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRvdXQ0OlxcbjE5MDU6XFx0XFx0Y2xlYXJfcmVjX2ludXNlKHJlYyk7XFxuMTkwNjpcXHRcXHRjbGVhcl9ubGluayhpbm9kZSk7XFxuMTkwNzpcXHRcXHRuaS1cXHUwMDNlbWkuZGlydHkgPSBmYWxzZTtcXG4xOTA4OlxcdFxcdGRpc2NhcmRfbmV3X2lub2RlKGlub2RlKTtcXG4xOTA5OlxcdG91dDM6XFxuMTkxMDpcXHRcXHRudGZzX21hcmtfcmVjX2ZyZWUoc2JpLCBpbm8sIGZhbHNlKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0b3V0MjpcXG4xOTEzOlxcdFxcdGtmcmVlKG5ld19kZSk7XFxuMTkxNDpcXHRcXHRrZnJlZShycCk7XFxuMTkxNTpcXHRcXG4xOTE2OlxcdG91dDE6XFxuMTkxNzpcXHRcXHRpZiAoIWZuZClcXG4xOTE4OlxcdFxcdFxcdG5pX3VubG9jayhkaXJfbmkpO1xcbjE5MTk6XFx0XFxuMTkyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjE5MjE6XFx0fVxcbjE5MjI6XFx0XFxuMTkyMzpcXHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4xOTI0OlxcdHtcXG4xOTI1OlxcdFxcdGludCBlcnI7XFxuMTkyNjpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBudGZzX2koaW5vZGUpO1xcbjE5Mjc6XFx0XFx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4xOTI4OlxcdFxcdHN0cnVjdCBOVEZTX0RFICpkZTtcXG4xOTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoyNS40NzQ3OTkzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTA5MTEyNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZF9pbnN0YW50aWF0ZV9uZXdgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGRlbnRyeSBhbmQgaW5vZGUgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoYXQgaW5zaWRlIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAsIHRoZXJlJ3MgYSBjYWxsIHRvIGB1bmxvY2tfbmV3X2lub2RlKGlub2RlKWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHVubG9jayBvcGVyYXRpb24gaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGRfaW5zdGFudGlhdGVfbmV3YC4gSSdsbCBqdW1wIG92ZXIgdG8gZWl0aGVyIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUgb3IgcGVyaGFwcyB0aGUgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGhlYWRlciB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYHVubG9ja19uZXdfaW5vZGVgIGNhbGwgYW5kLCBjcnVjaWFsbHksIHdoYXQgc3RhdGUgdGhlIGBpbm9kZWAgaXMgaW4gYXQgdGhhdCBwb2ludC4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBncmFzcCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHN1YnRsZXRpZXMgYXJvdW5kIHRoaXMgZGVudHJ5LWlub2RlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyBhbiBhdG9taWMgb3BlcmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgdW5sb2NrIGlzIG1vdmVkPyBUaGUgZGV0YWlscyB3aWxsIGJlIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjI4LjU4MzkxMzY2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNDE4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZF9pbnN0YW50aWF0ZV9uZXdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MjE4ND1FWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGUpO1xcbi0tXFxuZnMvZGNhY2hlLmMtMjE5MS0gKi9cXG5mcy9kY2FjaGUuYzoyMTkyOnZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjE5My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI1MD1leHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMwLjE4NjMzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQwMDE1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGNhY2hlIGlzIGhhbmRsaW5nIG5ldyBpbm9kZXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgbGlua2luZyBhbiBpbm9kZSB0byBhIGRlbnRyeS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBpbm9kZSdzIGxpZmVjeWNsZSDigJMgaG93IHRoZSBpbm9kZSdzIGF0dHJpYnV0ZXMgYXJlIHNldCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhbmQgdWx0aW1hdGVseSwgaG93IHRoaXMgbmV3IGRlbnRyeSBiZWNvbWVzIGEgbGVnaXRpbWF0ZSBtZW1iZXIgb2YgdGhlIGRjYWNoZS4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlLCBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVkdW5kYW50IG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjYWNoZSBjb2hlcmVuY3ksIGNvbnNpZGVyaW5nIEknbGwgbGlrZWx5IG5lZWQgdG8gY29tcGFyZSB0aGlzIGNvZGUgd2l0aCBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBpbiBvdGhlciBmaWxlc3lzdGVtcy4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCByZXZpZXc7IEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gc3VidGxlIGJ1Z3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMyLjQyNjM1NDA4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTkwOlxcdCAqIHVubG9ja19uZXdfaW5vZGUoKSBjb21iaW5hdGlvbnMuXFxuMjE5MTpcXHQgKi9cXG4yMTkyOlxcdHZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjE5MzpcXHR7XFxuMjE5NDpcXHRcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcXG4yMTk1OlxcdFxcdEJVR19PTighaW5vZGUpO1xcbjIxOTY6XFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbjIxOTc6XFx0XFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpO1xcbjIxOTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMTk5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMjIwMDpcXHRcXHRfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTtcXG4yMjAxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4yMjAyOlxcdFxcdFdBUk5fT04oIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTkVXKSk7XFxuMjIwMzpcXHRcXHQvKlxcbjIyMDQ6XFx0XFx0ICogUGFpcmVkIHdpdGggaWdyYWJfZnJvbV9oYXNoKClcXG4yMjA1OlxcdFxcdCAqL1xcbjIyMDY6XFx0XFx0c21wX3dtYigpO1xcbjIyMDc6XFx0XFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTkVXIHwgSV9DUkVBVElORyk7XFxuMjIwODpcXHRcXHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XFxuMjIwOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMyLjQyNjUwMDMzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA5NDY4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbm9kZSBJbnN0YW50aWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUgYWJvdXQgYGRfaW5zdGFudGlhdGVfbmV3YC4gSXQgc2VlbXMgbGlrZSAqdGhpcyogZnVuY3Rpb24gaXMgbm93IGhhbmRsaW5nIHVubG9ja2luZyB0aGUgbmV3IGlub2RlLCBzcGVjaWZpY2FsbHkgY2xlYXJpbmcgYElfTkVXYCBhbmQgd2FraW5nIHVwIGFueSB3YWl0aW5nIHByb2Nlc3NlcywgcmlnaHQgd2l0aGluIGl0c2VsZi4gVGhhdCdzIGEga2V5IGRldGFpbC4gQmVmb3JlLCBpZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgb2xkIGFwcHJvYWNoIHdpdGggYG50ZnNfY3JlYXRlX2lub2RlYCB3YXMgZGlmZmVyZW50LiBJdCB3b3VsZCBjYWxsIGBkX2luc3RhbnRpYXRlYOKAlGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHnigJRgZF9pbnN0YW50aWF0ZWAgKmRpZG4ndCogdW5sb2NrIHRoZSBpbm9kZS4gSXQgd2FzIGZvbGxvd2VkIHVwIHdpdGggdGltZXN0YW1wIHVwZGF0ZXMsIG1hcmtpbmcgdGhlIGlub2RlIGRpcnR5LCBhbmQgKnRoZW4qIHRoZSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFNvLCB0aGUgbG9ja2luZy91bmxvY2tpbmcgc3RyYXRlZ3kgc2VlbXMgdG8gaGF2ZSBzaGlmdGVkLlxuXG5UaGlzIGNoYW5nZSBpcyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgZm9yIGJldHRlciBlZmZpY2llbmN5LCBvciBwZXJoYXBzIHRvIHN0cmVhbWxpbmUgdGhlIGNvbnRyb2wgZmxvdy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgY2hhaW4gdG8gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdXNhZ2Ugd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MzUuMTI3NDUwMTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU2NTExNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfY3JlYXRlX2lub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzItLypcXG5mcy9udGZzMy9pbm9kZS5jOjEzNzM6ICogbnRmc19jcmVhdGVfaW5vZGVcXG5mcy9udGZzMy9pbm9kZS5jLTEzNzQtICpcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMTQ9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzMy9uYW1laS5jLTExNi17XFxuZnMvbnRmczMvbmFtZWkuYzoxMTc6XFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXFx0XFx0XFx0XFx0IE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcXG5mcy9udGZzMy9uYW1laS5jOjEyNzpcXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCByZGV2LCBOVUxMLCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjIzLVxcbmZzL250ZnMzL25hbWVpLmM6MjI0OlxcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMjI1LVxcdFxcdFxcdFxcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcXG5mcy9udGZzMy9uYW1laS5jOjIzNDpcXHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXFx0XFx0XFx0XFx0XFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD04MDU9aW50IGlub2RlX3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpO1xcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmM9NjgwPWludCBudGZzX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXFxuZnMvbnRmczMveGF0dHIuYzo2ODk6ICogQ2FsbGVkIGZyb20gbnRmc19jcmVhdGVfaW5vZGUoKS5cXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MzYuODgzOTY4NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5NDY1NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIE5URlMzIGFuZCBTeXprYWxsZXIncyBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBudGZzM2AgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIExpbnV4IGxhbmRzY2FwZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgaXMgYSAqcmVhY2hhYmxlKiBmaWxlc3lzdGVtLCBtZWFuaW5nIGl0J3MgZW5hYmxlZCB2aWEgYENPTkZJR19OVEZTM19GU2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGNvbmNlcm4gbm93IGlzIGhvdyBTeXprYWxsZXIsIHdoaWNoIEkgdXNlIHJlZ3VsYXJseSwgZW5nYWdlcyB3aXRoIGl0LlxuXG5JIGtub3cgU3l6a2FsbGVyIGhhcyBhIGZldyBwcmltYXJ5IG1ldGhvZHMgZm9yIGF0dGFja2luZyBmaWxlc3lzdGVtcy4gSXQgY2FuIG1vdW50IGltYWdlcyBkaXJlY3RseSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBwb3NzaWJsZS4gSXQgY2FuIHVzZSBsb29wYmFjayBkZXZpY2VzIGNvdXBsZWQgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgKGludGVybmFsLCBlbXVsYXRlZCBzeXN0ZW0gY2FsbHMpIHRoYXQgYXJlIHNwZWNpYWxseSBidWlsdCBmb3IgaXQuIExhc3RseSwgaXQgY2FuIHJlbHkgb24gbW9yZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHN5c2NhbGxzLCB5b3VyIGJyZWFkLWFuZC1idXR0ZXIgb25lczogYG1rbm9kYCwgYG1rZGlyYCwgYG9wZW5gLCBgY3JlYXRgLCBgc3ltbGlua2AsIGV0Yy4gVGhlc2UgZm9ybSB0aGUgYnVpbGRpbmcgYmxvY2tzLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGZvciBtZSBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBOVEZTMy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbnMgd2lsbCBsZXQgbWUga25vdyB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBob3cgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIGZpbGVzeXN0ZW0sIGFuZCBpdHMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBwbGFubmluZyB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjM5LjY3ODYyNTUyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjE2NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGUzNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMzL0tjb25maWc6Mjpjb25maWcgTlRGUzNfRlNcXG5mcy9udGZzMy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmczMvS2NvbmZpZz0yOD1jb25maWcgTlRGUzNfTFpYX1hQUkVTU1xcbi0tXFxuZnMvbnRmczMvS2NvbmZpZy0zNy1cXG5mcy9udGZzMy9LY29uZmlnOjM4OmNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcXG5mcy9udGZzMy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjQxLjI1MDc5OTAxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjc2OTcyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBOVEZTMyBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBmcy9udGZzM2AgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgYW5kIHJlbGlhYmxlIHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBmcy9udGZzM2AgZGlyZWN0b3J5IGl0c2VsZi4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXRseSBkZWNsYXJlZC4gQnkgYW5hbHl6aW5nIHRoZSBjb250ZW50cyBvZiBgZnMvbnRmczMvS2NvbmZpZ2AsIEkgY2FuIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIG9wdGlvbnMgdGhhdCBgbnRmczNgIHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGZpbGVzeXN0ZW0gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo0NC41Mjc3NzM1OThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5URlMzX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uICFOVEZTX0ZTIHx8IG1cXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgV2luZG93cyBPUyBuYXRpdmUgZmlsZSBzeXN0ZW0gKE5URlMpIHN1cHBvcnQgdXAgdG8gTlRGUyB2ZXJzaW9uIDMuMS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBZIG9yIE0gZW5hYmxlcyB0aGUgTlRGUzMgZHJpdmVyIHdpdGggZnVsbCBmZWF0dXJlcyBlbmFibGVkIChyZWFkLFxcbiAgMTI6XFx0XFx0ICB3cml0ZSwgam91cm5hbCByZXBsYXlpbmcsIHNwYXJzZS9jb21wcmVzc2VkIGZpbGVzIHN1cHBvcnQpLlxcbiAgMTM6XFx0XFx0ICBGaWxlIHN5c3RlbSB0eXBlIHRvIHVzZSBvbiBtb3VudCBpcyBcXFwibnRmczNcXFwiLiBNb2R1bGUgbmFtZSAoTSBvcHRpb24pXFxuICAxNDpcXHRcXHQgIGlzIGFsc28gXFxcIm50ZnMzXFxcIi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBEb2N1bWVudGF0aW9uOiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMzLnJzdFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5URlMzXzY0QklUX0NMVVNURVJcXG4gIDE5OlxcdFxcdGJvb2wgXFxcIjY0IGJpdHMgcGVyIE5URlMgY2x1c3RlcnNcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgbnRmcy5zeXMgdXNlcyAzMiBiaXRzIHBlciBjbHVzdGVycy5cXG4gIDIzOlxcdFxcdCAgSWYgYWN0aXZhdGVkIDY0IGJpdHMgcGVyIGNsdXN0ZXJzIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIDRrIGNsdXN0ZXJcXG4gIDI0OlxcdFxcdCAgZm9yIDE2VCsgdm9sdW1lcy4gV2luZG93cyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vdW50IHN1Y2ggdm9sdW1lcy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgTiBoZXJlLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTlRGUzNfTFpYX1hQUkVTU1xcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiYWN0aXZhdGUgc3VwcG9ydCBvZiBleHRlcm5hbCBjb21wcmVzc2lvbnMgbHp4L3hwcmVzc1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTlRGUzNfRlNcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgSW4gV2luZG93cyAxMCBvbmUgY2FuIHVzZSBjb21tYW5kIFxcXCJjb21wYWN0XFxcIiB0byBjb21wcmVzcyBhbnkgZmlsZXMuXFxuICAzMzpcXHRcXHQgIDQgcG9zc2libGUgdmFyaWFudHMgb2YgY29tcHJlc3Npb24gYXJlOiB4cHJlc3M0aywgeHByZXNzOGssIHhwcmVzczE2ayBhbmQgbHp4LlxcbiAgMzQ6XFx0XFx0ICBJZiBhY3RpdmF0ZWQgeW91IHdpbGwgYmUgYWJsZSB0byByZWFkIHN1Y2ggZmlsZXMgY29ycmVjdGx5LlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTXFxuICA0MTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xcbiAgNDQ6XFx0XFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZSxcXG4gIDQ1OlxcdFxcdCAgYW5kIHRoaXMgb3B0aW9uIHNlbGVjdHMgc3VwcG9ydCBmb3IgQUNMcyBzcGVjaWZpY2FsbHkgZm9yIG50ZnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDQuNTI3ODM3ODU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDU1MjQyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEFuYWx5c2lzIGFuZCBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIHdlIG5lZWQgdG8gYXNzZXNzIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIElzIHRoaXMgY29kZSB3ZSBjYW4gYWN0dWFsbHkgZ2V0IHRvPyBZZXAsIGBudGZzM2AgaXMgYSBsZWdpdCBmaWxlIHN5c3RlbSBpbiBMaW51eCwgc28gdGhhdCdzIGEgZ29vZCBzdGFydC4gYG50ZnNfY3JlYXRlX2lub2RlYCBpcyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgLiBDaGVjay5cblxuTmV4dCwgZG9lcyB0aGlzIHBvdGVudGlhbGx5IG1lc3Mgd2l0aCBleGVjdXRhYmxlIGtlcm5lbCBjb2RlPyBMb29rcyBsaWtlIGl0IGRvZXM7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdpbmcgYGRfaW5zdGFudGlhdGVgIHRvIGBkX2luc3RhbnRpYXRlX25ld2AgYW5kIHJlbW92aW5nIHRoYXQgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCBjYWxsLiBUaGF0J3MgYSBkZWZpbml0ZSBcInllcy5cIlxuXG5Ob3csIGlzIHRoaXMgd29ydGggb3VyIHRpbWUgYW5kIGVmZm9ydCB0byBmdXp6PyBBYnNvbHV0ZWx5LiBGaWxlIHN5c3RlbSBpbm9kZSBjcmVhdGlvbiwgY29tYmluZWQgd2l0aCBjb25jdXJyZW5jeSBhbmQgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gSV9ORVcgaGFuZGxpbmcsIGlzIHByaW1lIHRlcnJpdG9yeSBmb3Igc3l6a2FsbGVyLiBDcml0aWNhbCBwYXRoLCBmdXp6YWJsZSwgZGVmaW5pdGVseSBhIGdvLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCBvdXIga2V5IGBGb2N1c1N5bWJvbHNgIGFyZS4gRGVmaW5pdGVseSBgbnRmc19jcmVhdGVfaW5vZGVgLCBhbmQgc2luY2UgdGhhdCdzIHRoZSBjb3JlLCB0aGUgY2FsbGVycyBhcmUgYWxzbyBjcnVjaWFsOiBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgIG5lZWQgdG8gYmUgaW4gdGhlIGNyb3NzaGFpcnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCdzIHNlZSBpZiBhbnl0aGluZyBlbHNlIGluIGBudGZzM2AgY2FsbHMgYG50ZnNfY3JlYXRlX2lub2RlYC4gSSB0aGluayBJIHNhdyBzb21ldGhpbmcgYWJvdXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBmcy9udGZzMy9uYW1laS5jYC4gV29ydGggYSBxdWljayBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDcuODMzMzY0NjQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUwMDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2NyZWF0ZV9pbm9kZXxudGZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9pbm9kZS5jPTEyOTc9bnRmc19jcmVhdGVfcmVwYXJzZV9idWZmZXIoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBjb25zdCBjaGFyICpzeW1uYW1lLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xMzcyLS8qXFxuZnMvbnRmczMvaW5vZGUuYzoxMzczOiAqIG50ZnNfY3JlYXRlX2lub2RlXFxuZnMvbnRmczMvaW5vZGUuYy0xMzc0LSAqXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzktICogLSBudGZzX21rZGlyXFxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxcbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxcbmZzL250ZnMzL2lub2RlLmM6MTM4MjogKiBOT1RFOiBpZiBmbmQgIT0gTlVMTCAobnRmc19hdG9taWNfb3BlbikgdGhlbiBAZGlyIGlzIGxvY2tlZFxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMTQ9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzMy9uYW1laS5jLTExNi17XFxuZnMvbnRmczMvbmFtZWkuYzoxMTc6XFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXFx0XFx0XFx0XFx0IE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcXG5mcy9udGZzMy9uYW1laS5jOjEyNzpcXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCByZGV2LCBOVUxMLCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjIzLVxcbmZzL250ZnMzL25hbWVpLmM6MjI0OlxcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMjI1LVxcdFxcdFxcdFxcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcXG5mcy9udGZzMy9uYW1laS5jOjIzNDpcXHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXFx0XFx0XFx0XFx0XFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD04MDU9aW50IGlub2RlX3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpO1xcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmM9NjgwPWludCBudGZzX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXFxuZnMvbnRmczMveGF0dHIuYzo2ODk6ICogQ2FsbGVkIGZyb20gbnRmc19jcmVhdGVfaW5vZGUoKS5cXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDcuODc4ODcyMDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjAwMzI5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE5URlMgQXRvbWljIE9wZW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYXRvbWljIG9wZW5zIGFyZSBoYW5kbGVkIGluIE5URlMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgbnRmc19hdG9taWNfb3BlbmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL250ZnMzL25hbWVpLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBuYW1laSBvcGVyYXRpb25zIGlzLCBhbmQgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBob3cgZmlsZXMgYXJlIGNyZWF0ZWQgb3Igb3BlbmVkIHNhZmVseSBpbiBOVEZTLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGF0b21pYyBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbmFtZWkuY2AgZmlsZSBiZWNhdXNlIGl0IGdlbmVyYWxseSBoYW5kbGVzIG5hbWUgbG9va3VwcywgcGF0aCB0cmF2ZXJzYWwsIGFuZCB0aGUgdWx0aW1hdGUgYXNzb2NpYXRpb24gb2YgYSBmaWxlIG5hbWUgd2l0aCBpdHMgdW5kZXJseWluZyBpbm9kZS4gSSB3YW50IHRvIHNlZSBob3cgTlRGUyBndWFyYW50ZWVzIGVpdGhlciBjb21wbGV0ZSBzdWNjZXNzIG9yIGNvbXBsZXRlIGZhaWx1cmUgZHVyaW5nIHRoZSBvcGVuIHByb2Nlc3MsIG1pbmltaXppbmcgZGF0YSBjb3JydXB0aW9uIHJpc2tzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGV2ZW50IG9mIGEgc3lzdGVtIGNyYXNoLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5IGFib3V0IGhhbmRsaW5nIHRoYXQgY3JpdGljYWwgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1MC41Mzg5MDcxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTMyNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzktICogLSBudGZzX21rZGlyXFxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxcbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxcbmZzL250ZnMzL2lub2RlLmM6MTM4MjogKiBOT1RFOiBpZiBmbmQgIT0gTlVMTCAobnRmc19hdG9taWNfb3BlbikgdGhlbiBAZGlyIGlzIGxvY2tlZFxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NTAuNTgzODQ0NDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODk3OTYxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVidWdnaW5nIGFuIE5URlMgQXRvbWljIE9wZW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnRmc19hdG9taWNfb3BlbmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWhhdmluZy4gIFRoZSBjb2RlIGl0c2VsZiBpcyBsaWtlbHkgaW4gYGZzL250ZnMzL25hbWVpLmNgLCBzbyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuICBTaW5jZSBpdCdzIGFuIGF0b21pYyBvcGVuLCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIHRoaXMgY29udGV4dC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBmaWxlIChgbmFtZWkuY2ApLiBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IgdGhlcmUsIGxpa2VseSBpbiBob3cgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBsb29rZWQgdXAgb3IgY3JlYXRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1NC40NzM2NDMwMTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9Mjk9c3RhdGljIGludCBudGZzX3JlYWRfbWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBjcHVfc3RyICpuYW1lLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy00NTgtXFx0XFx0ICovXFxuZnMvbnRmczMvaW5vZGUuYzo0NTk6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9udGZzMy9pbm9kZS5jLTQ2MC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bnRmc19kaXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xODAzLVxcdGlmIChTX0lTRElSKG1vZGUpKSB7XFxuZnMvbnRmczMvaW5vZGUuYzoxODA0OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvbnRmczMvaW5vZGUuYy0xODA1LVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZudGZzX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz00NjI9c3RhdGljIGludCBudGZzX2RfY29tcGFyZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBsZW4xLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYy01MjgtLy8gY2xhbmctZm9ybWF0IG9mZlxcbmZzL250ZnMzL25hbWVpLmM6NTI5OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvbnRmczMvbmFtZWkuYy01MzAtXFx0Lmxvb2t1cFxcdFxcdD0gbnRmc19sb29rdXAsXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9ODIyPXN0cnVjdCBkZW50cnkgKm50ZnMzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpO1xcbmZzL250ZnMzL250ZnNfZnMuaC04MjMtXFxuZnMvbnRmczMvbnRmc19mcy5oOjgyNDpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9udGZzMy9udGZzX2ZzLmgtODI1LWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NTQuNTIxNDMyOTk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTczNjg0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5URlMgTmFtZSBSZXNvbHV0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIG5hbWUgcmVzb2x1dGlvbiBpbiBOVEZTLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIHRoZSBpc3N1ZSBpcyBwcm9iYWJseSBpbiB0aGUgYGZzL250ZnMzYCBzdWJzeXN0ZW0uIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoZSBgbmFtZWkuY2AgZmlsZSBpcyB1c3VhbGx5IHRoZSBnby10byBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuYW1lLXRvLWlub2RlIGxvb2t1cHMgYW5kIHBhdGggdHJhdmVyc2FsIHdpdGhpbiBhIGZpbGVzeXN0ZW0uIE5vdywgbGV0J3Mgc2VlLCBsaW5lcyA1MjAtNTQwLi4uIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlIEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1OS4wMzg4MDQyOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRyZXQgPSAhbnRmc19jbXBfbmFtZXNfY3B1KHVuaTEsIHVuaTIsIHNiaS1cXHUwMDNldXBjYXNlLCBmYWxzZSkgPyAwIDogMTtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0b3V0OlxcbiA1MjQ6XFx0XFx0a2ZyZWUodW5pMSk7XFxuIDUyNTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MjY6XFx0fVxcbiA1Mjc6XFx0XFxuIDUyODpcXHQvLyBjbGFuZy1mb3JtYXQgb2ZmXFxuIDUyOTpcXHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiA1MzA6XFx0XFx0Lmxvb2t1cFxcdFxcdD0gbnRmc19sb29rdXAsXFxuIDUzMTpcXHRcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG4gNTMyOlxcdFxcdC5saW5rXFx0XFx0PSBudGZzX2xpbmssXFxuIDUzMzpcXHRcXHQudW5saW5rXFx0XFx0PSBudGZzX3VubGluayxcXG4gNTM0OlxcdFxcdC5zeW1saW5rXFx0PSBudGZzX3N5bWxpbmssXFxuIDUzNTpcXHRcXHQubWtkaXJcXHRcXHQ9IG50ZnNfbWtkaXIsXFxuIDUzNjpcXHRcXHQucm1kaXJcXHRcXHQ9IG50ZnNfcm1kaXIsXFxuIDUzNzpcXHRcXHQubWtub2RcXHRcXHQ9IG50ZnNfbWtub2QsXFxuIDUzODpcXHRcXHQucmVuYW1lXFx0XFx0PSBudGZzX3JlbmFtZSxcXG4gNTM5OlxcdFxcdC5nZXRfYWNsXFx0PSBudGZzX2dldF9hY2wsXFxuIDU0MDpcXHRcXHQuc2V0X2FjbFxcdD0gbnRmc19zZXRfYWNsLFxcbiA1NDE6XFx0XFx0LnNldGF0dHJcXHQ9IG50ZnNfc2V0YXR0cixcXG4gNTQyOlxcdFxcdC5nZXRhdHRyXFx0PSBudGZzX2dldGF0dHIsXFxuIDU0MzpcXHRcXHQubGlzdHhhdHRyXFx0PSBudGZzX2xpc3R4YXR0cixcXG4gNTQ0OlxcdFxcdC5maWVtYXBcXHRcXHQ9IG50ZnNfZmllbWFwLFxcbiA1NDU6XFx0XFx0LmZpbGVhdHRyX2dldFxcdD0gbnRmc19maWxlYXR0cl9nZXQsXFxuIDU0NjpcXHRcXHQuZmlsZWF0dHJfc2V0XFx0PSBudGZzX2ZpbGVhdHRyX3NldCxcXG4gNTQ3OlxcdH07XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1OS4wMzg4NzQxMjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg3NDg0NDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50OiBOVEZTIEZpbGUgQ3JlYXRpb24gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRoaXMgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBOVEZTIGZpbGUgY3JlYXRpb24gb3BlcmF0aW9uczogYG50ZnNfY3JlYXRlX2lub2RlYCwgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtub2RgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rZGlyYC4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gRnVydGhlcm1vcmUsIGBOVEZTM19GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHNldHVwLiBOb3RoaW5nIGNvbXBsZXggaGVyZS4gSSdtIGdvaW5nIHRvIHNldCB1cCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwOSwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0LjkxMzcyMTI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDI0ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MDQuOTkyMTUzOTc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY5OTIwMDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0Ljk5MjYzNjc2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNjk4NzE0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMToxMzoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2lub2RlLmMgYi9mcy9udGZzMy9pbm9kZS5jXG5pbmRleCA1NmI0ZjY0NjlhMjgwLi40YWMyNmM4MGJkMzRmIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvaW5vZGUuY1xuKysrIGIvZnMvbnRmczMvaW5vZGUuY1xuQEAgLTE4NjYsMTAgKzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBvdXQ2O1xuIFxuIFx0Lypcbi1cdCAqIENhbGwgJ2RfaW5zdGFudGlhdGUnIGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4rXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlX25ldycgYWZ0ZXIgaW5vZGUtXHUwMDNlaV9vcCBpcyBzZXRcbiBcdCAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uXG4gXHQgKi9cbi1cdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbiBcbiBcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbiBcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuQEAgLTE5MTcsOSArMTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWZuZClcbiBcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4gXG4tXHRpZiAoIWVycilcbi1cdFx0dW5sb2NrX25ld19pbm9kZShpbm9kZSk7XG4tXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0Ljk5MjYzNzcwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg3ODQ0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUzMgSW5vZGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBmcy9udGZzMy9pbm9kZS5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGlub2RlcyBpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgb3IgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBudGZzX2NyZWF0ZV9pbm9kZWAuIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgbXkgYmVzdCBiZXQgdG8gcXVpY2tseSBnZXQgdG8gdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjcmVhdGluZyB0aGUgaW5vZGVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjExLjY4MDQ5NDY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbjE4NTE6XFx0XFx0XFx0aWYgKGF0dHIpIHtcXG4xODUyOlxcdFxcdFxcdFxcdHN0cnVjdCBBVFRSX0ZJTEVfTkFNRSAqZm47XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdFxcdFxcdGZuID0gcmVzaWRlbnRfZGF0YV9leChhdHRyLCBTSVpFT0ZfQVRUUklCVVRFX0ZJTEVOQU1FKTtcXG4xODU1OlxcdFxcdFxcdFxcdGlmIChmbilcXG4xODU2OlxcdFxcdFxcdFxcdFxcdGZuLVxcdTAwM2VkdXAuZXh0ZW5kX2RhdGEgPSBmbmFtZS1cXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xcbjE4NTc6XFx0XFx0XFx0fVxcbjE4NTg6XFx0XFx0fVxcbjE4NTk6XFx0XFxuMTg2MDpcXHRcXHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xcbjE4NjE6XFx0XFx0bmktXFx1MDAzZW5pX2ZsYWdzIFxcdTAwMjY9IH5OSV9GTEFHX1VQREFURV9QQVJFTlQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdC8qIFN0ZXAgMjogQWRkIG5ldyBuYW1lIGluIGluZGV4LiAqL1xcbjE4NjQ6XFx0XFx0ZXJyID0gaW5keF9pbnNlcnRfZW50cnkoXFx1MDAyNmRpcl9uaS1cXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xcbjE4NjU6XFx0XFx0aWYgKGVycilcXG4xODY2OlxcdFxcdFxcdGdvdG8gb3V0NjtcXG4xODY3OlxcdFxcbjE4Njg6XFx0XFx0LypcXG4xODY5OlxcdFxcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG4xODcwOlxcdFxcdCAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uXFxuMTg3MTpcXHRcXHQgKi9cXG4xODcyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHQvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovXFxuMTg3NTpcXHRcXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3NjpcXHRcXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3NzpcXHRcXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3ODpcXHRcXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzk6XFx0XFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGRpciwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODgwOlxcdFxcbjE4ODE6XFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbjE4ODI6XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuMTg4MzpcXHRcXG4xODg0OlxcdFxcdC8qIE5vcm1hbCBleGl0LiAqL1xcbjE4ODU6XFx0XFx0Z290byBvdXQyO1xcbjE4ODY6XFx0XFxuMTg4NzpcXHRvdXQ2OlxcbjE4ODg6XFx0XFx0YXR0ciA9IG5pX2ZpbmRfYXR0cihuaSwgTlVMTCwgTlVMTCwgQVRUUl9FQSwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7XFxuMTg4OTpcXHRcXHRpZiAoYXR0ciBcXHUwMDI2XFx1MDAyNiBhdHRyLVxcdTAwM2Vub25fcmVzKSB7XFxuMTg5MDpcXHRcXHRcXHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xcbjE4OTE6XFx0XFx0XFx0c3RydWN0IHJ1bnNfdHJlZSBydW47XFxuMTg5MjpcXHRcXHRcXHRydW5faW5pdChcXHUwMDI2cnVuKTtcXG4xODkzOlxcdFxcdFxcdGF0dHJfc2V0X3NpemUobmksIEFUVFJfRUEsIE5VTEwsIDAsIFxcdTAwMjZydW4sIDAsIE5VTEwsIGZhbHNlKTtcXG4xODk0OlxcdFxcdFxcdHJ1bl9jbG9zZShcXHUwMDI2cnVuKTtcXG4xODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0aWYgKHJwX2luc2VydGVkKVxcbjE4OTg6XFx0XFx0XFx0bnRmc19yZW1vdmVfcmVwYXJzZShzYmksIElPX1JFUEFSU0VfVEFHX1NZTUxJTkssIFxcdTAwMjZuZXdfZGUtXFx1MDAzZXJlZik7XFxuMTg5OTpcXHRcXG4xOTAwOlxcdG91dDU6XFxuMTkwMTpcXHRcXHRpZiAoIVNfSVNESVIobW9kZSkpXFxuMTkwMjpcXHRcXHRcXHRydW5fZGVhbGxvY2F0ZShzYmksIFxcdTAwMjZuaS1cXHUwMDNlZmlsZS5ydW4sIGZhbHNlKTtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0b3V0NDpcXG4xOTA1OlxcdFxcdGNsZWFyX3JlY19pbnVzZShyZWMpO1xcbjE5MDY6XFx0XFx0Y2xlYXJfbmxpbmsoaW5vZGUpO1xcbjE5MDc6XFx0XFx0bmktXFx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XFxuMTkwODpcXHRcXHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XFxuMTkwOTpcXHRvdXQzOlxcbjE5MTA6XFx0XFx0bnRmc19tYXJrX3JlY19mcmVlKHNiaSwgaW5vLCBmYWxzZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdG91dDI6XFxuMTkxMzpcXHRcXHRrZnJlZShuZXdfZGUpO1xcbjE5MTQ6XFx0XFx0a2ZyZWUocnApO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRvdXQxOlxcbjE5MTc6XFx0XFx0aWYgKCFmbmQpXFxuMTkxODpcXHRcXHRcXHRuaV91bmxvY2soZGlyX25pKTtcXG4xOTE5OlxcdFxcbjE5MjA6XFx0XFx0cmV0dXJuIGVycjtcXG4xOTIxOlxcdH1cXG4xOTIyOlxcdFxcbjE5MjM6XFx0aW50IG50ZnNfbGlua19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuMTkyNDpcXHR7XFxuMTkyNTpcXHRcXHRpbnQgZXJyO1xcbjE5MjY6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcXG4xOTI3OlxcdFxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm87XFxuMTkyODpcXHRcXHRzdHJ1Y3QgTlRGU19ERSAqZGU7XFxuMTkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MTEuNjgwNjgyOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2MzkyMDM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipBbmFseXppbmcgYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgZF9pbnN0YW50aWF0ZV9uZXdgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgYGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpYCBpcyBvdXIgdGFyZ2V0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHdvcmtzLiBJIHNlZSBpdCBzdGFydHMgd2l0aCBhIGBXQVJOX09OYCBjaGVjaywgZW5zdXJpbmcgdGhlIGBpbm9kZWAgaXMgaW4gYSBuZXcgc3RhdGUgdXNpbmcgdGhlIGBJX05FV2AgZmxhZy4gVGhlIHByZXNlbmNlIG9mIHRoYXQgY2hlY2sgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZXF1ZW5jaW5nIGlzc3VlcyBpZiB0aGUgYGlub2RlYCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCwgd2hpY2ggaXMgY3JpdGljYWw7IGlmIHRoZSBpbm9kZSB3YXNuJ3QgcHJvcGVybHkgbG9ja2VkLCBvciBpZiB0aGlzIGNhbGwgZ2V0cyBtaXNzZWQsIGl0IHdpbGwgY2F1c2UgcmVhbCBpc3N1ZXMuIEFmdGVyIHRoYXQsIHdlJ3JlIGNhbGxpbmcgYGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSlgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHdvcmsgbGlrZWx5IGhhcHBlbnMg4oCTIGFzc29jaWF0aW5nIHRoZSBgaW5vZGVgIHdpdGggdGhlIGBkZW50cnlgLCBlZmZlY3RpdmVseSBcImluc3RhbnRpYXRpbmdcIiB0aGUgbmV3IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgdHJlZS4gVGhlIHByZXNlbmNlIG9mIHRoZSB3YXJuaW5nIG1ha2VzIG1lIGN1cmlvdXMgYWJvdXQgdGhlIHNjZW5hcmlvcyB0aGF0IGNhbiBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZTsgSSB3aWxsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbS4gSSB3aWxsIGxvb2sgdGhlcmUgZm9yIG1vcmUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MTQuMzQ0NjA1MzMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk5ODMwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRfaW5zdGFudGlhdGVfbmV3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE5ND1iZSByZXR1cm5lZC4gIEFueSBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgd2l0aCBFUlJfUFRSKCkuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk1LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MTE5NjpJbiBnZW5lcmFsLCBmaWxlc3lzdGVtcyB3aGljaCB1c2UgZF9pbnN0YW50aWF0ZV9uZXcoKSB0byBpbnN0YWxsIHRoZSBuZXdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExOTctaW5vZGUgY2FuIHNhZmVseSByZXR1cm4gTlVMTC4gIEZpbGVzeXN0ZW1zIHdoaWNoIG1heSBub3QgaGF2ZSBhbiBJX05FVyBpbm9kZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0PTQ1MT1vdGhlcndpc2Ugbm90ZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkxLVxcdHRvIHN1cHBvcnQgY3JlYXRpbmcgc3ViZGlyZWN0b3JpZXMuICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjQ5MjpcXHRjYWxsIGRfaW5zdGFudGlhdGVfbmV3KCkganVzdCBhcyB5b3Ugd291bGQgaW4gdGhlIGNyZWF0ZSgpIG1ldGhvZC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkzLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDo0OTQ6XFx0SWYgZF9pbnN0YW50aWF0ZV9uZXcoKSBpcyBub3QgdXNlZCBhbmQgaWYgdGhlIGZoX3RvX2RlbnRyeSgpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTQ5NS1cXHRleHBvcnQgb3BlcmF0aW9uIGlzIHByb3ZpZGVkLCBvciBpZiB0aGUgc3RvcmFnZSBtaWdodCBiZVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz02OTY5PXN0YXRpYyBpbnQgYnRyZnNfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYy02OTk2LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgfD0gSU9QX0ZBU1RQRVJNX01BWV9FWEVDO1xcbmZzL2J0cmZzL2lub2RlLmM6Njk5NzpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9idHJmcy9pbm9kZS5jLTY5OTgtXFx0fVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz05MDI5PXN0YXRpYyBpbnQgYnRyZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTkxMjAtXFxuZnMvYnRyZnMvaW5vZGUuYzo5MTIxOlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2J0cmZzL2lub2RlLmMtOTEyMi1cXHRyZXQgPSAwO1xcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz01NTI9c3RhdGljIG5vaW5saW5lIGludCBjcmVhdGVfc3Vidm9sKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy03MzQtXFx0c2V0X2JpdChCVFJGU19ST09UX09SUEhBTl9DTEVBTlVQLCBcXHUwMDI2bmV3X3Jvb3QtXFx1MDAzZXN0YXRlKTtcXG5mcy9idHJmcy9pb2N0bC5jOjczNTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIG5ld19pbm9kZV9hcmdzLmlub2RlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTczNi1cXHRuZXdfaW5vZGVfYXJncy5pbm9kZSA9IE5VTEw7XFxuLS1cXG5mcy9idHJmcy94YXR0ci5jPTIxND1pbnQgYnRyZnNfc2V0eGF0dHJfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2J0cmZzL3hhdHRyLmMtMjMyLVxcdFxcdCAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNtYWNrIGlzIGVuYWJsZWQgYW5kIGEgZGlyZWN0b3J5IGlzIGJlaW5nXFxuZnMvYnRyZnMveGF0dHIuYzoyMzM6XFx0XFx0ICogY3JlYXRlZC4gSXQgaGFwcGVucyB0aHJvdWdoIGRfaW5zdGFudGlhdGVfbmV3KCksIHdoaWNoIGNhbGxzXFxuZnMvYnRyZnMveGF0dHIuYy0yMzQtXFx0XFx0ICogc21hY2tfZF9pbnN0YW50aWF0ZSgpLCB3aGljaCBpbiB0dXJuIGNhbGxzIF9fdmZzX3NldHhhdHRyKCkgdG9cXG4tLVxcbmZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTIxOTEtICovXFxuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RjYWNoZS5jLTIxOTMte1xcbi0tXFxuZnMvZGNhY2hlLmMtMjIxMC19XFxuZnMvZGNhY2hlLmM6MjIxMTpFWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGVfbmV3KTtcXG5mcy9kY2FjaGUuYy0yMjEyLVxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYz0yNjk9ZWNyeXB0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTItXFx0fVxcbmZzL2VjcnlwdGZzL2lub2RlLmM6MjkzOlxcdGRfaW5zdGFudGlhdGVfbmV3KGVjcnlwdGZzX2RlbnRyeSwgZWNyeXB0ZnNfaW5vZGUpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtMjk0LW91dDpcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYz0zOD1zdGF0aWMgaW5saW5lIGludCBleHQyX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jLTQxLVxcdGlmICghZXJyKSB7XFxuZnMvZXh0Mi9uYW1laS5jOjQyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDIvbmFtZWkuYy00My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYz0yMjY9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jLTI1Ny1cXG5mcy9leHQyL25hbWVpLmM6MjU4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDIvbmFtZWkuYy0yNTktb3V0Olxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTI3ODY9c3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yNzk1LVxcdFxcdFxcdGV4dDRfaGFuZGxlX3N5bmMoaGFuZGxlKTtcXG5mcy9leHQ0L25hbWVpLmM6Mjc5NjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9leHQ0L25hbWVpLmMtMjc5Ny1cXHRcXHQqaW5vZGVwID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0zMDQ3LVxcdFxcdGdvdG8gb3V0X2NsZWFyX2lub2RlO1xcbmZzL2V4dDQvbmFtZWkuYzozMDQ4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDQvbmFtZWkuYy0zMDQ5LVxcdGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZSwgZGVudHJ5KTtcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz0zNjg9c3RhdGljIGludCBmMmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNDAyLVxcbmZzL2YyZnMvbmFtZWkuYzo0MDM6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZjJmcy9uYW1laS5jLTQwNC1cXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz02NjU9c3RhdGljIGludCBmMmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZjJmcy9uYW1laS5jLTcxNy1cXG5mcy9mMmZzL25hbWVpLmM6NzE4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2YyZnMvbmFtZWkuYy03MTktXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNzQzLVxcdFxcdC8qIEdpdmUgdXAgYW5kIGxlYXZlIGEgYnJva2VuIHN5bWxpbmsuICovXFxuZnMvZjJmcy9uYW1laS5jOjc0NDpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9mMmZzL25hbWVpLmMtNzQ1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTc1ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZjJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNzg2LVxcbmZzL2YyZnMvbmFtZWkuYzo3ODc6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZjJmcy9uYW1laS5jLTc4OC1cXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz04MTM9c3RhdGljIGludCBmMmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYy04NDQtXFxuZnMvZjJmcy9uYW1laS5jOjg0NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9mMmZzL25hbWVpLmMtODQ2LVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTcwMD1zdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9nZnMyL2lub2RlLmMtOTAxLVxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbmZzL2dmczIvaW5vZGUuYzo5MDI6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZ2ZzMi9pbm9kZS5jLTkwMy1cXHQvKiBBZnRlciBpbnN0YW50aWF0ZSwgZXJyb3JzIHNob3VsZCByZXN1bHQgaW4gZXZpY3Qgd2hpY2ggd2lsbCBkZXN0cm95XFxuLS1cXG5mcy9qZmZzMi9kaXIuYz0xNjU9c3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXFxuLS1cXG5mcy9qZmZzMi9kaXIuYy0yMTctXFxuZnMvamZmczIvZGlyLmM6MjE4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2pmZnMyL2Rpci5jLTIxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2pmZnMyL2Rpci5jPTI4Nz1zdGF0aWMgaW50IGpmZnMyX3N5bWxpbmsgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxcbi0tXFxuZnMvamZmczIvZGlyLmMtNDQxLVxcbmZzL2pmZnMyL2Rpci5jOjQ0MjpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9qZmZzMi9kaXIuYy00NDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9qZmZzMi9kaXIuYz00NTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX21rZGlyIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcXG4tLVxcbmZzL2pmZnMyL2Rpci5jLTU4NS1cXG5mcy9qZmZzMi9kaXIuYzo1ODY6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvamZmczIvZGlyLmMtNTg3LVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvamZmczIvZGlyLmM9NjIzPXN0YXRpYyBpbnQgamZmczJfbWtub2QgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxcbi0tXFxuZnMvamZmczIvZGlyLmMtNzYzLVxcbmZzL2pmZnMyL2Rpci5jOjc2NDpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9qZmZzMi9kaXIuYy03NjUtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz02Mz1zdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxcbi0tXFxuZnMvamZzL25hbWVpLmMtMTY3LVxcdH0gZWxzZSB7XFxuZnMvamZzL25hbWVpLmM6MTY4OlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xcbmZzL2pmcy9uYW1laS5jLTE2OS1cXHR9XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz0xOTY9c3RhdGljIHN0cnVjdCBkZW50cnkgKmpmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXAsXFxuLS1cXG5mcy9qZnMvbmFtZWkuYy0zMDEtXFx0fSBlbHNlIHtcXG5mcy9qZnMvbmFtZWkuYzozMDI6XFx0XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpcCk7XFxuZnMvamZzL25hbWVpLmMtMzAzLVxcdH1cXG4tLVxcbmZzL2pmcy9uYW1laS5jPTg3OT1zdGF0aWMgaW50IGpmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcXG4tLVxcbmZzL2pmcy9uYW1laS5jLTEwNTEtXFx0fSBlbHNlIHtcXG5mcy9qZnMvbmFtZWkuYzoxMDUyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xcbmZzL2pmcy9uYW1laS5jLTEwNTMtXFx0fVxcbi0tXFxuZnMvamZzL25hbWVpLmM9MTM1OD1zdGF0aWMgaW50IGpmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9qZnMvbmFtZWkuYy0xNDQwLVxcdH0gZWxzZSB7XFxuZnMvamZzL25hbWVpLmM6MTQ0MTpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcXG5mcy9qZnMvbmFtZWkuYy0xNDQyLVxcdH1cXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTM1PXN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMzktXFx0aWYgKCFlcnIpIHtcXG5mcy9uaWxmczIvbmFtZWkuYzo0MDpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9uaWxmczIvbmFtZWkuYy00MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTIyMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMjUzLVxcdG5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbmZzL25pbGZzMi9uYW1laS5jOjI1NDpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9uaWxmczIvbmFtZWkuYy0yNTUtb3V0Olxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTQ5MC1cXHQgKiBQcmV2ZW50IGlnZXQgYW5kIHdyaXRlYmFjayBmcm9tIGZpbmRpbmcgdGhpcyBpbm9kZS5cXG5mcy9udGZzL25hbWVpLmM6NDkxOlxcdCAqIENhbGxlciBtdXN0IGNhbGwgZF9pbnN0YW50aWF0ZV9uZXcgaW5zdGVhZCBvZiBkX2luc3RhbnRpYXRlLlxcbmZzL250ZnMvbmFtZWkuYy00OTItXFx0ICovXFxuLS1cXG5mcy9udGZzL25hbWVpLmM9NzM1PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTc2Ny1cXG5mcy9udGZzL25hbWVpLmM6NzY4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgVkZTX0kobmkpKTtcXG5mcy9udGZzL25hbWVpLmMtNzY5LVxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTEwNTI9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTEwODgtXFxuZnMvbnRmcy9uYW1laS5jOjEwODk6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xcbmZzL250ZnMvbmFtZWkuYy0xMDkwLVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0MDI9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0NDQtXFx0dmktXFx1MDAzZWlfc2l6ZSA9IHN5bWxlbjtcXG5mcy9udGZzL25hbWVpLmM6MTQ0NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIHZpKTtcXG5mcy9udGZzL25hbWVpLmMtMTQ0Ni1vdXQ6XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9MTQ1MD1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0OTYtXFxuZnMvbnRmcy9uYW1laS5jOjE0OTc6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xcbmZzL250ZnMvbmFtZWkuYy0xNDk4LW91dDpcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xODY4LVxcdC8qXFxuZnMvbnRmczMvaW5vZGUuYzoxODY5OlxcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG5mcy9udGZzMy9pbm9kZS5jLTE4NzAtXFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG5mcy9udGZzMy9pbm9kZS5jLTE4NzEtXFx0ICovXFxuZnMvbnRmczMvaW5vZGUuYzoxODcyOlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL250ZnMzL2lub2RlLmMtMTg3My1cXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9MTg9c3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTc0LVxcbmZzL29yYW5nZWZzL25hbWVpLmM6NzU6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvb3JhbmdlZnMvbmFtZWkuYy03Ni1cXHRvcmFuZ2Vmc19zZXRfdGltZW91dChkZW50cnkpO1xcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYz0yMTQ9c3RhdGljIGludCBvcmFuZ2Vmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0yODAtXFxuZnMvb3JhbmdlZnMvbmFtZWkuYzoyODE6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0yODItXFx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvcmFuZ2Vmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTM0NS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jOjM0NjpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTM0Ny1cXHRvcmFuZ2Vmc19zZXRfdGltZW91dChkZW50cnkpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2Rpci5jPTI5OD1zdGF0aWMgaW50IG92bF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vdmVybGF5ZnMvZGlyLmMtMzE4LVxcdFxcdCAqIGZpbGUgaGFuZGxlcywgbmVlZCB0byB1c2Ugb3ZsX2dldF9pbm9kZV9sb2NrZWQoKSBhbmRcXG5mcy9vdmVybGF5ZnMvZGlyLmM6MzE5OlxcdFxcdCAqIGRfaW5zdGFudGlhdGVfbmV3KCkgaGVyZSB0byBwcmV2ZW50IGZyb20gY3JlYXRpbmcgdHdvXFxuZnMvb3ZlcmxheWZzL2Rpci5jLTMyMC1cXHRcXHQgKiBoYXNoZWQgZGlyZWN0b3J5IGlub2RlIGFsaWFzZXMuICBXZSB0aGVuIG5lZWQgdG8gcmV0dXJuXFxuLS1cXG5mcy91ZGYvbmFtZWkuYz0zNDY9c3RhdGljIGludCB1ZGZfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy91ZGYvbmFtZWkuYy0zNjctXFx0dWRmX2FkZF9maWRfY291bnRlcihkaXItXFx1MDAzZWlfc2IsIGZhbHNlLCAxKTtcXG5mcy91ZGYvbmFtZWkuYzozNjg6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvdWRmL25hbWVpLmMtMzY5LVxcbi0tXFxuZnMvdWRmL25hbWVpLmM9NDIyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvdWRmL25hbWVpLmMtNDcxLVxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG5mcy91ZGYvbmFtZWkuYzo0NzI6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvdWRmL25hbWVpLmMtNDczLVxcbi0tXFxuZnMvdWZzL25hbWVpLmM9Mzg9c3RhdGljIGlubGluZSBpbnQgdWZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL25hbWVpLmMtNDEtXFx0aWYgKCFlcnIpIHtcXG5mcy91ZnMvbmFtZWkuYzo0MjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy91ZnMvbmFtZWkuYy00My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL3Vmcy9uYW1laS5jPTE2OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCwgc3RydWN0IGlub2RlICogZGlyLFxcbi0tXFxuZnMvdWZzL25hbWVpLmMtMTk0LVxcbmZzL3Vmcy9uYW1laS5jOjE5NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy91ZnMvbmFtZWkuYy0xOTYtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI1MD1leHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjE2LjY0NDQzOTk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzgzODUxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgaW4gYGZzL2RjYWNoZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbDsgaXQncyB3aGVyZSB3ZSBhY3R1YWxseSBicmluZyBhIGRlbnRyeSB0byBsaWZlLCByaWdodD8gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IG9mIGxpbmtpbmcgdGhlIGRlbnRyeSBpbnRvIHRoZSBkY2FjaGUgc3RydWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBsb2NraW5nIOKAkyBob3cgaXQncyBjb29yZGluYXRpbmcgYWNjZXNzIHRvIHRoZSBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhlIHZhcmlvdXMgbGlzdHMgaXQgbWFpbnRhaW5zLiBJcyBpdCB1c2luZyBSQ1UgaGVyZSwgb3Igc29tZXRoaW5nIG1vcmUgdHJhZGl0aW9uYWwgbGlrZSBzcGlubG9ja3MgYW5kIG11dGV4ZXM/IFRoZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFyb3VuZCBjcmVhdGluZyBuZXcgZGVudHJpZXMgYXJlIHNpZ25pZmljYW50LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG5ldyBkZW50cnk6IGBkX2NvdW50YCwgYGRfaW5vZGVgLCBmbGFncyBsaWtlIGBEQ0FDSEVfUkVGRVJFTkNFRGAuIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcywgYW5kIHdoZW4gYXJlIHRoZXkgc2V0PyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBpbm9kZSBsYXllcj8gU3BlY2lmaWNhbGx5LCBpcyBpdCBkb2luZyBhbiBgaW5vZGVfZ2V0YCBhdCB0aGlzIHBvaW50PyBBbmQgaG93IGlzIHRoZSBcIm5hbWVcIiBpbml0aWFsaXplZCwgc2luY2UgdGhlIG5hbWUgaXMgcHJvYmFibHkgdGhlIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBsb29rdXAga2V5IGFuZCBpcyBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yIHRvIHByb2JsZW1zP1xuXG5BbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIHdpdGhpbiB0aGlzIHJvdXRpbmU/IEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGNvbnNpc3RlbmN5IGV2ZW4gaWYgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGR1cmluZyBkZW50cnkgY3JlYXRpb24/IFNlZWluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9idXN0bmVzcy4gSSdtIGxvb2tpbmcgZm9yIGdyYWNlZnVsIGZhaWx1cmUgbW9kZXMuXG5cbkZpbmFsbHksIGRvZXMgdGhpcyBmdW5jdGlvbiBkbyBhbnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUgZGF0YSwgYW5kIGlmIHNvLCBob3cgaXMgaXQgY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzeXN0ZW0/IEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZGVudHJ5IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gSXQgYWxsIHN0YXJ0cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjAuNzIyODI3MzQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTkwOlxcdCAqIHVubG9ja19uZXdfaW5vZGUoKSBjb21iaW5hdGlvbnMuXFxuMjE5MTpcXHQgKi9cXG4yMTkyOlxcdHZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjE5MzpcXHR7XFxuMjE5NDpcXHRcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcXG4yMTk1OlxcdFxcdEJVR19PTighaW5vZGUpO1xcbjIxOTY6XFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbjIxOTc6XFx0XFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpO1xcbjIxOTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMTk5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMjIwMDpcXHRcXHRfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTtcXG4yMjAxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4yMjAyOlxcdFxcdFdBUk5fT04oIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTkVXKSk7XFxuMjIwMzpcXHRcXHQvKlxcbjIyMDQ6XFx0XFx0ICogUGFpcmVkIHdpdGggaWdyYWJfZnJvbV9oYXNoKClcXG4yMjA1OlxcdFxcdCAqL1xcbjIyMDY6XFx0XFx0c21wX3dtYigpO1xcbjIyMDc6XFx0XFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTkVXIHwgSV9DUkVBVElORyk7XFxuMjIwODpcXHRcXHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XFxuMjIwOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjIxMDpcXHR9XFxuMjIxMTpcXHRFWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGVfbmV3KTtcXG4yMjEyOlxcdFxcbjIyMTM6XFx0c3RydWN0IGRlbnRyeSAqZF9tYWtlX3Jvb3Qoc3RydWN0IGlub2RlICpyb290X2lub2RlKVxcbjIyMTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxNDoyMC43MjMwMjg0MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzODUyNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbiBpbiBgZnMvbnRmczMvaW5vZGUuY2AuIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSlgIGFuZCB0aGVuIGB1bmxvY2tfbmV3X2lub2RlKGlub2RlKWAuIEknbSBzZWVpbmcgbm93IHRoYXQgYGRfaW5zdGFudGlhdGVfbmV3YCBpcyBiZWluZyB1c2VkIGluc3RlYWQuIEFoLCByaWdodCEgVGhlIG9yaWdpbmFsIG1ldGhvZCwgYGRfaW5zdGFudGlhdGVgIGZvbGxvd2VkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3MsIHdhc24ndCBjbGVhcmluZyBgSV9ORVdgLiBUaGlzIGNyZWF0ZWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdpdGggTFNNL3NlY3VyaXR5IGhvb2tzIGFuZCBjb25jdXJyZW50IG9wZXJhdGlvbnMsIGJlY2F1c2UgdGhlIGlub2RlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGluc3RhbnRpYXRlZCAqYmVmb3JlKiB3ZSBjYWxsZWQgYHVubG9ja19uZXdfaW5vZGVgLiBUaGUgbmV3IGFwcHJvYWNoLCBgZF9pbnN0YW50aWF0ZV9uZXdgLCBuZWF0bHkgY29tYmluZXMgdGhlIHNlY3VyaXR5IGNoZWNrcywgdGhlIGFjdHVhbCBpbnN0YW50aWF0aW9uLCBhbmQgY2xlYXJpbmcgb2YgYElfTkVXYCBhbGwgdW5kZXIgYGlub2RlLVx1MDAzZWlfbG9ja2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0IGVsaW1pbmF0ZXMgdGhhdCBzZXBhcmF0ZSBjYWxsIHRvIGB1bmxvY2tfbmV3X2lub2RlYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjbGVhbmVyIGFuZCBzYWZlci5cblxuTm93LCBsZXQncyBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIGFuZCBzZWUgaWYgdGhpcyBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIERvZXMgdGhpcyBuZXcgYGRfaW5zdGFudGlhdGVfbmV3YCBhbGxvY2F0aW9uIGhhcHBlbiBhbnl3aGVyZT8gTm9wZS4gRG9lcyBpdCBhbHRlciBidWZmZXIgc2l6ZXMgb3IgYW55IG1lbW9yeSBib3VuZHM/IE5vLCBub3QgYXQgYWxsLiBBbmQgd2hhdCBhYm91dCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBPa2F5LCBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIGhlcmUgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIERvZXMgdGhpcyB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnM/IEkgZG9uJ3Qgc2VlIGFueSBvZiB0aG9zZSBlaXRoZXIuIE9rYXksIGJhc2VkIG9uIHRoaXMgcXVpY2sgYXNzZXNzbWVudCwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIHdlbGwtY29udGFpbmVkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZW1haW5pbmcgY2hhbmdlcyBpbiB0aGUgZnVuY3Rpb24sIGJ1dCBzbyBmYXIgc28gZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjI0LjU2MTU1ODEwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODY1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODY1OlxcdFxcdGlmIChlcnIpXFxuMTg2NjpcXHRcXHRcXHRnb3RvIG91dDY7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdC8qXFxuMTg2OTpcXHRcXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlX25ldycgYWZ0ZXIgaW5vZGUtXFx1MDAzZWlfb3AgaXMgc2V0XFxuMTg3MDpcXHRcXHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxcbjE4NzE6XFx0XFx0ICovXFxuMTg3MjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0LyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqL1xcbjE4NzU6XFx0XFx0aW5vZGVfc2V0X2F0aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4NzY6XFx0XFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzc6XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzg6XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc5OlxcdFxcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4xODgyOlxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbjE4ODM6XFx0XFxuMTg4NDpcXHRcXHQvKiBOb3JtYWwgZXhpdC4gKi9cXG4xODg1OlxcdFxcdGdvdG8gb3V0MjtcXG4xODg2OlxcdFxcbjE4ODc6XFx0b3V0NjpcXG4xODg4OlxcdFxcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xcbjE4ODk6XFx0XFx0aWYgKGF0dHIgXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNlbm9uX3Jlcykge1xcbjE4OTA6XFx0XFx0XFx0LyogRGVsZXRlIEFUVFJfRUEsIGlmIG5vbi1yZXNpZGVudC4gKi9cXG4xODkxOlxcdFxcdFxcdHN0cnVjdCBydW5zX3RyZWUgcnVuO1xcbjE4OTI6XFx0XFx0XFx0cnVuX2luaXQoXFx1MDAyNnJ1bik7XFxuMTg5MzpcXHRcXHRcXHRhdHRyX3NldF9zaXplKG5pLCBBVFRSX0VBLCBOVUxMLCAwLCBcXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XFxuMTg5NDpcXHRcXHRcXHRydW5fY2xvc2UoXFx1MDAyNnJ1bik7XFxuMTg5NTpcXHRcXHR9XFxuMTg5NjpcXHRcXG4xODk3OlxcdFxcdGlmIChycF9pbnNlcnRlZClcXG4xODk4OlxcdFxcdFxcdG50ZnNfcmVtb3ZlX3JlcGFyc2Uoc2JpLCBJT19SRVBBUlNFX1RBR19TWU1MSU5LLCBcXHUwMDI2bmV3X2RlLVxcdTAwM2VyZWYpO1xcbjE4OTk6XFx0XFxuMTkwMDpcXHRvdXQ1OlxcbjE5MDE6XFx0XFx0aWYgKCFTX0lTRElSKG1vZGUpKVxcbjE5MDI6XFx0XFx0XFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcXHUwMDI2bmktXFx1MDAzZWZpbGUucnVuLCBmYWxzZSk7XFxuMTkwMzpcXHRcXG4xOTA0OlxcdG91dDQ6XFxuMTkwNTpcXHRcXHRjbGVhcl9yZWNfaW51c2UocmVjKTtcXG4xOTA2OlxcdFxcdGNsZWFyX25saW5rKGlub2RlKTtcXG4xOTA3OlxcdFxcdG5pLVxcdTAwM2VtaS5kaXJ0eSA9IGZhbHNlO1xcbjE5MDg6XFx0XFx0ZGlzY2FyZF9uZXdfaW5vZGUoaW5vZGUpO1xcbjE5MDk6XFx0b3V0MzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjQuNTYxNzE5NDg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMjk2MTI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBJbm9kZSBDcmVhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgVkZTIEFQSSBtaWdyYXRpb24uIEVzc2VudGlhbGx5LCBpdCdzIHN3YXBwaW5nIG91dCB0aGUgb2xkZXIgYGRfaW5zdGFudGlhdGVgIGFuZCBgdW5sb2NrX25ld19pbm9kZWAgc2VxdWVuY2Ugd2l0aCB0aGUgbW9yZSBtb2Rlcm4gYGRfaW5zdGFudGlhdGVfbmV3YCBjYWxsIHdpdGhpbiB0aGUgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgZ2VuZXJhbGx5IHNhZmUgcHJhY3RpY2UgZm9yIGhhbmRsaW5nIG5ld2x5IGFsbG9jYXRlZCBpbm9kZXMuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIGFmdGVyIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgcmlzayBmYWN0b3JzIHN1Y2ggYXMgc2VuZGluZyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYywgbWFuaXB1bGF0aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgYWNjZXNzIGlzc3Vlcy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIFZGUyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgaW5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoYW5rZnVsbHksIHRoZXNlIHR5cGVzIG9mIHByb2JsZW1zIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBpbnN0cnVtZW50YXRpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCwgYWxvbmcgd2l0aCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gYXNzZXJ0aW9ucyBsaWtlIGBXQVJOX09OYCBhbmQgYEJVR19PTmAuIEknbSB0aGVyZWZvcmUgY29tZm9ydGFibGUgdGhhdCB0aGV5IGFyZSBjb3ZlcmVkLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSBiZWxpZXZlIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgYWN0aXZhdGVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGNoYW5nZS4gTGV0J3Mgc2lnbmFsIHRoYXQgcmVzdWx0LCBhbmQgZXhwbGljaXRseSBzdGF0ZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODQsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjguNjkxMzM0Njg4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow24mv7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 11:11:53 +0000 UTC FinishedAt: 2026-09-09 11:14:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "9eca8a55-fa40-4423-bac3-a40747b30820" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_create_inode", "ntfs_create", "ntfs_mknod", "ntfs_symlink", "ntfs_mkdir" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19jcmVhdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7bnRmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7bnRmc19ta25vZCYjMzQ7LAogICAgJiMzNDtudGZzX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7bnRmc19ta2RpciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTlRGUzMgaW5vZGUgY3JlYXRpb24gaW4gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjYWxsIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAgaW5zdGVhZCBvZiBjYWxsaW5nIGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpYCBmb2xsb3dlZCBsYXRlciBieSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGNoYW5nZSBwZXJ0YWlucyBzdHJpY3RseSB0byBWRlMgaW5vZGUgbGlmZWN5Y2xlIHN0YXRlIG1hbmFnZW1lbnQgKGNsZWFyaW5nIGBJX05FV2AgYXRvbWljYWx5IHVwb24gZGVudHJ5IGluc3RhbnRpYXRpb24pIGFuZCBsb2NraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG9wZXJhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGlub2RlIHN0YXRlIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgTE9DS0RFUCwgYW5kIG1lbW9yeSBlcnJvcnMgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBudGZzX2NyZWF0ZV9pbm9kZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGRfaW5zdGFudGlhdGUoKSB0byBkX2luc3RhbnRpYXRlX25ldygpIGFuZCByZW1vdmluZyB1bmxvY2tfbmV3X2lub2RlKCksIHdoaWNoIGFmZmVjdHMgaW5vZGUgc3RhdGUgbWFuYWdlbWVudCBhbmQgZGVudHJ5IGluc3RhbnRpYXRpb24gaW4gdGhlIHJlYWNoYWJsZSBudGZzMyBmaWxlc3lzdGVtLiBGdXp6aW5nIGNhbiBoZWxwIHRlc3QgaW5vZGUgY3JlYXRpb24gYW5kIHVubG9jayBzZW1hbnRpY3MgYWNyb3NzIE5URlMgY3JlYXRpb24gcGF0aHMgKGNyZWF0LCBta25vZCwgc3ltbGluaywgbWtkaXIpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDg4NWNmMjYwMmRiMjk2ZGE3YWY3YTkzNDBkMzU0YTM4OGYyZjIzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmNcbmluZGV4IDU2YjRmNjQ2OWEyODAuLjRhYzI2YzgwYmQzNGYgMTAwNjQ0XG4tLS0gYS9mcy9udGZzMy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbm9kZS5jXG5AQCAtMTg2NiwxMCAmIzQzOzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBvdXQ2O1xuIFxuIFx0Lypcbi1cdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlJiMzOTsgYWZ0ZXIgaW5vZGUtXHUwMDNlaV9vcCBpcyBzZXRcbiYjNDM7XHQgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuIFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cbiBcdCAqL1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbiYjNDM7XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbiBcbiBcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbiBcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuQEAgLTE5MTcsOSAmIzQzOzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFmbmQpXG4gXHRcdG5pX3VubG9jayhkaXJfbmkpO1xuIFxuLVx0aWYgKCFlcnIpXG4tXHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2NyZWF0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX21rbm9kJiMzNDssCiAgICAmIzM0O250ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtudGZzX21rZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMToxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2lub2RlLmMgYi9mcy9udGZzMy9pbm9kZS5jCmluZGV4IDU2YjRmNjQ2OWEyODAuLjRhYzI2YzgwYmQzNGYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvaW5vZGUuYwpAQCAtMTg2NiwxMCAmIzQzOzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBvdXQ2OwogCiAJLyoKLQkgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZSYjMzk7IGFmdGVyIGlub2RlLSZndDtpX29wIGlzIHNldAomIzQzOwkgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS0mZ3Q7aV9vcCBpcyBzZXQKIAkgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLgogCSAqLwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiYjNDM7CWRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpOwogCiAJLyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqLwogCWlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktJmd0O2lfY3J0aW1lKTsKQEAgLTE5MTcsOSAmIzQzOzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZm5kKQogCQluaV91bmxvY2soZGlyX25pKTsKIAotCWlmICghZXJyKQotCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKLQogCXJldHVybiBlcnI7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIElub2RlIENyZWF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFuZCwgY3JpdGljYWxseSwgdGhlIGFkamFjZW50IGNvZGUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyBgZnMvbnRmczMvaW5vZGUuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBudGZzX2NyZWF0ZV9pbm9kZWAgZnVuY3Rpb24uCgpJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYXJvdW5kIGlub2RlIGluc3RhbnRpYXRpb24uIFRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtgIGZvciBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7YC4gVGhhdCYjMzk7cyBub3QgYSB0cml2aWFsIHN3aXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmV3IGlub2RlcyBtb3JlIGNhcmVmdWxseSBvciBkaWZmZXJlbnRseS4gSXQmIzM5O3Mgb2Z0ZW4gYSBzaWduYWwgYWJvdXQgaG93IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gYXJlIGhhbmRsZWQuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICghZXJyKSB1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtgIGJsb2NrLiBUaGlzIGlzIGFsc28gaW1wb3J0YW50LiBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSXMgaXQgaW1wbHlpbmcgdGhhdCB0aGUgYGRfaW5zdGFudGlhdGVfbmV3YCBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1bmxvY2s/IE9yIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQsIHBvdGVudGlhbGx5IG1vcmUgZmluZS1ncmFpbmVkLCBsb2NraW5nIG1lY2hhbmlzbT8gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZnMvbnRmczMvaW5vZGUuY2AgYXJvdW5kIGxpbmUgMTg2Ni4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG92ZXJhbGwgZ29hbCBoZXJlLiBJcyB0aGlzIG9wdGltaXphdGlvbj8gQSBidWcgZml4PyBBIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50PyBBIG5ldyBmZWF0dXJlPyBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyBlc3NlbnRpYWwgdG8gdmFsaWRhdGUgYW5kIGNvbnRleHR1YWxpemUgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODUwOlx0XHRcdFx0XHQgICAgTlVMTCk7XG4xODUxOlx0XHRcdGlmIChhdHRyKSB7XG4xODUyOlx0XHRcdFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHRmbiA9IHJlc2lkZW50X2RhdGFfZXgoYXR0ciwgU0laRU9GX0FUVFJJQlVURV9GSUxFTkFNRSk7XG4xODU1Olx0XHRcdFx0aWYgKGZuKVxuMTg1NjpcdFx0XHRcdFx0Zm4tXHUwMDNlZHVwLmV4dGVuZF9kYXRhID0gZm5hbWUtXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xuMTg1NzpcdFx0XHR9XG4xODU4Olx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xuMTg2MTpcdFx0bmktXHUwMDNlbmlfZmxhZ3MgXHUwMDI2PSB+TklfRkxBR19VUERBVEVfUEFSRU5UO1xuMTg2MjpcdFxuMTg2MzpcdFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXG4xODY0Olx0XHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcdTAwMjZkaXJfbmktXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xuMTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbjE5MTA6XHRcdG50ZnNfbWFya19yZWNfZnJlZShzYmksIGlubywgZmFsc2UpO1xuMTkxMTpcdFxuMTkxMjpcdG91dDI6XG4xOTEzOlx0XHRrZnJlZShuZXdfZGUpO1xuMTkxNDpcdFx0a2ZyZWUocnApO1xuMTkxNTpcdFxuMTkxNjpcdG91dDE6XG4xOTE3Olx0XHRpZiAoIWZuZClcbjE5MTg6XHRcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4xOTE5Olx0XG4xOTIwOlx0XHRyZXR1cm4gZXJyO1xuMTkyMTpcdH1cbjE5MjI6XHRcbjE5MjM6XHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbjE5MjQ6XHR7XG4xOTI1Olx0XHRpbnQgZXJyO1xuMTkyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbjE5Mjc6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuMTkyODpcdFx0c3RydWN0IE5URlNfREUgKmRlO1xuMTkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGRlbnRyeSBhbmQgaW5vZGUgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoYXQgaW5zaWRlIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAsIHRoZXJlJiMzOTtzIGEgY2FsbCB0byBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB1bmxvY2sgb3BlcmF0aW9uIGluIHRoaXMgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBgZF9pbnN0YW50aWF0ZV9uZXdgLiBJJiMzOTtsbCBqdW1wIG92ZXIgdG8gZWl0aGVyIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUgb3IgcGVyaGFwcyB0aGUgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGhlYWRlciB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGF0IGB1bmxvY2tfbmV3X2lub2RlYCBjYWxsIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlIHRoZSBgaW5vZGVgIGlzIGluIGF0IHRoYXQgcG9pbnQuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIGdyYXNwIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgc3VidGxldGllcyBhcm91bmQgdGhpcyBkZW50cnktaW5vZGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzLiBJcyB0aGlzIGFuIGF0b21pYyBvcGVyYXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhpcyB1bmxvY2sgaXMgbW92ZWQ/IFRoZSBkZXRhaWxzIHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRfaW5zdGFudGlhdGVfbmV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcbi0tXG5mcy9kY2FjaGUuYy0yMTkxLSAqL1xuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjE5My17XG4tLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD0yNTA9ZXh0ZXJuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yNTItZXh0ZXJuIHZvaWQgX19kX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBkX2luc3RhbnRpYXRlX25ld2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkY2FjaGUgaXMgaGFuZGxpbmcgbmV3IGlub2Rlcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGxpbmtpbmcgYW4gaW5vZGUgdG8gYSBkZW50cnkuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGlub2RlJiMzOTtzIGxpZmVjeWNsZSDigJMgaG93IHRoZSBpbm9kZSYjMzk7cyBhdHRyaWJ1dGVzIGFyZSBzZXQsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgYW5kIHVsdGltYXRlbHksIGhvdyB0aGlzIG5ldyBkZW50cnkgYmVjb21lcyBhIGxlZ2l0aW1hdGUgbWVtYmVyIG9mIHRoZSBkY2FjaGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGxpa2UgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZWR1bmRhbnQgb3BlcmF0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGNhY2hlIGNvaGVyZW5jeSwgY29uc2lkZXJpbmcgSSYjMzk7bGwgbGlrZWx5IG5lZWQgdG8gY29tcGFyZSB0aGlzIGNvZGUgd2l0aCBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBpbiBvdGhlciBmaWxlc3lzdGVtcy4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCByZXZpZXc7IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHN1YnRsZSBidWdzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTkwOlx0ICogdW5sb2NrX25ld19pbm9kZSgpIGNvbWJpbmF0aW9ucy5cbjIxOTE6XHQgKi9cbjIxOTI6XHR2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjE5MzpcdHtcbjIxOTQ6XHRcdEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpO1xuMjE5NTpcdFx0QlVHX09OKCFpbm9kZSk7XG4yMTk2Olx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG4yMTk3Olx0XHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMTk4Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIxOTk6XHRcdHNwaW5fbG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMDpcdFx0X19kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMjAxOlx0XHRzcGluX3VubG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMjpcdFx0V0FSTl9PTighKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX05FVykpO1xuMjIwMzpcdFx0LypcbjIyMDQ6XHRcdCAqIFBhaXJlZCB3aXRoIGlncmFiX2Zyb21faGFzaCgpXG4yMjA1Olx0XHQgKi9cbjIyMDY6XHRcdHNtcF93bWIoKTtcbjIyMDc6XHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX05FVyB8IElfQ1JFQVRJTkcpO1xuMjIwODpcdFx0aW5vZGVfd2FrZV91cF9iaXQoaW5vZGUsIF9fSV9ORVcpO1xuMjIwOTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5vZGUgSW5zdGFudGlhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUgYWJvdXQgYGRfaW5zdGFudGlhdGVfbmV3YC4gSXQgc2VlbXMgbGlrZSAqdGhpcyogZnVuY3Rpb24gaXMgbm93IGhhbmRsaW5nIHVubG9ja2luZyB0aGUgbmV3IGlub2RlLCBzcGVjaWZpY2FsbHkgY2xlYXJpbmcgYElfTkVXYCBhbmQgd2FraW5nIHVwIGFueSB3YWl0aW5nIHByb2Nlc3NlcywgcmlnaHQgd2l0aGluIGl0c2VsZi4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEJlZm9yZSwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIHRoZSBvbGQgYXBwcm9hY2ggd2l0aCBgbnRmc19jcmVhdGVfaW5vZGVgIHdhcyBkaWZmZXJlbnQuIEl0IHdvdWxkIGNhbGwgYGRfaW5zdGFudGlhdGVg4oCUYW5kIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseeKAlGBkX2luc3RhbnRpYXRlYCAqZGlkbiYjMzk7dCogdW5sb2NrIHRoZSBpbm9kZS4gSXQgd2FzIGZvbGxvd2VkIHVwIHdpdGggdGltZXN0YW1wIHVwZGF0ZXMsIG1hcmtpbmcgdGhlIGlub2RlIGRpcnR5LCBhbmQgKnRoZW4qIHRoZSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFNvLCB0aGUgbG9ja2luZy91bmxvY2tpbmcgc3RyYXRlZ3kgc2VlbXMgdG8gaGF2ZSBzaGlmdGVkLgoKVGhpcyBjaGFuZ2UgaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIGZvciBiZXR0ZXIgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyB0byBzdHJlYW1saW5lIHRoZSBjb250cm9sIGZsb3cuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsIGNoYWluIHRvIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHVzYWdlIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19jcmVhdGVfaW5vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYz0xMjk3PW50ZnNfY3JlYXRlX3JlcGFyc2VfYnVmZmVyKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgY29uc3QgY2hhciAqc3ltbmFtZSxcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTEzNzItLypcbmZzL250ZnMzL2lub2RlLmM6MTM3MzogKiBudGZzX2NyZWF0ZV9pbm9kZVxuZnMvbnRmczMvaW5vZGUuYy0xMzc0LSAqXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzgzLSAqL1xuZnMvbnRmczMvaW5vZGUuYzoxMzg0OmludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcbi0tXG5mcy9udGZzMy9uYW1laS5jPTExND1zdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTExNi17XG5mcy9udGZzMy9uYW1laS5jOjExNzpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXHRcdFx0XHQgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTEyNi17XG5mcy9udGZzMy9uYW1laS5jOjEyNzpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIG1vZGUsIHJkZXYsIE5VTEwsIDAsXG5mcy9udGZzMy9uYW1laS5jLTEyOC1cdFx0XHRcdCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTIxMj1zdGF0aWMgaW50IG50ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0yMjMtXG5mcy9udGZzMy9uYW1laS5jOjIyNDpcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmczMvbmFtZWkuYy0yMjUtXHRcdFx0XHQgc3ltbmFtZSwgc2l6ZSwgTlVMTCk7XG4tLVxuZnMvbnRmczMvbmFtZWkuYz0yMzE9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcbmZzL250ZnMzL25hbWVpLmM6MjM0Olx0cmV0dXJuIEVSUl9QVFIobnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXHRcdFx0XHRcdCBtb2RlLCAwLCBOVUxMLCAwLCBOVUxMKSk7XG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTgwNT1pbnQgaW5vZGVfcmVhZF9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmRhdGEsIHNpemVfdCBieXRlcyk7XG5mcy9udGZzMy9udGZzX2ZzLmg6ODA2OmludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBjcHVfc3RyICp1bmksXG4tLVxuZnMvbnRmczMveGF0dHIuYz02ODA9aW50IG50ZnNfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXG5mcy9udGZzMy94YXR0ci5jOjY4OTogKiBDYWxsZWQgZnJvbSBudGZzX2NyZWF0ZV9pbm9kZSgpLlxuZnMvbnRmczMveGF0dHIuYy02OTAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIE5URlMzIGFuZCBTeXprYWxsZXImIzM5O3MgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudGZzM2AgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIExpbnV4IGxhbmRzY2FwZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgaXMgYSAqcmVhY2hhYmxlKiBmaWxlc3lzdGVtLCBtZWFuaW5nIGl0JiMzOTtzIGVuYWJsZWQgdmlhIGBDT05GSUdfTlRGUzNfRlNgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgY29uY2VybiBub3cgaXMgaG93IFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBlbmdhZ2VzIHdpdGggaXQuCgpJIGtub3cgU3l6a2FsbGVyIGhhcyBhIGZldyBwcmltYXJ5IG1ldGhvZHMgZm9yIGF0dGFja2luZyBmaWxlc3lzdGVtcy4gSXQgY2FuIG1vdW50IGltYWdlcyBkaXJlY3RseSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBwb3NzaWJsZS4gSXQgY2FuIHVzZSBsb29wYmFjayBkZXZpY2VzIGNvdXBsZWQgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgKGludGVybmFsLCBlbXVsYXRlZCBzeXN0ZW0gY2FsbHMpIHRoYXQgYXJlIHNwZWNpYWxseSBidWlsdCBmb3IgaXQuIExhc3RseSwgaXQgY2FuIHJlbHkgb24gbW9yZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHN5c2NhbGxzLCB5b3VyIGJyZWFkLWFuZC1idXR0ZXIgb25lczogYG1rbm9kYCwgYG1rZGlyYCwgYG9wZW5gLCBgY3JlYXRgLCBgc3ltbGlua2AsIGV0Yy4gVGhlc2UgZm9ybSB0aGUgYnVpbGRpbmcgYmxvY2tzLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTlRGUzMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHdpbGwgbGV0IG1lIGtub3cgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgaG93IFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSBmaWxlc3lzdGVtLCBhbmQgaXRzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgcGxhbm5pbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTM19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzMy9LY29uZmlnOjI6Y29uZmlnIE5URlMzX0ZTXG5mcy9udGZzMy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIFJlYWQtV3JpdGUgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMzL0tjb25maWc9Mjg9Y29uZmlnIE5URlMzX0xaWF9YUFJFU1Ncbi0tXG5mcy9udGZzMy9LY29uZmlnLTM3LVxuZnMvbnRmczMvS2NvbmZpZzozODpjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXG5mcy9udGZzMy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBOVEZTMyBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgZnMvbnRmczNgIG1vZHVsZS4gVGhlIG1vc3QgZGlyZWN0IGFuZCByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcywgaW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZnMvbnRmczNgIGRpcmVjdG9yeSBpdHNlbGYuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkLiBCeSBhbmFseXppbmcgdGhlIGNvbnRlbnRzIG9mIGBmcy9udGZzMy9LY29uZmlnYCwgSSBjYW4gcXVpY2tseSBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgbW9kdWxlcywgb3Igb3B0aW9ucyB0aGF0IGBudGZzM2AgcmVsaWVzIG9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgZmlsZXN5c3RlbSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGUzNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O05URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uICFOVEZTX0ZTIHx8IG1cbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgV2luZG93cyBPUyBuYXRpdmUgZmlsZSBzeXN0ZW0gKE5URlMpIHN1cHBvcnQgdXAgdG8gTlRGUyB2ZXJzaW9uIDMuMS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgWSBvciBNIGVuYWJsZXMgdGhlIE5URlMzIGRyaXZlciB3aXRoIGZ1bGwgZmVhdHVyZXMgZW5hYmxlZCAocmVhZCxcbiAgMTI6XHRcdCAgd3JpdGUsIGpvdXJuYWwgcmVwbGF5aW5nLCBzcGFyc2UvY29tcHJlc3NlZCBmaWxlcyBzdXBwb3J0KS5cbiAgMTM6XHRcdCAgRmlsZSBzeXN0ZW0gdHlwZSB0byB1c2Ugb24gbW91bnQgaXMgXCYjMzQ7bnRmczNcJiMzNDsuIE1vZHVsZSBuYW1lIChNIG9wdGlvbilcbiAgMTQ6XHRcdCAgaXMgYWxzbyBcJiMzNDtudGZzM1wmIzM0Oy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbjogXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMzLnJzdFx1MDAzZVxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBOVEZTM182NEJJVF9DTFVTVEVSXG4gIDE5Olx0XHRib29sIFwmIzM0OzY0IGJpdHMgcGVyIE5URlMgY2x1c3RlcnNcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTlRGUzNfRlMgXHUwMDI2XHUwMDI2IDY0QklUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgbnRmcy5zeXMgdXNlcyAzMiBiaXRzIHBlciBjbHVzdGVycy5cbiAgMjM6XHRcdCAgSWYgYWN0aXZhdGVkIDY0IGJpdHMgcGVyIGNsdXN0ZXJzIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIDRrIGNsdXN0ZXJcbiAgMjQ6XHRcdCAgZm9yIDE2VCYjNDM7IHZvbHVtZXMuIFdpbmRvd3Mgd2lsbCBub3QgYmUgYWJsZSB0byBtb3VudCBzdWNoIHZvbHVtZXMuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBOIGhlcmUuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5URlMzX0xaWF9YUFJFU1NcbiAgMjk6XHRcdGJvb2wgXCYjMzQ7YWN0aXZhdGUgc3VwcG9ydCBvZiBleHRlcm5hbCBjb21wcmVzc2lvbnMgbHp4L3hwcmVzc1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBJbiBXaW5kb3dzIDEwIG9uZSBjYW4gdXNlIGNvbW1hbmQgXCYjMzQ7Y29tcGFjdFwmIzM0OyB0byBjb21wcmVzcyBhbnkgZmlsZXMuXG4gIDMzOlx0XHQgIDQgcG9zc2libGUgdmFyaWFudHMgb2YgY29tcHJlc3Npb24gYXJlOiB4cHJlc3M0aywgeHByZXNzOGssIHhwcmVzczE2ayBhbmQgbHp4LlxuICAzNDpcdFx0ICBJZiBhY3RpdmF0ZWQgeW91IHdpbGwgYmUgYWJsZSB0byByZWFkIHN1Y2ggZmlsZXMgY29ycmVjdGx5LlxuICAzNTpcdFxuICAzNjpcdFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xuICA0MTpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDQ6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUsXG4gIDQ1Olx0XHQgIGFuZCB0aGlzIG9wdGlvbiBzZWxlY3RzIHN1cHBvcnQgZm9yIEFDTHMgc3BlY2lmaWNhbGx5IGZvciBudGZzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIEFuYWx5c2lzIGFuZCBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgd2UgbmVlZCB0byBhc3Nlc3MgdGhlIHRyaWFnZSBjcml0ZXJpYS4gSXMgdGhpcyBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgdG8/IFllcCwgYG50ZnMzYCBpcyBhIGxlZ2l0IGZpbGUgc3lzdGVtIGluIExpbnV4LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gYG50ZnNfY3JlYXRlX2lub2RlYCBpcyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgLiBDaGVjay4KCk5leHQsIGRvZXMgdGhpcyBwb3RlbnRpYWxseSBtZXNzIHdpdGggZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gTG9va3MgbGlrZSBpdCBkb2VzOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2luZyBgZF9pbnN0YW50aWF0ZWAgdG8gYGRfaW5zdGFudGlhdGVfbmV3YCBhbmQgcmVtb3ZpbmcgdGhhdCBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSAmIzM0O3llcy4mIzM0OwoKTm93LCBpcyB0aGlzIHdvcnRoIG91ciB0aW1lIGFuZCBlZmZvcnQgdG8gZnV6ej8gQWJzb2x1dGVseS4gRmlsZSBzeXN0ZW0gaW5vZGUgY3JlYXRpb24sIGNvbWJpbmVkIHdpdGggY29uY3VycmVuY3kgYW5kIHN0YXRlIHRyYW5zaXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIElfTkVXIGhhbmRsaW5nLCBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHN5emthbGxlci4gQ3JpdGljYWwgcGF0aCwgZnV6emFibGUsIGRlZmluaXRlbHkgYSBnby4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBvdXIga2V5IGBGb2N1c1N5bWJvbHNgIGFyZS4gRGVmaW5pdGVseSBgbnRmc19jcmVhdGVfaW5vZGVgLCBhbmQgc2luY2UgdGhhdCYjMzk7cyB0aGUgY29yZSwgdGhlIGNhbGxlcnMgYXJlIGFsc28gY3J1Y2lhbDogYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtub2RgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rZGlyYCBuZWVkIHRvIGJlIGluIHRoZSBjcm9zc2hhaXJzLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiBhbnl0aGluZyBlbHNlIGluIGBudGZzM2AgY2FsbHMgYG50ZnNfY3JlYXRlX2lub2RlYC4gSSB0aGluayBJIHNhdyBzb21ldGhpbmcgYWJvdXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBmcy9udGZzMy9uYW1laS5jYC4gV29ydGggYSBxdWljayBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2NyZWF0ZV9pbm9kZXxudGZzX2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzcyLS8qXG5mcy9udGZzMy9pbm9kZS5jOjEzNzM6ICogbnRmc19jcmVhdGVfaW5vZGVcbmZzL250ZnMzL2lub2RlLmMtMTM3NC0gKlxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTM3OS0gKiAtIG50ZnNfbWtkaXJcbmZzL250ZnMzL2lub2RlLmM6MTM4MDogKiAtIG50ZnNfYXRvbWljX29wZW5cbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxuZnMvbnRmczMvaW5vZGUuYzoxMzgyOiAqIE5PVEU6IGlmIGZuZCAhPSBOVUxMIChudGZzX2F0b21pY19vcGVuKSB0aGVuIEBkaXIgaXMgbG9ja2VkXG5mcy9udGZzMy9pbm9kZS5jLTEzODMtICovXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMzL2lub2RlLmMtMTM4NS1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxuLS1cbmZzL250ZnMzL25hbWVpLmM9MTE0PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMTE2LXtcbmZzL250ZnMzL25hbWVpLmM6MTE3Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXG5mcy9udGZzMy9uYW1laS5jLTExOC1cdFx0XHRcdCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTEyND1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcbmZzL250ZnMzL25hbWVpLmM6MTI3Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgbW9kZSwgcmRldiwgTlVMTCwgMCxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVx0XHRcdFx0IE5VTEwpO1xuLS1cbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9uYW1laS5jLTIyMy1cbmZzL250ZnMzL25hbWVpLmM6MjI0Olx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRkxOSyB8IDA3NzcsIDAsXG5mcy9udGZzMy9uYW1laS5jLTIyNS1cdFx0XHRcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcbi0tXG5mcy9udGZzMy9uYW1laS5jPTIzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0yMzMte1xuZnMvbnRmczMvbmFtZWkuYzoyMzQ6XHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXG5mcy9udGZzMy9uYW1laS5jLTIzNS1cdFx0XHRcdFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9ODA1PWludCBpbm9kZV9yZWFkX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGJ5dGVzKTtcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMzL250ZnNfZnMuaC04MDctXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcbi0tXG5mcy9udGZzMy94YXR0ci5jPTY4MD1pbnQgbnRmc19zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbnRmczMveGF0dHIuYy02ODgtICpcbmZzL250ZnMzL3hhdHRyLmM6Njg5OiAqIENhbGxlZCBmcm9tIG50ZnNfY3JlYXRlX2lub2RlKCkuXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBOVEZTIEF0b21pYyBPcGVuKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhdG9taWMgb3BlbnMgYXJlIGhhbmRsZWQgaW4gTlRGUy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBudGZzX2F0b21pY19vcGVuYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvbnRmczMvbmFtZWkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIG5hbWVpIG9wZXJhdGlvbnMgaXMsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBob3cgZmlsZXMgYXJlIGNyZWF0ZWQgb3Igb3BlbmVkIHNhZmVseSBpbiBOVEZTLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGF0b21pYyBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG5hbWVpLmNgIGZpbGUgYmVjYXVzZSBpdCBnZW5lcmFsbHkgaGFuZGxlcyBuYW1lIGxvb2t1cHMsIHBhdGggdHJhdmVyc2FsLCBhbmQgdGhlIHVsdGltYXRlIGFzc29jaWF0aW9uIG9mIGEgZmlsZSBuYW1lIHdpdGggaXRzIHVuZGVybHlpbmcgaW5vZGUuIEkgd2FudCB0byBzZWUgaG93IE5URlMgZ3VhcmFudGVlcyBlaXRoZXIgY29tcGxldGUgc3VjY2VzcyBvciBjb21wbGV0ZSBmYWlsdXJlIGR1cmluZyB0aGUgb3BlbiBwcm9jZXNzLCBtaW5pbWl6aW5nIGRhdGEgY29ycnVwdGlvbiByaXNrcywgcGFydGljdWxhcmx5IGluIHRoZSBldmVudCBvZiBhIHN5c3RlbSBjcmFzaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkgYWJvdXQgaGFuZGxpbmcgdGhhdCBjcml0aWNhbCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy0xMzc5LSAqIC0gbnRmc19ta2RpclxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxuZnMvbnRmczMvaW5vZGUuYy0xMzgxLSAqXG5mcy9udGZzMy9pbm9kZS5jOjEzODI6ICogTk9URTogaWYgZm5kICE9IE5VTEwgKG50ZnNfYXRvbWljX29wZW4pIHRoZW4gQGRpciBpcyBsb2NrZWRcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWJ1Z2dpbmcgYW4gTlRGUyBBdG9taWMgT3BlbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGJlaGF2aW5nLiAgVGhlIGNvZGUgaXRzZWxmIGlzIGxpa2VseSBpbiBgZnMvbnRmczMvbmFtZWkuY2AsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gIFNpbmNlIGl0JiMzOTtzIGFuIGF0b21pYyBvcGVuLCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbnRmc19kaXJfaW5vZGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlIGRlZmluZWQgaW4gdGhlIHNhbWUgZmlsZSAoYG5hbWVpLmNgKS4gSSYjMzk7bGwgcHJvYmFibHkgZmluZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvciB0aGVyZSwgbGlrZWx5IGluIGhvdyB0aGUgZGlyZWN0b3J5IGVudHJ5IGlzIGxvb2tlZCB1cCBvciBjcmVhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYz0yOT1zdGF0aWMgaW50IG50ZnNfcmVhZF9tZnQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKm5hbWUsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy00NTgtXHRcdCAqL1xuZnMvbnRmczMvaW5vZGUuYzo0NTk6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvbnRmczMvaW5vZGUuYy00NjAtXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2bnRmc19kaXJfb3BlcmF0aW9ucztcbi0tXG5mcy9udGZzMy9pbm9kZS5jPTEzODQ9aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTE4MDMtXHRpZiAoU19JU0RJUihtb2RlKSkge1xuZnMvbnRmczMvaW5vZGUuYzoxODA0Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbmZzL250ZnMzL2lub2RlLmMtMTgwNS1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZudGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL250ZnMzL25hbWVpLmM9NDYyPXN0YXRpYyBpbnQgbnRmc19kX2NvbXBhcmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgbGVuMSxcbi0tXG5mcy9udGZzMy9uYW1laS5jLTUyOC0vLyBjbGFuZy1mb3JtYXQgb2ZmXG5mcy9udGZzMy9uYW1laS5jOjUyOTpjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvbnRmczMvbmFtZWkuYy01MzAtXHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTgyMj1zdHJ1Y3QgZGVudHJ5ICpudGZzM19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKTtcbmZzL250ZnMzL250ZnNfZnMuaC04MjMtXG5mcy9udGZzMy9udGZzX2ZzLmg6ODI0OmV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvbnRmczMvbnRmc19mcy5oLTgyNS1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBOYW1lIFJlc29sdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBuYW1lIHJlc29sdXRpb24gaW4gTlRGUywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGBmcy9udGZzM2Agc3Vic3lzdGVtLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGUgYG5hbWVpLmNgIGZpbGUgaXMgdXN1YWxseSB0aGUgZ28tdG8gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmFtZS10by1pbm9kZSBsb29rdXBzIGFuZCBwYXRoIHRyYXZlcnNhbCB3aXRoaW4gYSBmaWxlc3lzdGVtLiBOb3csIGxldCYjMzk7cyBzZWUsIGxpbmVzIDUyMC01NDAuLi4gdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBwdXp6bGUgSSYjMzk7bSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCwgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHRyZXQgPSAhbnRmc19jbXBfbmFtZXNfY3B1KHVuaTEsIHVuaTIsIHNiaS1cdTAwM2V1cGNhc2UsIGZhbHNlKSA/IDAgOiAxO1xuIDUyMjpcdFxuIDUyMzpcdG91dDpcbiA1MjQ6XHRcdGtmcmVlKHVuaTEpO1xuIDUyNTpcdFx0cmV0dXJuIHJldDtcbiA1MjY6XHR9XG4gNTI3Olx0XG4gNTI4Olx0Ly8gY2xhbmctZm9ybWF0IG9mZlxuIDUyOTpcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gNTMwOlx0XHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXG4gNTMxOlx0XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG4gNTMyOlx0XHQubGlua1x0XHQ9IG50ZnNfbGluayxcbiA1MzM6XHRcdC51bmxpbmtcdFx0PSBudGZzX3VubGluayxcbiA1MzQ6XHRcdC5zeW1saW5rXHQ9IG50ZnNfc3ltbGluayxcbiA1MzU6XHRcdC5ta2Rpclx0XHQ9IG50ZnNfbWtkaXIsXG4gNTM2Olx0XHQucm1kaXJcdFx0PSBudGZzX3JtZGlyLFxuIDUzNzpcdFx0Lm1rbm9kXHRcdD0gbnRmc19ta25vZCxcbiA1Mzg6XHRcdC5yZW5hbWVcdFx0PSBudGZzX3JlbmFtZSxcbiA1Mzk6XHRcdC5nZXRfYWNsXHQ9IG50ZnNfZ2V0X2FjbCxcbiA1NDA6XHRcdC5zZXRfYWNsXHQ9IG50ZnNfc2V0X2FjbCxcbiA1NDE6XHRcdC5zZXRhdHRyXHQ9IG50ZnNfc2V0YXR0cixcbiA1NDI6XHRcdC5nZXRhdHRyXHQ9IG50ZnNfZ2V0YXR0cixcbiA1NDM6XHRcdC5saXN0eGF0dHJcdD0gbnRmc19saXN0eGF0dHIsXG4gNTQ0Olx0XHQuZmllbWFwXHRcdD0gbnRmc19maWVtYXAsXG4gNTQ1Olx0XHQuZmlsZWF0dHJfZ2V0XHQ9IG50ZnNfZmlsZWF0dHJfZ2V0LFxuIDU0NjpcdFx0LmZpbGVhdHRyX3NldFx0PSBudGZzX2ZpbGVhdHRyX3NldCxcbiA1NDc6XHR9O1xuIDU0ODpcdFxuIDU0OTpcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMwOQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IE5URlMgRmlsZSBDcmVhdGlvbiBPcGVyYXRpb25zKioKCk9rYXksIHRoaXMgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgTlRGUyBmaWxlIGNyZWF0aW9uIG9wZXJhdGlvbnM6IGBudGZzX2NyZWF0ZV9pbm9kZWAsIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rbm9kYCwgYG50ZnNfc3ltbGlua2AsIGFuZCBgbnRmc19ta2RpcmAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhlc2UgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEZ1cnRoZXJtb3JlLCBgTlRGUzNfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBzZXR1cC4gTm90aGluZyBjb21wbGV4IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHVwIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTM19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfY3JlYXRlX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O250ZnNfbWtub2QmIzM0OywKICAgICYjMzQ7bnRmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O250ZnNfbWtkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2NyZWF0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX21rbm9kJiMzNDssCiAgICAmIzM0O250ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtudGZzX21rZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4ODVjZjI2MDJkYjI5NmRhN2FmN2E5MzQwZDM1NGEzODhmMmYyMzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmMKaW5kZXggNTZiNGY2NDY5YTI4MC4uNGFjMjZjODBiZDM0ZiAxMDA2NDQKLS0tIGEvZnMvbnRmczMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbm9kZS5jCkBAIC0xODY2LDEwICYjNDM7MTg2NiwxMCBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIG91dDY7CiAKIAkvKgotCSAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlJiMzOTsgYWZ0ZXIgaW5vZGUtJmd0O2lfb3AgaXMgc2V0CiYjNDM7CSAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLSZndDtpX29wIGlzIHNldAogCSAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uCiAJICovCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKJiM0MzsJZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7CiAKIAkvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovCiAJaW5vZGVfc2V0X2F0aW1lX3RvX3RzKGlub2RlLCBuaS0mZ3Q7aV9jcnRpbWUpOwpAQCAtMTkxNyw5ICYjNDM7MTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFmbmQpCiAJCW5pX3VubG9jayhkaXJfbmkpOwogCi0JaWYgKCFlcnIpCi0JCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEZTMyBJbm9kZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBmcy9udGZzMy9pbm9kZS5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBpbm9kZXMgaW4gdGhlIE5URlMzIGZpbGVzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBvciB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYG50ZnNfY3JlYXRlX2lub2RlYC4gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBteSBiZXN0IGJldCB0byBxdWlja2x5IGdldCB0byB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNyZWF0aW5nIHRoZSBpbm9kZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODUwOlx0XHRcdFx0XHQgICAgTlVMTCk7XG4xODUxOlx0XHRcdGlmIChhdHRyKSB7XG4xODUyOlx0XHRcdFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHRmbiA9IHJlc2lkZW50X2RhdGFfZXgoYXR0ciwgU0laRU9GX0FUVFJJQlVURV9GSUxFTkFNRSk7XG4xODU1Olx0XHRcdFx0aWYgKGZuKVxuMTg1NjpcdFx0XHRcdFx0Zm4tXHUwMDNlZHVwLmV4dGVuZF9kYXRhID0gZm5hbWUtXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xuMTg1NzpcdFx0XHR9XG4xODU4Olx0XHR9XG4xODU5Olx0XG4xODYwOlx0XHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xuMTg2MTpcdFx0bmktXHUwMDNlbmlfZmxhZ3MgXHUwMDI2PSB+TklfRkxBR19VUERBVEVfUEFSRU5UO1xuMTg2MjpcdFxuMTg2MzpcdFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXG4xODY0Olx0XHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcdTAwMjZkaXJfbmktXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xuMTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbjE5MTA6XHRcdG50ZnNfbWFya19yZWNfZnJlZShzYmksIGlubywgZmFsc2UpO1xuMTkxMTpcdFxuMTkxMjpcdG91dDI6XG4xOTEzOlx0XHRrZnJlZShuZXdfZGUpO1xuMTkxNDpcdFx0a2ZyZWUocnApO1xuMTkxNTpcdFxuMTkxNjpcdG91dDE6XG4xOTE3Olx0XHRpZiAoIWZuZClcbjE5MTg6XHRcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4xOTE5Olx0XG4xOTIwOlx0XHRyZXR1cm4gZXJyO1xuMTkyMTpcdH1cbjE5MjI6XHRcbjE5MjM6XHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbjE5MjQ6XHR7XG4xOTI1Olx0XHRpbnQgZXJyO1xuMTkyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbjE5Mjc6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuMTkyODpcdFx0c3RydWN0IE5URlNfREUgKmRlO1xuMTkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipBbmFseXppbmcgYGRfaW5zdGFudGlhdGVfbmV3YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dC4gSXQgbG9va3MgbGlrZSBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGlzIG91ciB0YXJnZXQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgd29ya3MuIEkgc2VlIGl0IHN0YXJ0cyB3aXRoIGEgYFdBUk5fT05gIGNoZWNrLCBlbnN1cmluZyB0aGUgYGlub2RlYCBpcyBpbiBhIG5ldyBzdGF0ZSB1c2luZyB0aGUgYElfTkVXYCBmbGFnLiBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBjaGVjayBpbW1lZGlhdGVseSBzdWdnZXN0cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHNlcXVlbmNpbmcgaXNzdWVzIGlmIHRoZSBgaW5vZGVgIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCwgd2hpY2ggaXMgY3JpdGljYWw7IGlmIHRoZSBpbm9kZSB3YXNuJiMzOTt0IHByb3Blcmx5IGxvY2tlZCwgb3IgaWYgdGhpcyBjYWxsIGdldHMgbWlzc2VkLCBpdCB3aWxsIGNhdXNlIHJlYWwgaXNzdWVzLiBBZnRlciB0aGF0LCB3ZSYjMzk7cmUgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgd29yayBsaWtlbHkgaGFwcGVucyDigJMgYXNzb2NpYXRpbmcgdGhlIGBpbm9kZWAgd2l0aCB0aGUgYGRlbnRyeWAsIGVmZmVjdGl2ZWx5ICYjMzQ7aW5zdGFudGlhdGluZyYjMzQ7IHRoZSBuZXcgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSB0cmVlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHdhcm5pbmcgbWFrZXMgbWUgY3VyaW91cyBhYm91dCB0aGUgc2NlbmFyaW9zIHRoYXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlOyBJIHdpbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGRfaW5zdGFudGlhdGVfbmV3YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24sIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSByZXN0IG9mIHRoZSBmaWxlc3lzdGVtLiBJIHdpbGwgbG9vayB0aGVyZSBmb3IgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkX2luc3RhbnRpYXRlX25ldyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTExOTQ9YmUgcmV0dXJuZWQuICBBbnkgZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkIHdpdGggRVJSX1BUUigpLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk1LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTk2OkluIGdlbmVyYWwsIGZpbGVzeXN0ZW1zIHdoaWNoIHVzZSBkX2luc3RhbnRpYXRlX25ldygpIHRvIGluc3RhbGwgdGhlIG5ld1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk3LWlub2RlIGNhbiBzYWZlbHkgcmV0dXJuIE5VTEwuICBGaWxlc3lzdGVtcyB3aGljaCBtYXkgbm90IGhhdmUgYW4gSV9ORVcgaW5vZGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9NDUxPW90aGVyd2lzZSBub3RlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkxLVx0dG8gc3VwcG9ydCBjcmVhdGluZyBzdWJkaXJlY3Rvcmllcy4gIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG9cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDo0OTI6XHRjYWxsIGRfaW5zdGFudGlhdGVfbmV3KCkganVzdCBhcyB5b3Ugd291bGQgaW4gdGhlIGNyZWF0ZSgpIG1ldGhvZC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC00OTMtXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6NDk0Olx0SWYgZF9pbnN0YW50aWF0ZV9uZXcoKSBpcyBub3QgdXNlZCBhbmQgaWYgdGhlIGZoX3RvX2RlbnRyeSgpXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDk1LVx0ZXhwb3J0IG9wZXJhdGlvbiBpcyBwcm92aWRlZCwgb3IgaWYgdGhlIHN0b3JhZ2UgbWlnaHQgYmVcbi0tXG5mcy9idHJmcy9pbm9kZS5jPTY5Njk9c3RhdGljIGludCBidHJmc19jcmVhdGVfY29tbW9uKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvYnRyZnMvaW5vZGUuYy02OTk2LVx0XHRcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfRkFTVFBFUk1fTUFZX0VYRUM7XG5mcy9idHJmcy9pbm9kZS5jOjY5OTc6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvYnRyZnMvaW5vZGUuYy02OTk4LVx0fVxuLS1cbmZzL2J0cmZzL2lub2RlLmM9OTAyOT1zdGF0aWMgaW50IGJ0cmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2J0cmZzL2lub2RlLmMtOTEyMC1cbmZzL2J0cmZzL2lub2RlLmM6OTEyMTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvYnRyZnMvaW5vZGUuYy05MTIyLVx0cmV0ID0gMDtcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTU1Mj1zdGF0aWMgbm9pbmxpbmUgaW50IGNyZWF0ZV9zdWJ2b2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy03MzQtXHRzZXRfYml0KEJUUkZTX1JPT1RfT1JQSEFOX0NMRUFOVVAsIFx1MDAyNm5ld19yb290LVx1MDAzZXN0YXRlKTtcbmZzL2J0cmZzL2lvY3RsLmM6NzM1Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBuZXdfaW5vZGVfYXJncy5pbm9kZSk7XG5mcy9idHJmcy9pb2N0bC5jLTczNi1cdG5ld19pbm9kZV9hcmdzLmlub2RlID0gTlVMTDtcbi0tXG5mcy9idHJmcy94YXR0ci5jPTIxND1pbnQgYnRyZnNfc2V0eGF0dHJfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9idHJmcy94YXR0ci5jLTIzMi1cdFx0ICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gc21hY2sgaXMgZW5hYmxlZCBhbmQgYSBkaXJlY3RvcnkgaXMgYmVpbmdcbmZzL2J0cmZzL3hhdHRyLmM6MjMzOlx0XHQgKiBjcmVhdGVkLiBJdCBoYXBwZW5zIHRocm91Z2ggZF9pbnN0YW50aWF0ZV9uZXcoKSwgd2hpY2ggY2FsbHNcbmZzL2J0cmZzL3hhdHRyLmMtMjM0LVx0XHQgKiBzbWFja19kX2luc3RhbnRpYXRlKCksIHdoaWNoIGluIHR1cm4gY2FsbHMgX192ZnNfc2V0eGF0dHIoKSB0b1xuLS1cbmZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcbi0tXG5mcy9kY2FjaGUuYy0yMTkxLSAqL1xuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjE5My17XG4tLVxuZnMvZGNhY2hlLmMtMjIxMC19XG5mcy9kY2FjaGUuYzoyMjExOkVYUE9SVF9TWU1CT0woZF9pbnN0YW50aWF0ZV9uZXcpO1xuZnMvZGNhY2hlLmMtMjIxMi1cbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jPTI2OT1lY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTItXHR9XG5mcy9lY3J5cHRmcy9pbm9kZS5jOjI5MzpcdGRfaW5zdGFudGlhdGVfbmV3KGVjcnlwdGZzX2RlbnRyeSwgZWNyeXB0ZnNfaW5vZGUpO1xuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTQtb3V0OlxuLS1cbmZzL2V4dDIvbmFtZWkuYz0zOD1zdGF0aWMgaW5saW5lIGludCBleHQyX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDIvbmFtZWkuYy00MS1cdGlmICghZXJyKSB7XG5mcy9leHQyL25hbWVpLmM6NDI6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZXh0Mi9uYW1laS5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQyL25hbWVpLmM9MjI2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCxcbi0tXG5mcy9leHQyL25hbWVpLmMtMjU3LVxuZnMvZXh0Mi9uYW1laS5jOjI1ODpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZXh0Mi9uYW1laS5jLTI1OS1vdXQ6XG4tLVxuZnMvZXh0NC9uYW1laS5jPTI3ODY9c3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjc5NS1cdFx0XHRleHQ0X2hhbmRsZV9zeW5jKGhhbmRsZSk7XG5mcy9leHQ0L25hbWVpLmM6Mjc5NjpcdFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9leHQ0L25hbWVpLmMtMjc5Ny1cdFx0Kmlub2RlcCA9IE5VTEw7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTI5OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMDQ3LVx0XHRnb3RvIG91dF9jbGVhcl9pbm9kZTtcbmZzL2V4dDQvbmFtZWkuYzozMDQ4Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9leHQ0L25hbWVpLmMtMzA0OS1cdGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZSwgZGVudHJ5KTtcbi0tXG5mcy9mMmZzL25hbWVpLmM9MzY4PXN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy00MDItXG5mcy9mMmZzL25hbWVpLmM6NDAzOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNDA0LVxuLS1cbmZzL2YyZnMvbmFtZWkuYz02NjU9c3RhdGljIGludCBmMmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy03MTctXG5mcy9mMmZzL25hbWVpLmM6NzE4Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNzE5LVxuLS1cbmZzL2YyZnMvbmFtZWkuYy03NDMtXHRcdC8qIEdpdmUgdXAgYW5kIGxlYXZlIGEgYnJva2VuIHN5bWxpbmsuICovXG5mcy9mMmZzL25hbWVpLmM6NzQ0Olx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL2YyZnMvbmFtZWkuYy03NDUtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2YyZnMvbmFtZWkuYz03NTQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmYyZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMvbmFtZWkuYy03ODYtXG5mcy9mMmZzL25hbWVpLmM6Nzg3Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9mMmZzL25hbWVpLmMtNzg4LVxuLS1cbmZzL2YyZnMvbmFtZWkuYz04MTM9c3RhdGljIGludCBmMmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9mMmZzL25hbWVpLmMtODQ0LVxuZnMvZjJmcy9uYW1laS5jOjg0NTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvZjJmcy9uYW1laS5jLTg0Ni1cbi0tXG5mcy9nZnMyL2lub2RlLmM9NzAwPXN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9nZnMyL2lub2RlLmMtOTAxLVx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG5mcy9nZnMyL2lub2RlLmM6OTAyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9nZnMyL2lub2RlLmMtOTAzLVx0LyogQWZ0ZXIgaW5zdGFudGlhdGUsIGVycm9ycyBzaG91bGQgcmVzdWx0IGluIGV2aWN0IHdoaWNoIHdpbGwgZGVzdHJveVxuLS1cbmZzL2pmZnMyL2Rpci5jPTE2NT1zdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcbi0tXG5mcy9qZmZzMi9kaXIuYy0yMTctXG5mcy9qZmZzMi9kaXIuYzoyMTg6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL2pmZnMyL2Rpci5jLTIxOS1cdHJldHVybiAwO1xuLS1cbmZzL2pmZnMyL2Rpci5jPTI4Nz1zdGF0aWMgaW50IGpmZnMyX3N5bWxpbmsgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxuLS1cbmZzL2pmZnMyL2Rpci5jLTQ0MS1cbmZzL2pmZnMyL2Rpci5jOjQ0MjpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvamZmczIvZGlyLmMtNDQzLVx0cmV0dXJuIDA7XG4tLVxuZnMvamZmczIvZGlyLmM9NDUxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9ta2RpciAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tLVxuZnMvamZmczIvZGlyLmMtNTg1LVxuZnMvamZmczIvZGlyLmM6NTg2Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9qZmZzMi9kaXIuYy01ODctXHRyZXR1cm4gTlVMTDtcbi0tXG5mcy9qZmZzMi9kaXIuYz02MjM9c3RhdGljIGludCBqZmZzMl9ta25vZCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tLVxuZnMvamZmczIvZGlyLmMtNzYzLVxuZnMvamZmczIvZGlyLmM6NzY0Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9qZmZzMi9kaXIuYy03NjUtXHRyZXR1cm4gMDtcbi0tXG5mcy9qZnMvbmFtZWkuYz02Mz1zdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxuLS1cbmZzL2pmcy9uYW1laS5jLTE2Ny1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxNjg6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xuZnMvamZzL25hbWVpLmMtMTY5LVx0fVxuLS1cbmZzL2pmcy9uYW1laS5jPTE5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcbi0tXG5mcy9qZnMvbmFtZWkuYy0zMDEtXHR9IGVsc2Uge1xuZnMvamZzL25hbWVpLmM6MzAyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTMwMy1cdH1cbi0tXG5mcy9qZnMvbmFtZWkuYz04Nzk9c3RhdGljIGludCBqZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXAsXG4tLVxuZnMvamZzL25hbWVpLmMtMTA1MS1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxMDUyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTEwNTMtXHR9XG4tLVxuZnMvamZzL25hbWVpLmM9MTM1OD1zdGF0aWMgaW50IGpmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvamZzL25hbWVpLmMtMTQ0MC1cdH0gZWxzZSB7XG5mcy9qZnMvbmFtZWkuYzoxNDQxOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcbmZzL2pmcy9uYW1laS5jLTE0NDItXHR9XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9MzU9c3RhdGljIGlubGluZSBpbnQgbmlsZnNfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmlsZnMyL25hbWVpLmMtMzktXHRpZiAoIWVycikge1xuZnMvbmlsZnMyL25hbWVpLmM6NDA6XHRcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmMtNDEtXHRcdHJldHVybiAwO1xuLS1cbmZzL25pbGZzMi9uYW1laS5jPTIyMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTI1My1cdG5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmM6MjU0Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9uaWxmczIvbmFtZWkuYy0yNTUtb3V0OlxuLS1cbmZzL250ZnMvbmFtZWkuYz0zOTQ9c3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtNDkwLVx0ICogUHJldmVudCBpZ2V0IGFuZCB3cml0ZWJhY2sgZnJvbSBmaW5kaW5nIHRoaXMgaW5vZGUuXG5mcy9udGZzL25hbWVpLmM6NDkxOlx0ICogQ2FsbGVyIG11c3QgY2FsbCBkX2luc3RhbnRpYXRlX25ldyBpbnN0ZWFkIG9mIGRfaW5zdGFudGlhdGUuXG5mcy9udGZzL25hbWVpLmMtNDkyLVx0ICovXG4tLVxuZnMvbnRmcy9uYW1laS5jPTczNT1zdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtNzY3LVxuZnMvbnRmcy9uYW1laS5jOjc2ODpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgVkZTX0kobmkpKTtcbmZzL250ZnMvbmFtZWkuYy03NjktXG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTI9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg4LVxuZnMvbnRmcy9uYW1laS5jOjEwODk6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIFZGU19JKG5pKSk7XG5mcy9udGZzL25hbWVpLmMtMTA5MC1cdHJldHVybiBOVUxMO1xuLS1cbmZzL250ZnMvbmFtZWkuYz0xNDAyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ0NC1cdHZpLVx1MDAzZWlfc2l6ZSA9IHN5bWxlbjtcbmZzL250ZnMvbmFtZWkuYzoxNDQ1Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCB2aSk7XG5mcy9udGZzL25hbWVpLmMtMTQ0Ni1vdXQ6XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0NTA9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ5Ni1cbmZzL250ZnMvbmFtZWkuYzoxNDk3Olx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xuZnMvbnRmcy9uYW1laS5jLTE0OTgtb3V0OlxuLS1cbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTg2OC1cdC8qXG5mcy9udGZzMy9pbm9kZS5jOjE4Njk6XHQgKiBDYWxsICYjMzk7ZF9pbnN0YW50aWF0ZV9uZXcmIzM5OyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuZnMvbnRmczMvaW5vZGUuYy0xODcwLVx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cbmZzL250ZnMzL2lub2RlLmMtMTg3MS1cdCAqL1xuZnMvbnRmczMvaW5vZGUuYzoxODcyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy9udGZzMy9pbm9kZS5jLTE4NzMtXG4tLVxuZnMvb3JhbmdlZnMvbmFtZWkuYz0xOD1zdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTc0LVxuZnMvb3JhbmdlZnMvbmFtZWkuYzo3NTpcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xuZnMvb3JhbmdlZnMvbmFtZWkuYy03Ni1cdG9yYW5nZWZzX3NldF90aW1lb3V0KGRlbnRyeSk7XG4tLVxuZnMvb3JhbmdlZnMvbmFtZWkuYz0yMTQ9c3RhdGljIGludCBvcmFuZ2Vmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMjgwLVxuZnMvb3JhbmdlZnMvbmFtZWkuYzoyODE6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL29yYW5nZWZzL25hbWVpLmMtMjgyLVx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jPTI5OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb3JhbmdlZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMzQ1LVxuZnMvb3JhbmdlZnMvbmFtZWkuYzozNDY6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL29yYW5nZWZzL25hbWVpLmMtMzQ3LVx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmM9Mjk4PXN0YXRpYyBpbnQgb3ZsX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmMtMzE4LVx0XHQgKiBmaWxlIGhhbmRsZXMsIG5lZWQgdG8gdXNlIG92bF9nZXRfaW5vZGVfbG9ja2VkKCkgYW5kXG5mcy9vdmVybGF5ZnMvZGlyLmM6MzE5Olx0XHQgKiBkX2luc3RhbnRpYXRlX25ldygpIGhlcmUgdG8gcHJldmVudCBmcm9tIGNyZWF0aW5nIHR3b1xuZnMvb3ZlcmxheWZzL2Rpci5jLTMyMC1cdFx0ICogaGFzaGVkIGRpcmVjdG9yeSBpbm9kZSBhbGlhc2VzLiAgV2UgdGhlbiBuZWVkIHRvIHJldHVyblxuLS1cbmZzL3VkZi9uYW1laS5jPTM0Nj1zdGF0aWMgaW50IHVkZl9hZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy91ZGYvbmFtZWkuYy0zNjctXHR1ZGZfYWRkX2ZpZF9jb3VudGVyKGRpci1cdTAwM2VpX3NiLCBmYWxzZSwgMSk7XG5mcy91ZGYvbmFtZWkuYzozNjg6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3VkZi9uYW1laS5jLTM2OS1cbi0tXG5mcy91ZGYvbmFtZWkuYz00MjI9c3RhdGljIHN0cnVjdCBkZW50cnkgKnVkZl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvdWRmL25hbWVpLmMtNDcxLVx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuZnMvdWRmL25hbWVpLmM6NDcyOlx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG5mcy91ZGYvbmFtZWkuYy00NzMtXG4tLVxuZnMvdWZzL25hbWVpLmM9Mzg9c3RhdGljIGlubGluZSBpbnQgdWZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3Vmcy9uYW1laS5jLTQxLVx0aWYgKCFlcnIpIHtcbmZzL3Vmcy9uYW1laS5jOjQyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3Vmcy9uYW1laS5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy91ZnMvbmFtZWkuYz0xNjg9c3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsIHN0cnVjdCBpbm9kZSAqIGRpcixcbi0tXG5mcy91ZnMvbmFtZWkuYy0xOTQtXG5mcy91ZnMvbmFtZWkuYzoxOTU6XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbmZzL3Vmcy9uYW1laS5jLTE5Ni1cdHJldHVybiBOVUxMO1xuLS1cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg9MjUwPWV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI1MTpleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlX25ldyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkX2luc3RhbnRpYXRlX25ld2AqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgaW4gYGZzL2RjYWNoZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbDsgaXQmIzM5O3Mgd2hlcmUgd2UgYWN0dWFsbHkgYnJpbmcgYSBkZW50cnkgdG8gbGlmZSwgcmlnaHQ/IEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIG5pdHR5LWdyaXR0eSBvZiBsaW5raW5nIHRoZSBkZW50cnkgaW50byB0aGUgZGNhY2hlIHN0cnVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcg4oCTIGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgYWNjZXNzIHRvIHRoZSBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhlIHZhcmlvdXMgbGlzdHMgaXQgbWFpbnRhaW5zLiBJcyBpdCB1c2luZyBSQ1UgaGVyZSwgb3Igc29tZXRoaW5nIG1vcmUgdHJhZGl0aW9uYWwgbGlrZSBzcGlubG9ja3MgYW5kIG11dGV4ZXM/IFRoZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFyb3VuZCBjcmVhdGluZyBuZXcgZGVudHJpZXMgYXJlIHNpZ25pZmljYW50LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbmV3IGRlbnRyeTogYGRfY291bnRgLCBgZF9pbm9kZWAsIGZsYWdzIGxpa2UgYERDQUNIRV9SRUZFUkVOQ0VEYC4gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbmQgd2hlbiBhcmUgdGhleSBzZXQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGlub2RlIGxheWVyPyBTcGVjaWZpY2FsbHksIGlzIGl0IGRvaW5nIGFuIGBpbm9kZV9nZXRgIGF0IHRoaXMgcG9pbnQ/IEFuZCBob3cgaXMgdGhlICYjMzQ7bmFtZSYjMzQ7IGluaXRpYWxpemVkLCBzaW5jZSB0aGUgbmFtZSBpcyBwcm9iYWJseSB0aGUgZXNzZW50aWFsIHBhcnQgb2YgdGhlIGxvb2t1cCBrZXkgYW5kIGlzIGEgZnJlcXVlbnQgY29udHJpYnV0b3IgdG8gcHJvYmxlbXM/CgpBbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIHdpdGhpbiB0aGlzIHJvdXRpbmU/IEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGNvbnNpc3RlbmN5IGV2ZW4gaWYgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGR1cmluZyBkZW50cnkgY3JlYXRpb24/IFNlZWluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9idXN0bmVzcy4gSSYjMzk7bSBsb29raW5nIGZvciBncmFjZWZ1bCBmYWlsdXJlIG1vZGVzLgoKRmluYWxseSwgZG9lcyB0aGlzIGZ1bmN0aW9uIGRvIGFueSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBpbm9kZSBkYXRhLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBjb29yZGluYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHN5c3RlbT8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZGVudHJ5IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gSXQgYWxsIHN0YXJ0cyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTkwOlx0ICogdW5sb2NrX25ld19pbm9kZSgpIGNvbWJpbmF0aW9ucy5cbjIxOTE6XHQgKi9cbjIxOTI6XHR2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjE5MzpcdHtcbjIxOTQ6XHRcdEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpO1xuMjE5NTpcdFx0QlVHX09OKCFpbm9kZSk7XG4yMTk2Olx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG4yMTk3Olx0XHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMTk4Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIxOTk6XHRcdHNwaW5fbG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMDpcdFx0X19kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7XG4yMjAxOlx0XHRzcGluX3VubG9jayhcdTAwMjZlbnRyeS1cdTAwM2VkX2xvY2spO1xuMjIwMjpcdFx0V0FSTl9PTighKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX05FVykpO1xuMjIwMzpcdFx0LypcbjIyMDQ6XHRcdCAqIFBhaXJlZCB3aXRoIGlncmFiX2Zyb21faGFzaCgpXG4yMjA1Olx0XHQgKi9cbjIyMDY6XHRcdHNtcF93bWIoKTtcbjIyMDc6XHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX05FVyB8IElfQ1JFQVRJTkcpO1xuMjIwODpcdFx0aW5vZGVfd2FrZV91cF9iaXQoaW5vZGUsIF9fSV9ORVcpO1xuMjIwOTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyMTA6XHR9XG4yMjExOlx0RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlX25ldyk7XG4yMjEyOlx0XG4yMjEzOlx0c3RydWN0IGRlbnRyeSAqZF9tYWtlX3Jvb3Qoc3RydWN0IGlub2RlICpyb290X2lub2RlKVxuMjIxNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbnRmc19jcmVhdGVfaW5vZGVgIGZ1bmN0aW9uIGluIGBmcy9udGZzMy9pbm9kZS5jYC4gQmVmb3JlLCBpdCB3YXMgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgYW5kIHRoZW4gYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gSSYjMzk7bSBzZWVpbmcgbm93IHRoYXQgYGRfaW5zdGFudGlhdGVfbmV3YCBpcyBiZWluZyB1c2VkIGluc3RlYWQuIEFoLCByaWdodCEgVGhlIG9yaWdpbmFsIG1ldGhvZCwgYGRfaW5zdGFudGlhdGVgIGZvbGxvd2VkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3MsIHdhc24mIzM5O3QgY2xlYXJpbmcgYElfTkVXYC4gVGhpcyBjcmVhdGVkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBwcm9ibGVtcywgZXNwZWNpYWxseSB3aXRoIExTTS9zZWN1cml0eSBob29rcyBhbmQgY29uY3VycmVudCBvcGVyYXRpb25zLCBiZWNhdXNlIHRoZSBpbm9kZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBpbnN0YW50aWF0ZWQgKmJlZm9yZSogd2UgY2FsbGVkIGB1bmxvY2tfbmV3X2lub2RlYC4gVGhlIG5ldyBhcHByb2FjaCwgYGRfaW5zdGFudGlhdGVfbmV3YCwgbmVhdGx5IGNvbWJpbmVzIHRoZSBzZWN1cml0eSBjaGVja3MsIHRoZSBhY3R1YWwgaW5zdGFudGlhdGlvbiwgYW5kIGNsZWFyaW5nIG9mIGBJX05FV2AgYWxsIHVuZGVyIGBpbm9kZS0mZ3Q7aV9sb2NrYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQgZWxpbWluYXRlcyB0aGF0IHNlcGFyYXRlIGNhbGwgdG8gYHVubG9ja19uZXdfaW5vZGVgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGNsZWFuZXIgYW5kIHNhZmVyLgoKTm93LCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSB0aG9yb3VnaCBhbmQgc2VlIGlmIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgbmV3IGBkX2luc3RhbnRpYXRlX25ld2AgYWxsb2NhdGlvbiBoYXBwZW4gYW55d2hlcmU/IE5vcGUuIERvZXMgaXQgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGFueSBtZW1vcnkgYm91bmRzPyBObywgbm90IGF0IGFsbC4gQW5kIHdoYXQgYWJvdXQgY29weWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gT2theSwgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyBoZXJlIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBEb2VzIHRoaXMgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzPyBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRob3NlIGVpdGhlci4gT2theSwgYmFzZWQgb24gdGhpcyBxdWljayBhc3Nlc3NtZW50LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2VsbC1jb250YWluZWQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVtYWluaW5nIGNoYW5nZXMgaW4gdGhlIGZ1bmN0aW9uLCBidXQgc28gZmFyIHNvIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2NTpcdFx0aWYgKGVycilcbjE4NjY6XHRcdFx0Z290byBvdXQ2O1xuMTg2NzpcdFxuMTg2ODpcdFx0LypcbjE4Njk6XHRcdCAqIENhbGwgJiMzOTtkX2luc3RhbnRpYXRlX25ldyYjMzk7IGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4xODcwOlx0XHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuMTg3MTpcdFx0ICovXG4xODcyOlx0XHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbjE4NzM6XHRcbjE4NzQ6XHRcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbjE4NzU6XHRcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuMTg3NjpcdFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cdTAwM2VpX2NydGltZSk7XG4xODc3Olx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzg6XHRcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4Nzk6XHRcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbjE4ODI6XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuMTg4MzpcdFxuMTg4NDpcdFx0LyogTm9ybWFsIGV4aXQuICovXG4xODg1Olx0XHRnb3RvIG91dDI7XG4xODg2Olx0XG4xODg3Olx0b3V0NjpcbjE4ODg6XHRcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xuMTg4OTpcdFx0aWYgKGF0dHIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlbm9uX3Jlcykge1xuMTg5MDpcdFx0XHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xuMTg5MTpcdFx0XHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcbjE4OTI6XHRcdFx0cnVuX2luaXQoXHUwMDI2cnVuKTtcbjE4OTM6XHRcdFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XG4xODk0Olx0XHRcdHJ1bl9jbG9zZShcdTAwMjZydW4pO1xuMTg5NTpcdFx0fVxuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHJwX2luc2VydGVkKVxuMTg5ODpcdFx0XHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXHUwMDI2bmV3X2RlLVx1MDAzZXJlZik7XG4xODk5Olx0XG4xOTAwOlx0b3V0NTpcbjE5MDE6XHRcdGlmICghU19JU0RJUihtb2RlKSlcbjE5MDI6XHRcdFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcdTAwMjZuaS1cdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xuMTkwMzpcdFxuMTkwNDpcdG91dDQ6XG4xOTA1Olx0XHRjbGVhcl9yZWNfaW51c2UocmVjKTtcbjE5MDY6XHRcdGNsZWFyX25saW5rKGlub2RlKTtcbjE5MDc6XHRcdG5pLVx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XG4xOTA4Olx0XHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XG4xOTA5Olx0b3V0MzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODQKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgVkZTIEFQSSBtaWdyYXRpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgdGhlIG9sZGVyIGBkX2luc3RhbnRpYXRlYCBhbmQgYHVubG9ja19uZXdfaW5vZGVgIHNlcXVlbmNlIHdpdGggdGhlIG1vcmUgbW9kZXJuIGBkX2luc3RhbnRpYXRlX25ld2AgY2FsbCB3aXRoaW4gdGhlIGBudGZzX2NyZWF0ZV9pbm9kZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjb21tb24gYW5kIGdlbmVyYWxseSBzYWZlIHByYWN0aWNlIGZvciBoYW5kbGluZyBuZXdseSBhbGxvY2F0ZWQgaW5vZGVzLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHJhY2UgY29uZGl0aW9ucy4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSByaXNrIGZhY3RvcnMgc3VjaCBhcyBzZW5kaW5nIHBhcnRpYWxseSBpbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYW5pcHVsYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLgoKQW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIFZGUyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgaW5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoYW5rZnVsbHksIHRoZXNlIHR5cGVzIG9mIHByb2JsZW1zIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBpbnN0cnVtZW50YXRpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCwgYWxvbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIGFzc2VydGlvbnMgbGlrZSBgV0FSTl9PTmAgYW5kIGBCVUdfT05gLiBJJiMzOTttIHRoZXJlZm9yZSBjb21mb3J0YWJsZSB0aGF0IHRoZXkgYXJlIGNvdmVyZWQuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSBiZWxpZXZlIHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOIHRvIGJlIGFjdGl2YXRlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgY2xlYW4gYW5kIHdlbGwtdW5kZXJzdG9vZCBjaGFuZ2UuIExldCYjMzk7cyBzaWduYWwgdGhhdCByZXN1bHQsIGFuZCBleHBsaWNpdGx5IHN0YXRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTlRGUzMgaW5vZGUgY3JlYXRpb24gaW4gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjYWxsIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAgaW5zdGVhZCBvZiBjYWxsaW5nIGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpYCBmb2xsb3dlZCBsYXRlciBieSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgLiBUaGlzIGNoYW5nZSBwZXJ0YWlucyBzdHJpY3RseSB0byBWRlMgaW5vZGUgbGlmZWN5Y2xlIHN0YXRlIG1hbmFnZW1lbnQgKGNsZWFyaW5nIGBJX05FV2AgYXRvbWljYWx5IHVwb24gZGVudHJ5IGluc3RhbnRpYXRpb24pIGFuZCBsb2NraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG9wZXJhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGlub2RlIHN0YXRlIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgTE9DS0RFUCwgYW5kIG1lbW9yeSBlcnJvcnMgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNC41NDUzMTEzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDE0NjA2NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBudGZzX2NyZWF0ZV9pbm9kZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGRfaW5zdGFudGlhdGUoKSB0byBkX2luc3RhbnRpYXRlX25ldygpIGFuZCByZW1vdmluZyB1bmxvY2tfbmV3X2lub2RlKCksIHdoaWNoIGFmZmVjdHMgaW5vZGUgc3RhdGUgbWFuYWdlbWVudCBhbmQgZGVudHJ5IGluc3RhbnRpYXRpb24gaW4gdGhlIHJlYWNoYWJsZSBudGZzMyBmaWxlc3lzdGVtLiBGdXp6aW5nIGNhbiBoZWxwIHRlc3QgaW5vZGUgY3JlYXRpb24gYW5kIHVubG9jayBzZW1hbnRpY3MgYWNyb3NzIE5URlMgY3JlYXRpb24gcGF0aHMgKGNyZWF0LCBta25vZCwgc3ltbGluaywgbWtkaXIpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNC41NDUzMTgzMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI4NjAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5vZGUuYyBiL2ZzL250ZnMzL2lub2RlLmNcXG5pbmRleCA1NmI0ZjY0NjlhMjgwLi40YWMyNmM4MGJkMzRmIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMzL2lub2RlLmNcXG4rKysgYi9mcy9udGZzMy9pbm9kZS5jXFxuQEAgLTE4NjYsMTAgKzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0Z290byBvdXQ2O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZScgYWZ0ZXIgaW5vZGUtXFx1MDAzZWlfb3AgaXMgc2V0XFxuK1xcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG4gXFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG4gXFx0ICovXFxuLVxcdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XFxuK1xcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbiBcXG4gXFx0LyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqL1xcbiBcXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuQEAgLTE5MTcsOSArMTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZm5kKVxcbiBcXHRcXHRuaV91bmxvY2soZGlyX25pKTtcXG4gXFxuLVxcdGlmICghZXJyKVxcbi1cXHRcXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcXG4tXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjE1Ljk4ODc2MzA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDkwMDMzODY4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2NyZWF0ZV9pbm9kZVwiLFxuICAgIFwibnRmc19jcmVhdGVcIixcbiAgICBcIm50ZnNfbWtub2RcIixcbiAgICBcIm50ZnNfc3ltbGlua1wiLFxuICAgIFwibnRmc19ta2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG50ZnNfY3JlYXRlX2lub2RlKCkgYnkgc3dpdGNoaW5nIGZyb20gZF9pbnN0YW50aWF0ZSgpIHRvIGRfaW5zdGFudGlhdGVfbmV3KCkgYW5kIHJlbW92aW5nIHVubG9ja19uZXdfaW5vZGUoKSwgd2hpY2ggYWZmZWN0cyBpbm9kZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkZW50cnkgaW5zdGFudGlhdGlvbiBpbiB0aGUgcmVhY2hhYmxlIG50ZnMzIGZpbGVzeXN0ZW0uIEZ1enppbmcgY2FuIGhlbHAgdGVzdCBpbm9kZSBjcmVhdGlvbiBhbmQgdW5sb2NrIHNlbWFudGljcyBhY3Jvc3MgTlRGUyBjcmVhdGlvbiBwYXRocyAoY3JlYXQsIG1rbm9kLCBzeW1saW5rLCBta2RpcikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4NWNmMjYwMmRiMjk2ZGE3YWY3YTkzNDBkMzU0YTM4OGYyZjIzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbm9kZS5jIGIvZnMvbnRmczMvaW5vZGUuY1xuaW5kZXggNTZiNGY2NDY5YTI4MC4uNGFjMjZjODBiZDM0ZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL2lub2RlLmNcbisrKyBiL2ZzL250ZnMzL2lub2RlLmNcbkBAIC0xODY2LDEwICsxODY2LDEwIEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gb3V0NjtcbiBcbiBcdC8qXG4tXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlJyBhZnRlciBpbm9kZS1cdTAwM2VpX29wIGlzIHNldFxuK1x0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZV9uZXcnIGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4gXHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxuIFx0ICovXG4tXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xuK1x0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XG4gXG4gXHQvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovXG4gXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVx1MDAzZWlfY3J0aW1lKTtcbkBAIC0xOTE3LDkgKzE5MTcsNiBAQCBpbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFmbmQpXG4gXHRcdG5pX3VubG9jayhkaXJfbmkpO1xuIFxuLVx0aWYgKCFlcnIpXG4tXHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoxNS45ODg3NjQxNDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDg1OTEyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUzMgSW5vZGUgQ3JlYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFuZCwgY3JpdGljYWxseSwgdGhlIGFkamFjZW50IGNvZGUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyBgZnMvbnRmczMvaW5vZGUuY2AsIHNvIHRoYXQncyB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byBiZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbi5cblxuSXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYXJvdW5kIGlub2RlIGluc3RhbnRpYXRpb24uIFRoZXkncmUgc3dhcHBpbmcgb3V0IGBkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO2AgZm9yIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtgLiBUaGF0J3Mgbm90IGEgdHJpdmlhbCBzd2l0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgbmV3IGlub2RlcyBtb3JlIGNhcmVmdWxseSBvciBkaWZmZXJlbnRseS4gSXQncyBvZnRlbiBhIHNpZ25hbCBhYm91dCBob3cgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBhcmUgaGFuZGxlZC5cblxuVGhlbiwgdGhlcmUncyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmICghZXJyKSB1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtgIGJsb2NrLiBUaGlzIGlzIGFsc28gaW1wb3J0YW50LiBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSXMgaXQgaW1wbHlpbmcgdGhhdCB0aGUgYGRfaW5zdGFudGlhdGVfbmV3YCBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1bmxvY2s/IE9yIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQsIHBvdGVudGlhbGx5IG1vcmUgZmluZS1ncmFpbmVkLCBsb2NraW5nIG1lY2hhbmlzbT8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZnMvbnRmczMvaW5vZGUuY2AgYXJvdW5kIGxpbmUgMTg2Ni4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBjaGFuZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIGdvYWwgaGVyZS4gSXMgdGhpcyBvcHRpbWl6YXRpb24/IEEgYnVnIGZpeD8gQSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudD8gQSBuZXcgZmVhdHVyZT8gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMgZXNzZW50aWFsIHRvIHZhbGlkYXRlIGFuZCBjb250ZXh0dWFsaXplIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MjUuNDc0Njc4NzQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg1MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg1MDpcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuMTg1MTpcXHRcXHRcXHRpZiAoYXR0cikge1xcbjE4NTI6XFx0XFx0XFx0XFx0c3RydWN0IEFUVFJfRklMRV9OQU1FICpmbjtcXG4xODUzOlxcdFxcbjE4NTQ6XFx0XFx0XFx0XFx0Zm4gPSByZXNpZGVudF9kYXRhX2V4KGF0dHIsIFNJWkVPRl9BVFRSSUJVVEVfRklMRU5BTUUpO1xcbjE4NTU6XFx0XFx0XFx0XFx0aWYgKGZuKVxcbjE4NTY6XFx0XFx0XFx0XFx0XFx0Zm4tXFx1MDAzZWR1cC5leHRlbmRfZGF0YSA9IGZuYW1lLVxcdTAwM2VkdXAuZXh0ZW5kX2RhdGE7XFxuMTg1NzpcXHRcXHRcXHR9XFxuMTg1ODpcXHRcXHR9XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdC8qIFdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSBwYXJlbnQgZGlyZWN0b3J5IGxhdGVyICovXFxuMTg2MTpcXHRcXHRuaS1cXHUwMDNlbmlfZmxhZ3MgXFx1MDAyNj0gfk5JX0ZMQUdfVVBEQVRFX1BBUkVOVDtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0LyogU3RlcCAyOiBBZGQgbmV3IG5hbWUgaW4gaW5kZXguICovXFxuMTg2NDpcXHRcXHRlcnIgPSBpbmR4X2luc2VydF9lbnRyeShcXHUwMDI2ZGlyX25pLVxcdTAwM2VkaXIsIGRpcl9uaSwgbmV3X2RlLCBzYmksIGZuZCwgMCk7XFxuMTg2NTpcXHRcXHRpZiAoZXJyKVxcbjE4NjY6XFx0XFx0XFx0Z290byBvdXQ2O1xcbjE4Njc6XFx0XFxuMTg2ODpcXHRcXHQvKlxcbjE4Njk6XFx0XFx0ICogQ2FsbCAnZF9pbnN0YW50aWF0ZV9uZXcnIGFmdGVyIGlub2RlLVxcdTAwM2VpX29wIGlzIHNldFxcbjE4NzA6XFx0XFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG4xODcxOlxcdFxcdCAqL1xcbjE4NzI6XFx0XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuMTg3MzpcXHRcXG4xODc0OlxcdFxcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cXG4xODc1OlxcdFxcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc2OlxcdFxcdGlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc3OlxcdFxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc4OlxcdFxcdGlub2RlX3NldF9tdGltZV90b190cyhkaXIsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3OTpcXHRcXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoZGlyLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4ODA6XFx0XFxuMTg4MTpcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuMTg4MjpcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4xODgzOlxcdFxcbjE4ODQ6XFx0XFx0LyogTm9ybWFsIGV4aXQuICovXFxuMTg4NTpcXHRcXHRnb3RvIG91dDI7XFxuMTg4NjpcXHRcXG4xODg3OlxcdG91dDY6XFxuMTg4ODpcXHRcXHRhdHRyID0gbmlfZmluZF9hdHRyKG5pLCBOVUxMLCBOVUxMLCBBVFRSX0VBLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTtcXG4xODg5OlxcdFxcdGlmIChhdHRyIFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZW5vbl9yZXMpIHtcXG4xODkwOlxcdFxcdFxcdC8qIERlbGV0ZSBBVFRSX0VBLCBpZiBub24tcmVzaWRlbnQuICovXFxuMTg5MTpcXHRcXHRcXHRzdHJ1Y3QgcnVuc190cmVlIHJ1bjtcXG4xODkyOlxcdFxcdFxcdHJ1bl9pbml0KFxcdTAwMjZydW4pO1xcbjE4OTM6XFx0XFx0XFx0YXR0cl9zZXRfc2l6ZShuaSwgQVRUUl9FQSwgTlVMTCwgMCwgXFx1MDAyNnJ1biwgMCwgTlVMTCwgZmFsc2UpO1xcbjE4OTQ6XFx0XFx0XFx0cnVuX2Nsb3NlKFxcdTAwMjZydW4pO1xcbjE4OTU6XFx0XFx0fVxcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHRpZiAocnBfaW5zZXJ0ZWQpXFxuMTg5ODpcXHRcXHRcXHRudGZzX3JlbW92ZV9yZXBhcnNlKHNiaSwgSU9fUkVQQVJTRV9UQUdfU1lNTElOSywgXFx1MDAyNm5ld19kZS1cXHUwMDNlcmVmKTtcXG4xODk5OlxcdFxcbjE5MDA6XFx0b3V0NTpcXG4xOTAxOlxcdFxcdGlmICghU19JU0RJUihtb2RlKSlcXG4xOTAyOlxcdFxcdFxcdHJ1bl9kZWFsbG9jYXRlKHNiaSwgXFx1MDAyNm5pLVxcdTAwM2VmaWxlLnJ1biwgZmFsc2UpO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRvdXQ0OlxcbjE5MDU6XFx0XFx0Y2xlYXJfcmVjX2ludXNlKHJlYyk7XFxuMTkwNjpcXHRcXHRjbGVhcl9ubGluayhpbm9kZSk7XFxuMTkwNzpcXHRcXHRuaS1cXHUwMDNlbWkuZGlydHkgPSBmYWxzZTtcXG4xOTA4OlxcdFxcdGRpc2NhcmRfbmV3X2lub2RlKGlub2RlKTtcXG4xOTA5OlxcdG91dDM6XFxuMTkxMDpcXHRcXHRudGZzX21hcmtfcmVjX2ZyZWUoc2JpLCBpbm8sIGZhbHNlKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0b3V0MjpcXG4xOTEzOlxcdFxcdGtmcmVlKG5ld19kZSk7XFxuMTkxNDpcXHRcXHRrZnJlZShycCk7XFxuMTkxNTpcXHRcXG4xOTE2OlxcdG91dDE6XFxuMTkxNzpcXHRcXHRpZiAoIWZuZClcXG4xOTE4OlxcdFxcdFxcdG5pX3VubG9jayhkaXJfbmkpO1xcbjE5MTk6XFx0XFxuMTkyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjE5MjE6XFx0fVxcbjE5MjI6XFx0XFxuMTkyMzpcXHRpbnQgbnRmc19saW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4xOTI0OlxcdHtcXG4xOTI1OlxcdFxcdGludCBlcnI7XFxuMTkyNjpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBudGZzX2koaW5vZGUpO1xcbjE5Mjc6XFx0XFx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4xOTI4OlxcdFxcdHN0cnVjdCBOVEZTX0RFICpkZTtcXG4xOTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzoyNS40NzQ3OTkzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTA5MTEyNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZF9pbnN0YW50aWF0ZV9uZXdgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGRlbnRyeSBhbmQgaW5vZGUgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkX2luc3RhbnRpYXRlX25ld2AgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIHRoYXQgaW5zaWRlIGBkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKWAsIHRoZXJlJ3MgYSBjYWxsIHRvIGB1bmxvY2tfbmV3X2lub2RlKGlub2RlKWAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHVubG9jayBvcGVyYXRpb24gaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGRfaW5zdGFudGlhdGVfbmV3YC4gSSdsbCBqdW1wIG92ZXIgdG8gZWl0aGVyIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUgb3IgcGVyaGFwcyB0aGUgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGhlYWRlciB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYHVubG9ja19uZXdfaW5vZGVgIGNhbGwgYW5kLCBjcnVjaWFsbHksIHdoYXQgc3RhdGUgdGhlIGBpbm9kZWAgaXMgaW4gYXQgdGhhdCBwb2ludC4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBncmFzcCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHN1YnRsZXRpZXMgYXJvdW5kIHRoaXMgZGVudHJ5LWlub2RlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyBhbiBhdG9taWMgb3BlcmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgdW5sb2NrIGlzIG1vdmVkPyBUaGUgZGV0YWlscyB3aWxsIGJlIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjI4LjU4MzkxMzY2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNDE4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZF9pbnN0YW50aWF0ZV9uZXdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MjE4ND1FWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGUpO1xcbi0tXFxuZnMvZGNhY2hlLmMtMjE5MS0gKi9cXG5mcy9kY2FjaGUuYzoyMTkyOnZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjE5My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI1MD1leHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMwLjE4NjMzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQwMDE1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGNhY2hlIGlzIGhhbmRsaW5nIG5ldyBpbm9kZXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgbGlua2luZyBhbiBpbm9kZSB0byBhIGRlbnRyeS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBpbm9kZSdzIGxpZmVjeWNsZSDigJMgaG93IHRoZSBpbm9kZSdzIGF0dHJpYnV0ZXMgYXJlIHNldCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhbmQgdWx0aW1hdGVseSwgaG93IHRoaXMgbmV3IGRlbnRyeSBiZWNvbWVzIGEgbGVnaXRpbWF0ZSBtZW1iZXIgb2YgdGhlIGRjYWNoZS4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlLCBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVkdW5kYW50IG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjYWNoZSBjb2hlcmVuY3ksIGNvbnNpZGVyaW5nIEknbGwgbGlrZWx5IG5lZWQgdG8gY29tcGFyZSB0aGlzIGNvZGUgd2l0aCBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBpbiBvdGhlciBmaWxlc3lzdGVtcy4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCByZXZpZXc7IEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gc3VidGxlIGJ1Z3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMyLjQyNjM1NDA4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTkwOlxcdCAqIHVubG9ja19uZXdfaW5vZGUoKSBjb21iaW5hdGlvbnMuXFxuMjE5MTpcXHQgKi9cXG4yMTkyOlxcdHZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjE5MzpcXHR7XFxuMjE5NDpcXHRcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcXG4yMTk1OlxcdFxcdEJVR19PTighaW5vZGUpO1xcbjIxOTY6XFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbjIxOTc6XFx0XFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpO1xcbjIxOTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMTk5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMjIwMDpcXHRcXHRfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTtcXG4yMjAxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4yMjAyOlxcdFxcdFdBUk5fT04oIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTkVXKSk7XFxuMjIwMzpcXHRcXHQvKlxcbjIyMDQ6XFx0XFx0ICogUGFpcmVkIHdpdGggaWdyYWJfZnJvbV9oYXNoKClcXG4yMjA1OlxcdFxcdCAqL1xcbjIyMDY6XFx0XFx0c21wX3dtYigpO1xcbjIyMDc6XFx0XFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTkVXIHwgSV9DUkVBVElORyk7XFxuMjIwODpcXHRcXHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XFxuMjIwOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjMyLjQyNjUwMDMzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA5NDY4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbm9kZSBJbnN0YW50aWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUgYWJvdXQgYGRfaW5zdGFudGlhdGVfbmV3YC4gSXQgc2VlbXMgbGlrZSAqdGhpcyogZnVuY3Rpb24gaXMgbm93IGhhbmRsaW5nIHVubG9ja2luZyB0aGUgbmV3IGlub2RlLCBzcGVjaWZpY2FsbHkgY2xlYXJpbmcgYElfTkVXYCBhbmQgd2FraW5nIHVwIGFueSB3YWl0aW5nIHByb2Nlc3NlcywgcmlnaHQgd2l0aGluIGl0c2VsZi4gVGhhdCdzIGEga2V5IGRldGFpbC4gQmVmb3JlLCBpZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgb2xkIGFwcHJvYWNoIHdpdGggYG50ZnNfY3JlYXRlX2lub2RlYCB3YXMgZGlmZmVyZW50LiBJdCB3b3VsZCBjYWxsIGBkX2luc3RhbnRpYXRlYOKAlGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHnigJRgZF9pbnN0YW50aWF0ZWAgKmRpZG4ndCogdW5sb2NrIHRoZSBpbm9kZS4gSXQgd2FzIGZvbGxvd2VkIHVwIHdpdGggdGltZXN0YW1wIHVwZGF0ZXMsIG1hcmtpbmcgdGhlIGlub2RlIGRpcnR5LCBhbmQgKnRoZW4qIHRoZSBgdW5sb2NrX25ld19pbm9kZShpbm9kZSlgIGNhbGwuIFNvLCB0aGUgbG9ja2luZy91bmxvY2tpbmcgc3RyYXRlZ3kgc2VlbXMgdG8gaGF2ZSBzaGlmdGVkLlxuXG5UaGlzIGNoYW5nZSBpcyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgZm9yIGJldHRlciBlZmZpY2llbmN5LCBvciBwZXJoYXBzIHRvIHN0cmVhbWxpbmUgdGhlIGNvbnRyb2wgZmxvdy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgY2hhaW4gdG8gYG50ZnNfY3JlYXRlX2lub2RlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdXNhZ2Ugd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MzUuMTI3NDUwMTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU2NTExNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfY3JlYXRlX2lub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzItLypcXG5mcy9udGZzMy9pbm9kZS5jOjEzNzM6ICogbnRmc19jcmVhdGVfaW5vZGVcXG5mcy9udGZzMy9pbm9kZS5jLTEzNzQtICpcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMTQ9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzMy9uYW1laS5jLTExNi17XFxuZnMvbnRmczMvbmFtZWkuYzoxMTc6XFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXFx0XFx0XFx0XFx0IE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcXG5mcy9udGZzMy9uYW1laS5jOjEyNzpcXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCByZGV2LCBOVUxMLCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjIzLVxcbmZzL250ZnMzL25hbWVpLmM6MjI0OlxcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMjI1LVxcdFxcdFxcdFxcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcXG5mcy9udGZzMy9uYW1laS5jOjIzNDpcXHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXFx0XFx0XFx0XFx0XFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD04MDU9aW50IGlub2RlX3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpO1xcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmM9NjgwPWludCBudGZzX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXFxuZnMvbnRmczMveGF0dHIuYzo2ODk6ICogQ2FsbGVkIGZyb20gbnRmc19jcmVhdGVfaW5vZGUoKS5cXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6MzYuODgzOTY4NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5NDY1NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIE5URlMzIGFuZCBTeXprYWxsZXIncyBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBudGZzM2AgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIExpbnV4IGxhbmRzY2FwZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgaXMgYSAqcmVhY2hhYmxlKiBmaWxlc3lzdGVtLCBtZWFuaW5nIGl0J3MgZW5hYmxlZCB2aWEgYENPTkZJR19OVEZTM19GU2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGNvbmNlcm4gbm93IGlzIGhvdyBTeXprYWxsZXIsIHdoaWNoIEkgdXNlIHJlZ3VsYXJseSwgZW5nYWdlcyB3aXRoIGl0LlxuXG5JIGtub3cgU3l6a2FsbGVyIGhhcyBhIGZldyBwcmltYXJ5IG1ldGhvZHMgZm9yIGF0dGFja2luZyBmaWxlc3lzdGVtcy4gSXQgY2FuIG1vdW50IGltYWdlcyBkaXJlY3RseSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBwb3NzaWJsZS4gSXQgY2FuIHVzZSBsb29wYmFjayBkZXZpY2VzIGNvdXBsZWQgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgKGludGVybmFsLCBlbXVsYXRlZCBzeXN0ZW0gY2FsbHMpIHRoYXQgYXJlIHNwZWNpYWxseSBidWlsdCBmb3IgaXQuIExhc3RseSwgaXQgY2FuIHJlbHkgb24gbW9yZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHN5c2NhbGxzLCB5b3VyIGJyZWFkLWFuZC1idXR0ZXIgb25lczogYG1rbm9kYCwgYG1rZGlyYCwgYG9wZW5gLCBgY3JlYXRgLCBgc3ltbGlua2AsIGV0Yy4gVGhlc2UgZm9ybSB0aGUgYnVpbGRpbmcgYmxvY2tzLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGZvciBtZSBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBOVEZTMy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbnMgd2lsbCBsZXQgbWUga25vdyB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBob3cgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIGZpbGVzeXN0ZW0sIGFuZCBpdHMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBwbGFubmluZyB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjM5LjY3ODYyNTUyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjE2NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGUzNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMzL0tjb25maWc6Mjpjb25maWcgTlRGUzNfRlNcXG5mcy9udGZzMy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmczMvS2NvbmZpZz0yOD1jb25maWcgTlRGUzNfTFpYX1hQUkVTU1xcbi0tXFxuZnMvbnRmczMvS2NvbmZpZy0zNy1cXG5mcy9udGZzMy9LY29uZmlnOjM4OmNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcXG5mcy9udGZzMy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjEzOjQxLjI1MDc5OTAxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjc2OTcyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBOVEZTMyBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBmcy9udGZzM2AgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgYW5kIHJlbGlhYmxlIHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBleGFtaW5lIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBmcy9udGZzM2AgZGlyZWN0b3J5IGl0c2VsZi4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXRseSBkZWNsYXJlZC4gQnkgYW5hbHl6aW5nIHRoZSBjb250ZW50cyBvZiBgZnMvbnRmczMvS2NvbmZpZ2AsIEkgY2FuIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIG9wdGlvbnMgdGhhdCBgbnRmczNgIHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGZpbGVzeXN0ZW0gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo0NC41Mjc3NzM1OThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5URlMzX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uICFOVEZTX0ZTIHx8IG1cXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgV2luZG93cyBPUyBuYXRpdmUgZmlsZSBzeXN0ZW0gKE5URlMpIHN1cHBvcnQgdXAgdG8gTlRGUyB2ZXJzaW9uIDMuMS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBZIG9yIE0gZW5hYmxlcyB0aGUgTlRGUzMgZHJpdmVyIHdpdGggZnVsbCBmZWF0dXJlcyBlbmFibGVkIChyZWFkLFxcbiAgMTI6XFx0XFx0ICB3cml0ZSwgam91cm5hbCByZXBsYXlpbmcsIHNwYXJzZS9jb21wcmVzc2VkIGZpbGVzIHN1cHBvcnQpLlxcbiAgMTM6XFx0XFx0ICBGaWxlIHN5c3RlbSB0eXBlIHRvIHVzZSBvbiBtb3VudCBpcyBcXFwibnRmczNcXFwiLiBNb2R1bGUgbmFtZSAoTSBvcHRpb24pXFxuICAxNDpcXHRcXHQgIGlzIGFsc28gXFxcIm50ZnMzXFxcIi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBEb2N1bWVudGF0aW9uOiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMzLnJzdFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5URlMzXzY0QklUX0NMVVNURVJcXG4gIDE5OlxcdFxcdGJvb2wgXFxcIjY0IGJpdHMgcGVyIE5URlMgY2x1c3RlcnNcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgbnRmcy5zeXMgdXNlcyAzMiBiaXRzIHBlciBjbHVzdGVycy5cXG4gIDIzOlxcdFxcdCAgSWYgYWN0aXZhdGVkIDY0IGJpdHMgcGVyIGNsdXN0ZXJzIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIDRrIGNsdXN0ZXJcXG4gIDI0OlxcdFxcdCAgZm9yIDE2VCsgdm9sdW1lcy4gV2luZG93cyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vdW50IHN1Y2ggdm9sdW1lcy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgTiBoZXJlLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTlRGUzNfTFpYX1hQUkVTU1xcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiYWN0aXZhdGUgc3VwcG9ydCBvZiBleHRlcm5hbCBjb21wcmVzc2lvbnMgbHp4L3hwcmVzc1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTlRGUzNfRlNcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgSW4gV2luZG93cyAxMCBvbmUgY2FuIHVzZSBjb21tYW5kIFxcXCJjb21wYWN0XFxcIiB0byBjb21wcmVzcyBhbnkgZmlsZXMuXFxuICAzMzpcXHRcXHQgIDQgcG9zc2libGUgdmFyaWFudHMgb2YgY29tcHJlc3Npb24gYXJlOiB4cHJlc3M0aywgeHByZXNzOGssIHhwcmVzczE2ayBhbmQgbHp4LlxcbiAgMzQ6XFx0XFx0ICBJZiBhY3RpdmF0ZWQgeW91IHdpbGwgYmUgYWJsZSB0byByZWFkIHN1Y2ggZmlsZXMgY29ycmVjdGx5LlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTXFxuICA0MTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xcbiAgNDQ6XFx0XFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZSxcXG4gIDQ1OlxcdFxcdCAgYW5kIHRoaXMgb3B0aW9uIHNlbGVjdHMgc3VwcG9ydCBmb3IgQUNMcyBzcGVjaWZpY2FsbHkgZm9yIG50ZnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDQuNTI3ODM3ODU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDU1MjQyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEFuYWx5c2lzIGFuZCBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIHdlIG5lZWQgdG8gYXNzZXNzIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIElzIHRoaXMgY29kZSB3ZSBjYW4gYWN0dWFsbHkgZ2V0IHRvPyBZZXAsIGBudGZzM2AgaXMgYSBsZWdpdCBmaWxlIHN5c3RlbSBpbiBMaW51eCwgc28gdGhhdCdzIGEgZ29vZCBzdGFydC4gYG50ZnNfY3JlYXRlX2lub2RlYCBpcyBjYWxsZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgLiBDaGVjay5cblxuTmV4dCwgZG9lcyB0aGlzIHBvdGVudGlhbGx5IG1lc3Mgd2l0aCBleGVjdXRhYmxlIGtlcm5lbCBjb2RlPyBMb29rcyBsaWtlIGl0IGRvZXM7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdpbmcgYGRfaW5zdGFudGlhdGVgIHRvIGBkX2luc3RhbnRpYXRlX25ld2AgYW5kIHJlbW92aW5nIHRoYXQgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCBjYWxsLiBUaGF0J3MgYSBkZWZpbml0ZSBcInllcy5cIlxuXG5Ob3csIGlzIHRoaXMgd29ydGggb3VyIHRpbWUgYW5kIGVmZm9ydCB0byBmdXp6PyBBYnNvbHV0ZWx5LiBGaWxlIHN5c3RlbSBpbm9kZSBjcmVhdGlvbiwgY29tYmluZWQgd2l0aCBjb25jdXJyZW5jeSBhbmQgc3RhdGUgdHJhbnNpdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gSV9ORVcgaGFuZGxpbmcsIGlzIHByaW1lIHRlcnJpdG9yeSBmb3Igc3l6a2FsbGVyLiBDcml0aWNhbCBwYXRoLCBmdXp6YWJsZSwgZGVmaW5pdGVseSBhIGdvLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCBvdXIga2V5IGBGb2N1c1N5bWJvbHNgIGFyZS4gRGVmaW5pdGVseSBgbnRmc19jcmVhdGVfaW5vZGVgLCBhbmQgc2luY2UgdGhhdCdzIHRoZSBjb3JlLCB0aGUgY2FsbGVycyBhcmUgYWxzbyBjcnVjaWFsOiBgbnRmc19jcmVhdGVgLCBgbnRmc19ta25vZGAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtkaXJgIG5lZWQgdG8gYmUgaW4gdGhlIGNyb3NzaGFpcnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCdzIHNlZSBpZiBhbnl0aGluZyBlbHNlIGluIGBudGZzM2AgY2FsbHMgYG50ZnNfY3JlYXRlX2lub2RlYC4gSSB0aGluayBJIHNhdyBzb21ldGhpbmcgYWJvdXQgYG50ZnNfYXRvbWljX29wZW5gLCBhbmQgSSByZW1lbWJlciB0aGF0IGJlaW5nIGluIGBmcy9udGZzMy9uYW1laS5jYC4gV29ydGggYSBxdWljayBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDcuODMzMzY0NjQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUwMDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2NyZWF0ZV9pbm9kZXxudGZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9pbm9kZS5jPTEyOTc9bnRmc19jcmVhdGVfcmVwYXJzZV9idWZmZXIoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBjb25zdCBjaGFyICpzeW1uYW1lLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xMzcyLS8qXFxuZnMvbnRmczMvaW5vZGUuYzoxMzczOiAqIG50ZnNfY3JlYXRlX2lub2RlXFxuZnMvbnRmczMvaW5vZGUuYy0xMzc0LSAqXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzktICogLSBudGZzX21rZGlyXFxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxcbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxcbmZzL250ZnMzL2lub2RlLmM6MTM4MjogKiBOT1RFOiBpZiBmbmQgIT0gTlVMTCAobnRmc19hdG9taWNfb3BlbikgdGhlbiBAZGlyIGlzIGxvY2tlZFxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5mcy9udGZzMy9pbm9kZS5jOjEzODQ6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9pbm9kZS5jLTEzODUtXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgY3B1X3N0ciAqdW5pLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMTQ9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzMy9uYW1laS5jLTExNi17XFxuZnMvbnRmczMvbmFtZWkuYzoxMTc6XFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuZnMvbnRmczMvbmFtZWkuYy0xMTgtXFx0XFx0XFx0XFx0IE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz0xMjQ9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMTI2LXtcXG5mcy9udGZzMy9uYW1laS5jOjEyNzpcXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCByZGV2LCBOVUxMLCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMTI4LVxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjEyPXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjIzLVxcbmZzL250ZnMzL25hbWVpLmM6MjI0OlxcdHJldHVybiBudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCAwNzc3LCAwLFxcbmZzL250ZnMzL25hbWVpLmMtMjI1LVxcdFxcdFxcdFxcdCBzeW1uYW1lLCBzaXplLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL25hbWVpLmM9MjMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL25hbWVpLmMtMjMzLXtcXG5mcy9udGZzMy9uYW1laS5jOjIzNDpcXHRyZXR1cm4gRVJSX1BUUihudGZzX2NyZWF0ZV9pbm9kZShpZG1hcCwgZGlyLCBkZW50cnksIE5VTEwsXFxuZnMvbnRmczMvbmFtZWkuYy0yMzUtXFx0XFx0XFx0XFx0XFx0IG1vZGUsIDAsIE5VTEwsIDAsIE5VTEwpKTtcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD04MDU9aW50IGlub2RlX3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpO1xcbmZzL250ZnMzL250ZnNfZnMuaDo4MDY6aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9udGZzMy9udGZzX2ZzLmgtODA3LVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGNwdV9zdHIgKnVuaSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmM9NjgwPWludCBudGZzX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtNjg4LSAqXFxuZnMvbnRmczMveGF0dHIuYzo2ODk6ICogQ2FsbGVkIGZyb20gbnRmc19jcmVhdGVfaW5vZGUoKS5cXG5mcy9udGZzMy94YXR0ci5jLTY5MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NDcuODc4ODcyMDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjAwMzI5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE5URlMgQXRvbWljIE9wZW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYXRvbWljIG9wZW5zIGFyZSBoYW5kbGVkIGluIE5URlMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgbnRmc19hdG9taWNfb3BlbmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL250ZnMzL25hbWVpLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBuYW1laSBvcGVyYXRpb25zIGlzLCBhbmQgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBob3cgZmlsZXMgYXJlIGNyZWF0ZWQgb3Igb3BlbmVkIHNhZmVseSBpbiBOVEZTLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGF0b21pYyBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbmFtZWkuY2AgZmlsZSBiZWNhdXNlIGl0IGdlbmVyYWxseSBoYW5kbGVzIG5hbWUgbG9va3VwcywgcGF0aCB0cmF2ZXJzYWwsIGFuZCB0aGUgdWx0aW1hdGUgYXNzb2NpYXRpb24gb2YgYSBmaWxlIG5hbWUgd2l0aCBpdHMgdW5kZXJseWluZyBpbm9kZS4gSSB3YW50IHRvIHNlZSBob3cgTlRGUyBndWFyYW50ZWVzIGVpdGhlciBjb21wbGV0ZSBzdWNjZXNzIG9yIGNvbXBsZXRlIGZhaWx1cmUgZHVyaW5nIHRoZSBvcGVuIHByb2Nlc3MsIG1pbmltaXppbmcgZGF0YSBjb3JydXB0aW9uIHJpc2tzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGV2ZW50IG9mIGEgc3lzdGVtIGNyYXNoLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5IGFib3V0IGhhbmRsaW5nIHRoYXQgY3JpdGljYWwgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1MC41Mzg5MDcxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTMyNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9MTI5Nz1udGZzX2NyZWF0ZV9yZXBhcnNlX2J1ZmZlcihzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTEzNzktICogLSBudGZzX21rZGlyXFxuZnMvbnRmczMvaW5vZGUuYzoxMzgwOiAqIC0gbnRmc19hdG9taWNfb3BlblxcbmZzL250ZnMzL2lub2RlLmMtMTM4MS0gKlxcbmZzL250ZnMzL2lub2RlLmM6MTM4MjogKiBOT1RFOiBpZiBmbmQgIT0gTlVMTCAobnRmc19hdG9taWNfb3BlbikgdGhlbiBAZGlyIGlzIGxvY2tlZFxcbmZzL250ZnMzL2lub2RlLmMtMTM4My0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NTAuNTgzODQ0NDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODk3OTYxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVidWdnaW5nIGFuIE5URlMgQXRvbWljIE9wZW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnRmc19hdG9taWNfb3BlbmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWhhdmluZy4gIFRoZSBjb2RlIGl0c2VsZiBpcyBsaWtlbHkgaW4gYGZzL250ZnMzL25hbWVpLmNgLCBzbyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuICBTaW5jZSBpdCdzIGFuIGF0b21pYyBvcGVuLCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIHRoaXMgY29udGV4dC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBmaWxlIChgbmFtZWkuY2ApLiBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IgdGhlcmUsIGxpa2VseSBpbiBob3cgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBsb29rZWQgdXAgb3IgY3JlYXRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1NC40NzM2NDMwMTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2lub2RlLmM9Mjk9c3RhdGljIGludCBudGZzX3JlYWRfbWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBjcHVfc3RyICpuYW1lLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy00NTgtXFx0XFx0ICovXFxuZnMvbnRmczMvaW5vZGUuYzo0NTk6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2bnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9udGZzMy9pbm9kZS5jLTQ2MC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2bnRmc19kaXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xODAzLVxcdGlmIChTX0lTRElSKG1vZGUpKSB7XFxuZnMvbnRmczMvaW5vZGUuYzoxODA0OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvbnRmczMvaW5vZGUuYy0xODA1LVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZudGZzX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvbnRmczMvbmFtZWkuYz00NjI9c3RhdGljIGludCBudGZzX2RfY29tcGFyZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBsZW4xLFxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYy01MjgtLy8gY2xhbmctZm9ybWF0IG9mZlxcbmZzL250ZnMzL25hbWVpLmM6NTI5OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvbnRmczMvbmFtZWkuYy01MzAtXFx0Lmxvb2t1cFxcdFxcdD0gbnRmc19sb29rdXAsXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9ODIyPXN0cnVjdCBkZW50cnkgKm50ZnMzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpO1xcbmZzL250ZnMzL250ZnNfZnMuaC04MjMtXFxuZnMvbnRmczMvbnRmc19mcy5oOjgyNDpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9udGZzMy9udGZzX2ZzLmgtODI1LWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTM6NTQuNTIxNDMyOTk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTczNjg0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5URlMgTmFtZSBSZXNvbHV0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIG5hbWUgcmVzb2x1dGlvbiBpbiBOVEZTLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIHRoZSBpc3N1ZSBpcyBwcm9iYWJseSBpbiB0aGUgYGZzL250ZnMzYCBzdWJzeXN0ZW0uIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoZSBgbmFtZWkuY2AgZmlsZSBpcyB1c3VhbGx5IHRoZSBnby10byBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuYW1lLXRvLWlub2RlIGxvb2t1cHMgYW5kIHBhdGggdHJhdmVyc2FsIHdpdGhpbiBhIGZpbGVzeXN0ZW0uIE5vdywgbGV0J3Mgc2VlLCBsaW5lcyA1MjAtNTQwLi4uIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlIEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1OS4wMzg4MDQyOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRyZXQgPSAhbnRmc19jbXBfbmFtZXNfY3B1KHVuaTEsIHVuaTIsIHNiaS1cXHUwMDNldXBjYXNlLCBmYWxzZSkgPyAwIDogMTtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0b3V0OlxcbiA1MjQ6XFx0XFx0a2ZyZWUodW5pMSk7XFxuIDUyNTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MjY6XFx0fVxcbiA1Mjc6XFx0XFxuIDUyODpcXHQvLyBjbGFuZy1mb3JtYXQgb2ZmXFxuIDUyOTpcXHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiA1MzA6XFx0XFx0Lmxvb2t1cFxcdFxcdD0gbnRmc19sb29rdXAsXFxuIDUzMTpcXHRcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG4gNTMyOlxcdFxcdC5saW5rXFx0XFx0PSBudGZzX2xpbmssXFxuIDUzMzpcXHRcXHQudW5saW5rXFx0XFx0PSBudGZzX3VubGluayxcXG4gNTM0OlxcdFxcdC5zeW1saW5rXFx0PSBudGZzX3N5bWxpbmssXFxuIDUzNTpcXHRcXHQubWtkaXJcXHRcXHQ9IG50ZnNfbWtkaXIsXFxuIDUzNjpcXHRcXHQucm1kaXJcXHRcXHQ9IG50ZnNfcm1kaXIsXFxuIDUzNzpcXHRcXHQubWtub2RcXHRcXHQ9IG50ZnNfbWtub2QsXFxuIDUzODpcXHRcXHQucmVuYW1lXFx0XFx0PSBudGZzX3JlbmFtZSxcXG4gNTM5OlxcdFxcdC5nZXRfYWNsXFx0PSBudGZzX2dldF9hY2wsXFxuIDU0MDpcXHRcXHQuc2V0X2FjbFxcdD0gbnRmc19zZXRfYWNsLFxcbiA1NDE6XFx0XFx0LnNldGF0dHJcXHQ9IG50ZnNfc2V0YXR0cixcXG4gNTQyOlxcdFxcdC5nZXRhdHRyXFx0PSBudGZzX2dldGF0dHIsXFxuIDU0MzpcXHRcXHQubGlzdHhhdHRyXFx0PSBudGZzX2xpc3R4YXR0cixcXG4gNTQ0OlxcdFxcdC5maWVtYXBcXHRcXHQ9IG50ZnNfZmllbWFwLFxcbiA1NDU6XFx0XFx0LmZpbGVhdHRyX2dldFxcdD0gbnRmc19maWxlYXR0cl9nZXQsXFxuIDU0NjpcXHRcXHQuZmlsZWF0dHJfc2V0XFx0PSBudGZzX2ZpbGVhdHRyX3NldCxcXG4gNTQ3OlxcdH07XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxMzo1OS4wMzg4NzQxMjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg3NDg0NDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50OiBOVEZTIEZpbGUgQ3JlYXRpb24gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRoaXMgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBOVEZTIGZpbGUgY3JlYXRpb24gb3BlcmF0aW9uczogYG50ZnNfY3JlYXRlX2lub2RlYCwgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtub2RgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rZGlyYC4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gRnVydGhlcm1vcmUsIGBOVEZTM19GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHNldHVwLiBOb3RoaW5nIGNvbXBsZXggaGVyZS4gSSdtIGdvaW5nIHRvIHNldCB1cCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwOSwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0LjkxMzcyMTI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDI0ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTM19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfY3JlYXRlX2lub2RlXCIsXG4gICAgXCJudGZzX2NyZWF0ZVwiLFxuICAgIFwibnRmc19ta25vZFwiLFxuICAgIFwibnRmc19zeW1saW5rXCIsXG4gICAgXCJudGZzX21rZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbnRmc19jcmVhdGVfaW5vZGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBkX2luc3RhbnRpYXRlKCkgdG8gZF9pbnN0YW50aWF0ZV9uZXcoKSBhbmQgcmVtb3ZpbmcgdW5sb2NrX25ld19pbm9kZSgpLCB3aGljaCBhZmZlY3RzIGlub2RlIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGRlbnRyeSBpbnN0YW50aWF0aW9uIGluIHRoZSByZWFjaGFibGUgbnRmczMgZmlsZXN5c3RlbS4gRnV6emluZyBjYW4gaGVscCB0ZXN0IGlub2RlIGNyZWF0aW9uIGFuZCB1bmxvY2sgc2VtYW50aWNzIGFjcm9zcyBOVEZTIGNyZWF0aW9uIHBhdGhzIChjcmVhdCwgbWtub2QsIHN5bWxpbmssIG1rZGlyKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MDQuOTkyMTUzOTc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY5OTIwMDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0Ljk5MjYzNjc2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNjk4NzE0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODg1Y2YyNjAyZGIyOTZkYTdhZjdhOTM0MGQzNTRhMzg4ZjJmMjMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMToxMzoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2lub2RlLmMgYi9mcy9udGZzMy9pbm9kZS5jXG5pbmRleCA1NmI0ZjY0NjlhMjgwLi40YWMyNmM4MGJkMzRmIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvaW5vZGUuY1xuKysrIGIvZnMvbnRmczMvaW5vZGUuY1xuQEAgLTE4NjYsMTAgKzE4NjYsMTAgQEAgaW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBvdXQ2O1xuIFxuIFx0Lypcbi1cdCAqIENhbGwgJ2RfaW5zdGFudGlhdGUnIGFmdGVyIGlub2RlLVx1MDAzZWlfb3AgaXMgc2V0XG4rXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlX25ldycgYWZ0ZXIgaW5vZGUtXHUwMDNlaV9vcCBpcyBzZXRcbiBcdCAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uXG4gXHQgKi9cbi1cdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4rXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcbiBcbiBcdC8qIFNldCBvcmlnaW5hbCB0aW1lLiBpbm9kZSB0aW1lcyAoaV9jdGltZSkgbWF5IGJlIGNoYW5nZWQgaW4gbnRmc19pbml0X2FjbC4gKi9cbiBcdGlub2RlX3NldF9hdGltZV90b190cyhpbm9kZSwgbmktXHUwMDNlaV9jcnRpbWUpO1xuQEAgLTE5MTcsOSArMTkxNyw2IEBAIGludCBudGZzX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWZuZClcbiBcdFx0bmlfdW5sb2NrKGRpcl9uaSk7XG4gXG4tXHRpZiAoIWVycilcbi1cdFx0dW5sb2NrX25ld19pbm9kZShpbm9kZSk7XG4tXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjA0Ljk5MjYzNzcwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg3ODQ0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUzMgSW5vZGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBmcy9udGZzMy9pbm9kZS5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGlub2RlcyBpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgb3IgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBudGZzX2NyZWF0ZV9pbm9kZWAuIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgbXkgYmVzdCBiZXQgdG8gcXVpY2tseSBnZXQgdG8gdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjcmVhdGluZyB0aGUgaW5vZGVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjExLjY4MDQ5NDY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbjE4NTE6XFx0XFx0XFx0aWYgKGF0dHIpIHtcXG4xODUyOlxcdFxcdFxcdFxcdHN0cnVjdCBBVFRSX0ZJTEVfTkFNRSAqZm47XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdFxcdFxcdGZuID0gcmVzaWRlbnRfZGF0YV9leChhdHRyLCBTSVpFT0ZfQVRUUklCVVRFX0ZJTEVOQU1FKTtcXG4xODU1OlxcdFxcdFxcdFxcdGlmIChmbilcXG4xODU2OlxcdFxcdFxcdFxcdFxcdGZuLVxcdTAwM2VkdXAuZXh0ZW5kX2RhdGEgPSBmbmFtZS1cXHUwMDNlZHVwLmV4dGVuZF9kYXRhO1xcbjE4NTc6XFx0XFx0XFx0fVxcbjE4NTg6XFx0XFx0fVxcbjE4NTk6XFx0XFxuMTg2MDpcXHRcXHQvKiBXZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSBsYXRlciAqL1xcbjE4NjE6XFx0XFx0bmktXFx1MDAzZW5pX2ZsYWdzIFxcdTAwMjY9IH5OSV9GTEFHX1VQREFURV9QQVJFTlQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdC8qIFN0ZXAgMjogQWRkIG5ldyBuYW1lIGluIGluZGV4LiAqL1xcbjE4NjQ6XFx0XFx0ZXJyID0gaW5keF9pbnNlcnRfZW50cnkoXFx1MDAyNmRpcl9uaS1cXHUwMDNlZGlyLCBkaXJfbmksIG5ld19kZSwgc2JpLCBmbmQsIDApO1xcbjE4NjU6XFx0XFx0aWYgKGVycilcXG4xODY2OlxcdFxcdFxcdGdvdG8gb3V0NjtcXG4xODY3OlxcdFxcbjE4Njg6XFx0XFx0LypcXG4xODY5OlxcdFxcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG4xODcwOlxcdFxcdCAqIGJ1dCBiZWZvcmUgZmluaXNoX29wZW4uXFxuMTg3MTpcXHRcXHQgKi9cXG4xODcyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHQvKiBTZXQgb3JpZ2luYWwgdGltZS4gaW5vZGUgdGltZXMgKGlfY3RpbWUpIG1heSBiZSBjaGFuZ2VkIGluIG50ZnNfaW5pdF9hY2wuICovXFxuMTg3NTpcXHRcXHRpbm9kZV9zZXRfYXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3NjpcXHRcXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3NzpcXHRcXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg3ODpcXHRcXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzk6XFx0XFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGRpciwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODgwOlxcdFxcbjE4ODE6XFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbjE4ODI6XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuMTg4MzpcXHRcXG4xODg0OlxcdFxcdC8qIE5vcm1hbCBleGl0LiAqL1xcbjE4ODU6XFx0XFx0Z290byBvdXQyO1xcbjE4ODY6XFx0XFxuMTg4NzpcXHRvdXQ2OlxcbjE4ODg6XFx0XFx0YXR0ciA9IG5pX2ZpbmRfYXR0cihuaSwgTlVMTCwgTlVMTCwgQVRUUl9FQSwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7XFxuMTg4OTpcXHRcXHRpZiAoYXR0ciBcXHUwMDI2XFx1MDAyNiBhdHRyLVxcdTAwM2Vub25fcmVzKSB7XFxuMTg5MDpcXHRcXHRcXHQvKiBEZWxldGUgQVRUUl9FQSwgaWYgbm9uLXJlc2lkZW50LiAqL1xcbjE4OTE6XFx0XFx0XFx0c3RydWN0IHJ1bnNfdHJlZSBydW47XFxuMTg5MjpcXHRcXHRcXHRydW5faW5pdChcXHUwMDI2cnVuKTtcXG4xODkzOlxcdFxcdFxcdGF0dHJfc2V0X3NpemUobmksIEFUVFJfRUEsIE5VTEwsIDAsIFxcdTAwMjZydW4sIDAsIE5VTEwsIGZhbHNlKTtcXG4xODk0OlxcdFxcdFxcdHJ1bl9jbG9zZShcXHUwMDI2cnVuKTtcXG4xODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0aWYgKHJwX2luc2VydGVkKVxcbjE4OTg6XFx0XFx0XFx0bnRmc19yZW1vdmVfcmVwYXJzZShzYmksIElPX1JFUEFSU0VfVEFHX1NZTUxJTkssIFxcdTAwMjZuZXdfZGUtXFx1MDAzZXJlZik7XFxuMTg5OTpcXHRcXG4xOTAwOlxcdG91dDU6XFxuMTkwMTpcXHRcXHRpZiAoIVNfSVNESVIobW9kZSkpXFxuMTkwMjpcXHRcXHRcXHRydW5fZGVhbGxvY2F0ZShzYmksIFxcdTAwMjZuaS1cXHUwMDNlZmlsZS5ydW4sIGZhbHNlKTtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0b3V0NDpcXG4xOTA1OlxcdFxcdGNsZWFyX3JlY19pbnVzZShyZWMpO1xcbjE5MDY6XFx0XFx0Y2xlYXJfbmxpbmsoaW5vZGUpO1xcbjE5MDc6XFx0XFx0bmktXFx1MDAzZW1pLmRpcnR5ID0gZmFsc2U7XFxuMTkwODpcXHRcXHRkaXNjYXJkX25ld19pbm9kZShpbm9kZSk7XFxuMTkwOTpcXHRvdXQzOlxcbjE5MTA6XFx0XFx0bnRmc19tYXJrX3JlY19mcmVlKHNiaSwgaW5vLCBmYWxzZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdG91dDI6XFxuMTkxMzpcXHRcXHRrZnJlZShuZXdfZGUpO1xcbjE5MTQ6XFx0XFx0a2ZyZWUocnApO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRvdXQxOlxcbjE5MTc6XFx0XFx0aWYgKCFmbmQpXFxuMTkxODpcXHRcXHRcXHRuaV91bmxvY2soZGlyX25pKTtcXG4xOTE5OlxcdFxcbjE5MjA6XFx0XFx0cmV0dXJuIGVycjtcXG4xOTIxOlxcdH1cXG4xOTIyOlxcdFxcbjE5MjM6XFx0aW50IG50ZnNfbGlua19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuMTkyNDpcXHR7XFxuMTkyNTpcXHRcXHRpbnQgZXJyO1xcbjE5MjY6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcXG4xOTI3OlxcdFxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm87XFxuMTkyODpcXHRcXHRzdHJ1Y3QgTlRGU19ERSAqZGU7XFxuMTkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MTEuNjgwNjgyOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2MzkyMDM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipBbmFseXppbmcgYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgZF9pbnN0YW50aWF0ZV9uZXdgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgYGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpYCBpcyBvdXIgdGFyZ2V0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHdvcmtzLiBJIHNlZSBpdCBzdGFydHMgd2l0aCBhIGBXQVJOX09OYCBjaGVjaywgZW5zdXJpbmcgdGhlIGBpbm9kZWAgaXMgaW4gYSBuZXcgc3RhdGUgdXNpbmcgdGhlIGBJX05FV2AgZmxhZy4gVGhlIHByZXNlbmNlIG9mIHRoYXQgY2hlY2sgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZXF1ZW5jaW5nIGlzc3VlcyBpZiB0aGUgYGlub2RlYCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYCwgd2hpY2ggaXMgY3JpdGljYWw7IGlmIHRoZSBpbm9kZSB3YXNuJ3QgcHJvcGVybHkgbG9ja2VkLCBvciBpZiB0aGlzIGNhbGwgZ2V0cyBtaXNzZWQsIGl0IHdpbGwgY2F1c2UgcmVhbCBpc3N1ZXMuIEFmdGVyIHRoYXQsIHdlJ3JlIGNhbGxpbmcgYGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSlgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHdvcmsgbGlrZWx5IGhhcHBlbnMg4oCTIGFzc29jaWF0aW5nIHRoZSBgaW5vZGVgIHdpdGggdGhlIGBkZW50cnlgLCBlZmZlY3RpdmVseSBcImluc3RhbnRpYXRpbmdcIiB0aGUgbmV3IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgdHJlZS4gVGhlIHByZXNlbmNlIG9mIHRoZSB3YXJuaW5nIG1ha2VzIG1lIGN1cmlvdXMgYWJvdXQgdGhlIHNjZW5hcmlvcyB0aGF0IGNhbiBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZTsgSSB3aWxsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbS4gSSB3aWxsIGxvb2sgdGhlcmUgZm9yIG1vcmUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MTQuMzQ0NjA1MzMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk5ODMwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRfaW5zdGFudGlhdGVfbmV3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE5ND1iZSByZXR1cm5lZC4gIEFueSBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgd2l0aCBFUlJfUFRSKCkuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMTk1LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MTE5NjpJbiBnZW5lcmFsLCBmaWxlc3lzdGVtcyB3aGljaCB1c2UgZF9pbnN0YW50aWF0ZV9uZXcoKSB0byBpbnN0YWxsIHRoZSBuZXdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExOTctaW5vZGUgY2FuIHNhZmVseSByZXR1cm4gTlVMTC4gIEZpbGVzeXN0ZW1zIHdoaWNoIG1heSBub3QgaGF2ZSBhbiBJX05FVyBpbm9kZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0PTQ1MT1vdGhlcndpc2Ugbm90ZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkxLVxcdHRvIHN1cHBvcnQgY3JlYXRpbmcgc3ViZGlyZWN0b3JpZXMuICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjQ5MjpcXHRjYWxsIGRfaW5zdGFudGlhdGVfbmV3KCkganVzdCBhcyB5b3Ugd291bGQgaW4gdGhlIGNyZWF0ZSgpIG1ldGhvZC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtNDkzLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDo0OTQ6XFx0SWYgZF9pbnN0YW50aWF0ZV9uZXcoKSBpcyBub3QgdXNlZCBhbmQgaWYgdGhlIGZoX3RvX2RlbnRyeSgpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTQ5NS1cXHRleHBvcnQgb3BlcmF0aW9uIGlzIHByb3ZpZGVkLCBvciBpZiB0aGUgc3RvcmFnZSBtaWdodCBiZVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz02OTY5PXN0YXRpYyBpbnQgYnRyZnNfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYy02OTk2LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgfD0gSU9QX0ZBU1RQRVJNX01BWV9FWEVDO1xcbmZzL2J0cmZzL2lub2RlLmM6Njk5NzpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9idHJmcy9pbm9kZS5jLTY5OTgtXFx0fVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz05MDI5PXN0YXRpYyBpbnQgYnRyZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTkxMjAtXFxuZnMvYnRyZnMvaW5vZGUuYzo5MTIxOlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2J0cmZzL2lub2RlLmMtOTEyMi1cXHRyZXQgPSAwO1xcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz01NTI9c3RhdGljIG5vaW5saW5lIGludCBjcmVhdGVfc3Vidm9sKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy03MzQtXFx0c2V0X2JpdChCVFJGU19ST09UX09SUEhBTl9DTEVBTlVQLCBcXHUwMDI2bmV3X3Jvb3QtXFx1MDAzZXN0YXRlKTtcXG5mcy9idHJmcy9pb2N0bC5jOjczNTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIG5ld19pbm9kZV9hcmdzLmlub2RlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTczNi1cXHRuZXdfaW5vZGVfYXJncy5pbm9kZSA9IE5VTEw7XFxuLS1cXG5mcy9idHJmcy94YXR0ci5jPTIxND1pbnQgYnRyZnNfc2V0eGF0dHJfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2J0cmZzL3hhdHRyLmMtMjMyLVxcdFxcdCAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNtYWNrIGlzIGVuYWJsZWQgYW5kIGEgZGlyZWN0b3J5IGlzIGJlaW5nXFxuZnMvYnRyZnMveGF0dHIuYzoyMzM6XFx0XFx0ICogY3JlYXRlZC4gSXQgaGFwcGVucyB0aHJvdWdoIGRfaW5zdGFudGlhdGVfbmV3KCksIHdoaWNoIGNhbGxzXFxuZnMvYnRyZnMveGF0dHIuYy0yMzQtXFx0XFx0ICogc21hY2tfZF9pbnN0YW50aWF0ZSgpLCB3aGljaCBpbiB0dXJuIGNhbGxzIF9fdmZzX3NldHhhdHRyKCkgdG9cXG4tLVxcbmZzL2RjYWNoZS5jPTIxODQ9RVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTIxOTEtICovXFxuZnMvZGNhY2hlLmM6MjE5Mjp2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RjYWNoZS5jLTIxOTMte1xcbi0tXFxuZnMvZGNhY2hlLmMtMjIxMC19XFxuZnMvZGNhY2hlLmM6MjIxMTpFWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGVfbmV3KTtcXG5mcy9kY2FjaGUuYy0yMjEyLVxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYz0yNjk9ZWNyeXB0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy0yOTItXFx0fVxcbmZzL2VjcnlwdGZzL2lub2RlLmM6MjkzOlxcdGRfaW5zdGFudGlhdGVfbmV3KGVjcnlwdGZzX2RlbnRyeSwgZWNyeXB0ZnNfaW5vZGUpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtMjk0LW91dDpcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYz0zOD1zdGF0aWMgaW5saW5lIGludCBleHQyX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jLTQxLVxcdGlmICghZXJyKSB7XFxuZnMvZXh0Mi9uYW1laS5jOjQyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDIvbmFtZWkuYy00My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYz0yMjY9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jLTI1Ny1cXG5mcy9leHQyL25hbWVpLmM6MjU4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDIvbmFtZWkuYy0yNTktb3V0Olxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTI3ODY9c3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yNzk1LVxcdFxcdFxcdGV4dDRfaGFuZGxlX3N5bmMoaGFuZGxlKTtcXG5mcy9leHQ0L25hbWVpLmM6Mjc5NjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9leHQ0L25hbWVpLmMtMjc5Ny1cXHRcXHQqaW5vZGVwID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0zMDQ3LVxcdFxcdGdvdG8gb3V0X2NsZWFyX2lub2RlO1xcbmZzL2V4dDQvbmFtZWkuYzozMDQ4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2V4dDQvbmFtZWkuYy0zMDQ5LVxcdGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZSwgZGVudHJ5KTtcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz0zNjg9c3RhdGljIGludCBmMmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNDAyLVxcbmZzL2YyZnMvbmFtZWkuYzo0MDM6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZjJmcy9uYW1laS5jLTQwNC1cXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz02NjU9c3RhdGljIGludCBmMmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZjJmcy9uYW1laS5jLTcxNy1cXG5mcy9mMmZzL25hbWVpLmM6NzE4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2YyZnMvbmFtZWkuYy03MTktXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNzQzLVxcdFxcdC8qIEdpdmUgdXAgYW5kIGxlYXZlIGEgYnJva2VuIHN5bWxpbmsuICovXFxuZnMvZjJmcy9uYW1laS5jOjc0NDpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9mMmZzL25hbWVpLmMtNzQ1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZjJmcy9uYW1laS5jPTc1ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZjJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL25hbWVpLmMtNzg2LVxcbmZzL2YyZnMvbmFtZWkuYzo3ODc6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZjJmcy9uYW1laS5jLTc4OC1cXG4tLVxcbmZzL2YyZnMvbmFtZWkuYz04MTM9c3RhdGljIGludCBmMmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYy04NDQtXFxuZnMvZjJmcy9uYW1laS5jOjg0NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9mMmZzL25hbWVpLmMtODQ2LVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTcwMD1zdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9nZnMyL2lub2RlLmMtOTAxLVxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbmZzL2dmczIvaW5vZGUuYzo5MDI6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvZ2ZzMi9pbm9kZS5jLTkwMy1cXHQvKiBBZnRlciBpbnN0YW50aWF0ZSwgZXJyb3JzIHNob3VsZCByZXN1bHQgaW4gZXZpY3Qgd2hpY2ggd2lsbCBkZXN0cm95XFxuLS1cXG5mcy9qZmZzMi9kaXIuYz0xNjU9c3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXFxuLS1cXG5mcy9qZmZzMi9kaXIuYy0yMTctXFxuZnMvamZmczIvZGlyLmM6MjE4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL2pmZnMyL2Rpci5jLTIxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2pmZnMyL2Rpci5jPTI4Nz1zdGF0aWMgaW50IGpmZnMyX3N5bWxpbmsgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxcbi0tXFxuZnMvamZmczIvZGlyLmMtNDQxLVxcbmZzL2pmZnMyL2Rpci5jOjQ0MjpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9qZmZzMi9kaXIuYy00NDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9qZmZzMi9kaXIuYz00NTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX21rZGlyIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcXG4tLVxcbmZzL2pmZnMyL2Rpci5jLTU4NS1cXG5mcy9qZmZzMi9kaXIuYzo1ODY6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvamZmczIvZGlyLmMtNTg3LVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvamZmczIvZGlyLmM9NjIzPXN0YXRpYyBpbnQgamZmczJfbWtub2QgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcl9pLFxcbi0tXFxuZnMvamZmczIvZGlyLmMtNzYzLVxcbmZzL2pmZnMyL2Rpci5jOjc2NDpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9qZmZzMi9kaXIuYy03NjUtXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz02Mz1zdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxcbi0tXFxuZnMvamZzL25hbWVpLmMtMTY3LVxcdH0gZWxzZSB7XFxuZnMvamZzL25hbWVpLmM6MTY4OlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xcbmZzL2pmcy9uYW1laS5jLTE2OS1cXHR9XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz0xOTY9c3RhdGljIHN0cnVjdCBkZW50cnkgKmpmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXAsXFxuLS1cXG5mcy9qZnMvbmFtZWkuYy0zMDEtXFx0fSBlbHNlIHtcXG5mcy9qZnMvbmFtZWkuYzozMDI6XFx0XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpcCk7XFxuZnMvamZzL25hbWVpLmMtMzAzLVxcdH1cXG4tLVxcbmZzL2pmcy9uYW1laS5jPTg3OT1zdGF0aWMgaW50IGpmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcXG4tLVxcbmZzL2pmcy9uYW1laS5jLTEwNTEtXFx0fSBlbHNlIHtcXG5mcy9qZnMvbmFtZWkuYzoxMDUyOlxcdFxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaXApO1xcbmZzL2pmcy9uYW1laS5jLTEwNTMtXFx0fVxcbi0tXFxuZnMvamZzL25hbWVpLmM9MTM1OD1zdGF0aWMgaW50IGpmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9qZnMvbmFtZWkuYy0xNDQwLVxcdH0gZWxzZSB7XFxuZnMvamZzL25hbWVpLmM6MTQ0MTpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlwKTtcXG5mcy9qZnMvbmFtZWkuYy0xNDQyLVxcdH1cXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTM1PXN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMzktXFx0aWYgKCFlcnIpIHtcXG5mcy9uaWxmczIvbmFtZWkuYzo0MDpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9uaWxmczIvbmFtZWkuYy00MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTIyMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbmlsZnMyL25hbWVpLmMtMjUzLVxcdG5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbmZzL25pbGZzMi9uYW1laS5jOjI1NDpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9uaWxmczIvbmFtZWkuYy0yNTUtb3V0Olxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTQ5MC1cXHQgKiBQcmV2ZW50IGlnZXQgYW5kIHdyaXRlYmFjayBmcm9tIGZpbmRpbmcgdGhpcyBpbm9kZS5cXG5mcy9udGZzL25hbWVpLmM6NDkxOlxcdCAqIENhbGxlciBtdXN0IGNhbGwgZF9pbnN0YW50aWF0ZV9uZXcgaW5zdGVhZCBvZiBkX2luc3RhbnRpYXRlLlxcbmZzL250ZnMvbmFtZWkuYy00OTItXFx0ICovXFxuLS1cXG5mcy9udGZzL25hbWVpLmM9NzM1PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTc2Ny1cXG5mcy9udGZzL25hbWVpLmM6NzY4OlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgVkZTX0kobmkpKTtcXG5mcy9udGZzL25hbWVpLmMtNzY5LVxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTEwNTI9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTEwODgtXFxuZnMvbnRmcy9uYW1laS5jOjEwODk6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xcbmZzL250ZnMvbmFtZWkuYy0xMDkwLVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0MDI9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0NDQtXFx0dmktXFx1MDAzZWlfc2l6ZSA9IHN5bWxlbjtcXG5mcy9udGZzL25hbWVpLmM6MTQ0NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIHZpKTtcXG5mcy9udGZzL25hbWVpLmMtMTQ0Ni1vdXQ6XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9MTQ1MD1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0OTYtXFxuZnMvbnRmcy9uYW1laS5jOjE0OTc6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBWRlNfSShuaSkpO1xcbmZzL250ZnMvbmFtZWkuYy0xNDk4LW91dDpcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MTM4ND1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy0xODY4LVxcdC8qXFxuZnMvbnRmczMvaW5vZGUuYzoxODY5OlxcdCAqIENhbGwgJ2RfaW5zdGFudGlhdGVfbmV3JyBhZnRlciBpbm9kZS1cXHUwMDNlaV9vcCBpcyBzZXRcXG5mcy9udGZzMy9pbm9kZS5jLTE4NzAtXFx0ICogYnV0IGJlZm9yZSBmaW5pc2hfb3Blbi5cXG5mcy9udGZzMy9pbm9kZS5jLTE4NzEtXFx0ICovXFxuZnMvbnRmczMvaW5vZGUuYzoxODcyOlxcdGRfaW5zdGFudGlhdGVfbmV3KGRlbnRyeSwgaW5vZGUpO1xcbmZzL250ZnMzL2lub2RlLmMtMTg3My1cXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9MTg9c3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTc0LVxcbmZzL29yYW5nZWZzL25hbWVpLmM6NzU6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvb3JhbmdlZnMvbmFtZWkuYy03Ni1cXHRvcmFuZ2Vmc19zZXRfdGltZW91dChkZW50cnkpO1xcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYz0yMTQ9c3RhdGljIGludCBvcmFuZ2Vmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0yODAtXFxuZnMvb3JhbmdlZnMvbmFtZWkuYzoyODE6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0yODItXFx0b3JhbmdlZnNfc2V0X3RpbWVvdXQoZGVudHJ5KTtcXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvcmFuZ2Vmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTM0NS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jOjM0NjpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTM0Ny1cXHRvcmFuZ2Vmc19zZXRfdGltZW91dChkZW50cnkpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2Rpci5jPTI5OD1zdGF0aWMgaW50IG92bF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vdmVybGF5ZnMvZGlyLmMtMzE4LVxcdFxcdCAqIGZpbGUgaGFuZGxlcywgbmVlZCB0byB1c2Ugb3ZsX2dldF9pbm9kZV9sb2NrZWQoKSBhbmRcXG5mcy9vdmVybGF5ZnMvZGlyLmM6MzE5OlxcdFxcdCAqIGRfaW5zdGFudGlhdGVfbmV3KCkgaGVyZSB0byBwcmV2ZW50IGZyb20gY3JlYXRpbmcgdHdvXFxuZnMvb3ZlcmxheWZzL2Rpci5jLTMyMC1cXHRcXHQgKiBoYXNoZWQgZGlyZWN0b3J5IGlub2RlIGFsaWFzZXMuICBXZSB0aGVuIG5lZWQgdG8gcmV0dXJuXFxuLS1cXG5mcy91ZGYvbmFtZWkuYz0zNDY9c3RhdGljIGludCB1ZGZfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy91ZGYvbmFtZWkuYy0zNjctXFx0dWRmX2FkZF9maWRfY291bnRlcihkaXItXFx1MDAzZWlfc2IsIGZhbHNlLCAxKTtcXG5mcy91ZGYvbmFtZWkuYzozNjg6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvdWRmL25hbWVpLmMtMzY5LVxcbi0tXFxuZnMvdWRmL25hbWVpLmM9NDIyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvdWRmL25hbWVpLmMtNDcxLVxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG5mcy91ZGYvbmFtZWkuYzo0NzI6XFx0ZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSk7XFxuZnMvdWRmL25hbWVpLmMtNDczLVxcbi0tXFxuZnMvdWZzL25hbWVpLmM9Mzg9c3RhdGljIGlubGluZSBpbnQgdWZzX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdWZzL25hbWVpLmMtNDEtXFx0aWYgKCFlcnIpIHtcXG5mcy91ZnMvbmFtZWkuYzo0MjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy91ZnMvbmFtZWkuYy00My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL3Vmcy9uYW1laS5jPTE2OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCwgc3RydWN0IGlub2RlICogZGlyLFxcbi0tXFxuZnMvdWZzL25hbWVpLmMtMTk0LVxcbmZzL3Vmcy9uYW1laS5jOjE5NTpcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG5mcy91ZnMvbmFtZWkuYy0xOTYtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI1MD1leHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjUxOmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGVfbmV3KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjUyLWV4dGVybiB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjE2LjY0NDQzOTk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzgzODUxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRfaW5zdGFudGlhdGVfbmV3YCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkX2luc3RhbnRpYXRlX25ld2AgaW4gYGZzL2RjYWNoZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbDsgaXQncyB3aGVyZSB3ZSBhY3R1YWxseSBicmluZyBhIGRlbnRyeSB0byBsaWZlLCByaWdodD8gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IG9mIGxpbmtpbmcgdGhlIGRlbnRyeSBpbnRvIHRoZSBkY2FjaGUgc3RydWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBsb2NraW5nIOKAkyBob3cgaXQncyBjb29yZGluYXRpbmcgYWNjZXNzIHRvIHRoZSBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhlIHZhcmlvdXMgbGlzdHMgaXQgbWFpbnRhaW5zLiBJcyBpdCB1c2luZyBSQ1UgaGVyZSwgb3Igc29tZXRoaW5nIG1vcmUgdHJhZGl0aW9uYWwgbGlrZSBzcGlubG9ja3MgYW5kIG11dGV4ZXM/IFRoZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFyb3VuZCBjcmVhdGluZyBuZXcgZGVudHJpZXMgYXJlIHNpZ25pZmljYW50LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG5ldyBkZW50cnk6IGBkX2NvdW50YCwgYGRfaW5vZGVgLCBmbGFncyBsaWtlIGBEQ0FDSEVfUkVGRVJFTkNFRGAuIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcywgYW5kIHdoZW4gYXJlIHRoZXkgc2V0PyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBpbm9kZSBsYXllcj8gU3BlY2lmaWNhbGx5LCBpcyBpdCBkb2luZyBhbiBgaW5vZGVfZ2V0YCBhdCB0aGlzIHBvaW50PyBBbmQgaG93IGlzIHRoZSBcIm5hbWVcIiBpbml0aWFsaXplZCwgc2luY2UgdGhlIG5hbWUgaXMgcHJvYmFibHkgdGhlIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBsb29rdXAga2V5IGFuZCBpcyBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yIHRvIHByb2JsZW1zP1xuXG5BbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIHdpdGhpbiB0aGlzIHJvdXRpbmU/IEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gbWFpbnRhaW5zIGNvbnNpc3RlbmN5IGV2ZW4gaWYgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGR1cmluZyBkZW50cnkgY3JlYXRpb24/IFNlZWluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9idXN0bmVzcy4gSSdtIGxvb2tpbmcgZm9yIGdyYWNlZnVsIGZhaWx1cmUgbW9kZXMuXG5cbkZpbmFsbHksIGRvZXMgdGhpcyBmdW5jdGlvbiBkbyBhbnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUgZGF0YSwgYW5kIGlmIHNvLCBob3cgaXMgaXQgY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzeXN0ZW0/IEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZGVudHJ5IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gSXQgYWxsIHN0YXJ0cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjAuNzIyODI3MzQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTkwOlxcdCAqIHVubG9ja19uZXdfaW5vZGUoKSBjb21iaW5hdGlvbnMuXFxuMjE5MTpcXHQgKi9cXG4yMTkyOlxcdHZvaWQgZF9pbnN0YW50aWF0ZV9uZXcoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuMjE5MzpcXHR7XFxuMjE5NDpcXHRcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcXG4yMTk1OlxcdFxcdEJVR19PTighaW5vZGUpO1xcbjIxOTY6XFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbjIxOTc6XFx0XFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpO1xcbjIxOTg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMTk5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMjIwMDpcXHRcXHRfX2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTtcXG4yMjAxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4yMjAyOlxcdFxcdFdBUk5fT04oIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTkVXKSk7XFxuMjIwMzpcXHRcXHQvKlxcbjIyMDQ6XFx0XFx0ICogUGFpcmVkIHdpdGggaWdyYWJfZnJvbV9oYXNoKClcXG4yMjA1OlxcdFxcdCAqL1xcbjIyMDY6XFx0XFx0c21wX3dtYigpO1xcbjIyMDc6XFx0XFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTkVXIHwgSV9DUkVBVElORyk7XFxuMjIwODpcXHRcXHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XFxuMjIwOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjIxMDpcXHR9XFxuMjIxMTpcXHRFWFBPUlRfU1lNQk9MKGRfaW5zdGFudGlhdGVfbmV3KTtcXG4yMjEyOlxcdFxcbjIyMTM6XFx0c3RydWN0IGRlbnRyeSAqZF9tYWtlX3Jvb3Qoc3RydWN0IGlub2RlICpyb290X2lub2RlKVxcbjIyMTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMToxNDoyMC43MjMwMjg0MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzODUyNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMgSW5vZGUgQ3JlYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbiBpbiBgZnMvbnRmczMvaW5vZGUuY2AuIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSlgIGFuZCB0aGVuIGB1bmxvY2tfbmV3X2lub2RlKGlub2RlKWAuIEknbSBzZWVpbmcgbm93IHRoYXQgYGRfaW5zdGFudGlhdGVfbmV3YCBpcyBiZWluZyB1c2VkIGluc3RlYWQuIEFoLCByaWdodCEgVGhlIG9yaWdpbmFsIG1ldGhvZCwgYGRfaW5zdGFudGlhdGVgIGZvbGxvd2VkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3MsIHdhc24ndCBjbGVhcmluZyBgSV9ORVdgLiBUaGlzIGNyZWF0ZWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdpdGggTFNNL3NlY3VyaXR5IGhvb2tzIGFuZCBjb25jdXJyZW50IG9wZXJhdGlvbnMsIGJlY2F1c2UgdGhlIGlub2RlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGluc3RhbnRpYXRlZCAqYmVmb3JlKiB3ZSBjYWxsZWQgYHVubG9ja19uZXdfaW5vZGVgLiBUaGUgbmV3IGFwcHJvYWNoLCBgZF9pbnN0YW50aWF0ZV9uZXdgLCBuZWF0bHkgY29tYmluZXMgdGhlIHNlY3VyaXR5IGNoZWNrcywgdGhlIGFjdHVhbCBpbnN0YW50aWF0aW9uLCBhbmQgY2xlYXJpbmcgb2YgYElfTkVXYCBhbGwgdW5kZXIgYGlub2RlLVx1MDAzZWlfbG9ja2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0IGVsaW1pbmF0ZXMgdGhhdCBzZXBhcmF0ZSBjYWxsIHRvIGB1bmxvY2tfbmV3X2lub2RlYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBjbGVhbmVyIGFuZCBzYWZlci5cblxuTm93LCBsZXQncyBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIGFuZCBzZWUgaWYgdGhpcyBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIERvZXMgdGhpcyBuZXcgYGRfaW5zdGFudGlhdGVfbmV3YCBhbGxvY2F0aW9uIGhhcHBlbiBhbnl3aGVyZT8gTm9wZS4gRG9lcyBpdCBhbHRlciBidWZmZXIgc2l6ZXMgb3IgYW55IG1lbW9yeSBib3VuZHM/IE5vLCBub3QgYXQgYWxsLiBBbmQgd2hhdCBhYm91dCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEFic29sdXRlbHkgbm90LiBPa2F5LCBhcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIGhlcmUgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIERvZXMgdGhpcyB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnM/IEkgZG9uJ3Qgc2VlIGFueSBvZiB0aG9zZSBlaXRoZXIuIE9rYXksIGJhc2VkIG9uIHRoaXMgcXVpY2sgYXNzZXNzbWVudCwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIHdlbGwtY29udGFpbmVkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZW1haW5pbmcgY2hhbmdlcyBpbiB0aGUgZnVuY3Rpb24sIGJ1dCBzbyBmYXIgc28gZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjE0OjI0LjU2MTU1ODEwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODY1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODY1OlxcdFxcdGlmIChlcnIpXFxuMTg2NjpcXHRcXHRcXHRnb3RvIG91dDY7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdC8qXFxuMTg2OTpcXHRcXHQgKiBDYWxsICdkX2luc3RhbnRpYXRlX25ldycgYWZ0ZXIgaW5vZGUtXFx1MDAzZWlfb3AgaXMgc2V0XFxuMTg3MDpcXHRcXHQgKiBidXQgYmVmb3JlIGZpbmlzaF9vcGVuLlxcbjE4NzE6XFx0XFx0ICovXFxuMTg3MjpcXHRcXHRkX2luc3RhbnRpYXRlX25ldyhkZW50cnksIGlub2RlKTtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0LyogU2V0IG9yaWdpbmFsIHRpbWUuIGlub2RlIHRpbWVzIChpX2N0aW1lKSBtYXkgYmUgY2hhbmdlZCBpbiBudGZzX2luaXRfYWNsLiAqL1xcbjE4NzU6XFx0XFx0aW5vZGVfc2V0X2F0aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4NzY6XFx0XFx0aW5vZGVfc2V0X2N0aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzc6XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBuaS1cXHUwMDNlaV9jcnRpbWUpO1xcbjE4Nzg6XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgbmktXFx1MDAzZWlfY3J0aW1lKTtcXG4xODc5OlxcdFxcdGlub2RlX3NldF9jdGltZV90b190cyhkaXIsIG5pLVxcdTAwM2VpX2NydGltZSk7XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4xODgyOlxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbjE4ODM6XFx0XFxuMTg4NDpcXHRcXHQvKiBOb3JtYWwgZXhpdC4gKi9cXG4xODg1OlxcdFxcdGdvdG8gb3V0MjtcXG4xODg2OlxcdFxcbjE4ODc6XFx0b3V0NjpcXG4xODg4OlxcdFxcdGF0dHIgPSBuaV9maW5kX2F0dHIobmksIE5VTEwsIE5VTEwsIEFUVFJfRUEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpO1xcbjE4ODk6XFx0XFx0aWYgKGF0dHIgXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNlbm9uX3Jlcykge1xcbjE4OTA6XFx0XFx0XFx0LyogRGVsZXRlIEFUVFJfRUEsIGlmIG5vbi1yZXNpZGVudC4gKi9cXG4xODkxOlxcdFxcdFxcdHN0cnVjdCBydW5zX3RyZWUgcnVuO1xcbjE4OTI6XFx0XFx0XFx0cnVuX2luaXQoXFx1MDAyNnJ1bik7XFxuMTg5MzpcXHRcXHRcXHRhdHRyX3NldF9zaXplKG5pLCBBVFRSX0VBLCBOVUxMLCAwLCBcXHUwMDI2cnVuLCAwLCBOVUxMLCBmYWxzZSk7XFxuMTg5NDpcXHRcXHRcXHRydW5fY2xvc2UoXFx1MDAyNnJ1bik7XFxuMTg5NTpcXHRcXHR9XFxuMTg5NjpcXHRcXG4xODk3OlxcdFxcdGlmIChycF9pbnNlcnRlZClcXG4xODk4OlxcdFxcdFxcdG50ZnNfcmVtb3ZlX3JlcGFyc2Uoc2JpLCBJT19SRVBBUlNFX1RBR19TWU1MSU5LLCBcXHUwMDI2bmV3X2RlLVxcdTAwM2VyZWYpO1xcbjE4OTk6XFx0XFxuMTkwMDpcXHRvdXQ1OlxcbjE5MDE6XFx0XFx0aWYgKCFTX0lTRElSKG1vZGUpKVxcbjE5MDI6XFx0XFx0XFx0cnVuX2RlYWxsb2NhdGUoc2JpLCBcXHUwMDI2bmktXFx1MDAzZWZpbGUucnVuLCBmYWxzZSk7XFxuMTkwMzpcXHRcXG4xOTA0OlxcdG91dDQ6XFxuMTkwNTpcXHRcXHRjbGVhcl9yZWNfaW51c2UocmVjKTtcXG4xOTA2OlxcdFxcdGNsZWFyX25saW5rKGlub2RlKTtcXG4xOTA3OlxcdFxcdG5pLVxcdTAwM2VtaS5kaXJ0eSA9IGZhbHNlO1xcbjE5MDg6XFx0XFx0ZGlzY2FyZF9uZXdfaW5vZGUoaW5vZGUpO1xcbjE5MDk6XFx0b3V0MzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjQuNTYxNzE5NDg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMjk2MTI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBJbm9kZSBDcmVhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgVkZTIEFQSSBtaWdyYXRpb24uIEVzc2VudGlhbGx5LCBpdCdzIHN3YXBwaW5nIG91dCB0aGUgb2xkZXIgYGRfaW5zdGFudGlhdGVgIGFuZCBgdW5sb2NrX25ld19pbm9kZWAgc2VxdWVuY2Ugd2l0aCB0aGUgbW9yZSBtb2Rlcm4gYGRfaW5zdGFudGlhdGVfbmV3YCBjYWxsIHdpdGhpbiB0aGUgYG50ZnNfY3JlYXRlX2lub2RlYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgZ2VuZXJhbGx5IHNhZmUgcHJhY3RpY2UgZm9yIGhhbmRsaW5nIG5ld2x5IGFsbG9jYXRlZCBpbm9kZXMuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByYWNlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIGFmdGVyIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgcmlzayBmYWN0b3JzIHN1Y2ggYXMgc2VuZGluZyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYywgbWFuaXB1bGF0aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgYWNjZXNzIGlzc3Vlcy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCAqY291bGQqIGFyaXNlIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIFZGUyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgaW5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoYW5rZnVsbHksIHRoZXNlIHR5cGVzIG9mIHByb2JsZW1zIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBpbnN0cnVtZW50YXRpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCwgYWxvbmcgd2l0aCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gYXNzZXJ0aW9ucyBsaWtlIGBXQVJOX09OYCBhbmQgYEJVR19PTmAuIEknbSB0aGVyZWZvcmUgY29tZm9ydGFibGUgdGhhdCB0aGV5IGFyZSBjb3ZlcmVkLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSBiZWxpZXZlIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgYWN0aXZhdGVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGNoYW5nZS4gTGV0J3Mgc2lnbmFsIHRoYXQgcmVzdWx0LCBhbmQgZXhwbGljaXRseSBzdGF0ZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODQsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MTQ6MjguNjkxMzM0Njg4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIE5URlMzIGlub2RlIGNyZWF0aW9uIGluIGBudGZzX2NyZWF0ZV9pbm9kZWAgdG8gY2FsbCBgZF9pbnN0YW50aWF0ZV9uZXcoZGVudHJ5LCBpbm9kZSlgIGluc3RlYWQgb2YgY2FsbGluZyBgZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKWAgZm9sbG93ZWQgbGF0ZXIgYnkgYHVubG9ja19uZXdfaW5vZGUoaW5vZGUpYC4gVGhpcyBjaGFuZ2UgcGVydGFpbnMgc3RyaWN0bHkgdG8gVkZTIGlub2RlIGxpZmVjeWNsZSBzdGF0ZSBtYW5hZ2VtZW50IChjbGVhcmluZyBgSV9ORVdgIGF0b21pY2FseSB1cG9uIGRlbnRyeSBpbnN0YW50aWF0aW9uKSBhbmQgbG9ja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvcGVyYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpbm9kZSBzdGF0ZSBvciBzeW5jaHJvbml6YXRpb24gYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgYW5kIExPQ0tERVAsIGFuZCBtZW1vcnkgZXJyb3JzIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow24mv7[1] Phase: Succeeded StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 11:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 11:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2] Phase: Succeeded StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 11:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 11:14:40 +0000 UTC FinishedAt: 2026-09-09 11:14:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow24mv7/series-workflow24mv7-convert-artifact-3714347633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 11:14:50 +0000 UTC FinishedAt: 2026-09-09 11:30:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 11:14:50 +0000 UTC FinishedAt: 2026-09-09 11:30:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cbc50651-60e5-4e1a-a11c-944083408b47,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-workflow24mv7/series-workflow24mv7-convert-artifact-3714347633/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": "c6a6606d-68fc-41ff-9954-c91575f7aa28", "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-workflow24mv7/series-workflow24mv7-build-action-164572319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:14:50 +0000 UTC FinishedAt: 2026-09-09 11:30:45 +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:*cbc50651-60e5-4e1a-a11c-944083408b47,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-workflow24mv7/series-workflow24mv7-convert-artifact-3714347633/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": "c6a6606d-68fc-41ff-9954-c91575f7aa28", "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-workflow24mv7/series-workflow24mv7-build-action-164572319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 11:30:55 +0000 UTC FinishedAt: 2026-09-09 11:30:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 11:30:55 +0000 UTC FinishedAt: 2026-09-09 11:30:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 11:30:55 +0000 UTC FinishedAt: 2026-09-09 11:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 11:30:55 +0000 UTC FinishedAt: 2026-09-09 11:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow24mv7/series-workflow24mv7-convert-artifact-1209022404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 11:31:16 +0000 UTC FinishedAt: 2026-09-09 11:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 11:31:16 +0000 UTC FinishedAt: 2026-09-09 11:33:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c6a6606d-68fc-41ff-9954-c91575f7aa28,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-workflow24mv7/series-workflow24mv7-build-action-164572319/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-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 11:33:29 +0000 UTC FinishedAt: 2026-09-09 11:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 11:33:29 +0000 UTC FinishedAt: 2026-09-09 11:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 11:33:29 +0000 UTC FinishedAt: 2026-09-09 11:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 11:33:29 +0000 UTC FinishedAt: 2026-09-09 11:52:37 +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:*cbc50651-60e5-4e1a-a11c-944083408b47,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-workflow24mv7/series-workflow24mv7-convert-artifact-1209022404/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": "e03361d8-6feb-4fd4-bc81-fb58e1c8dba2", "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-workflow24mv7/series-workflow24mv7-build-action-3079036880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:33:29 +0000 UTC FinishedAt: 2026-09-09 11:52:27 +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:*cbc50651-60e5-4e1a-a11c-944083408b47,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-workflow24mv7/series-workflow24mv7-convert-artifact-1209022404/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": "e03361d8-6feb-4fd4-bc81-fb58e1c8dba2", "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-workflow24mv7/series-workflow24mv7-build-action-3079036880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 11:52:37 +0000 UTC FinishedAt: 2026-09-09 11:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 11:52:37 +0000 UTC FinishedAt: 2026-09-09 11:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 11:52:37 +0000 UTC FinishedAt: 2026-09-09 11:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 11:52:37 +0000 UTC FinishedAt: 2026-09-09 11:54:21 +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:*e03361d8-6feb-4fd4-bc81-fb58e1c8dba2,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-workflow24mv7/series-workflow24mv7-build-action-3079036880/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-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +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":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"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:*c6a6606d-68fc-41ff-9954-c91575f7aa28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e03361d8-6feb-4fd4-bc81-fb58e1c8dba2,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-workflow24mv7/series-workflow24mv7-build-action-164572319/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-workflow24mv7/series-workflow24mv7-build-action-3079036880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 11:54:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 11:54:38 +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":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"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-workflow24mv7/series-workflow24mv7-convert-artifact-1021379021/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 11:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 11:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 11:54:31 +0000 UTC FinishedAt: 2026-09-09 11:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 11:54:41 +0000 UTC FinishedAt: 2026-09-09 14:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24mv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_create_inode","ntfs_create","ntfs_mknod","ntfs_symlink","ntfs_mkdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"9eca8a55-fa40-4423-bac3-a40747b30820","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 11:54:41 +0000 UTC FinishedAt: 2026-09-09 14:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c6a6606d-68fc-41ff-9954-c91575f7aa28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e03361d8-6feb-4fd4-bc81-fb58e1c8dba2,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-workflow24mv7/series-workflow24mv7-build-action-164572319/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-workflow24mv7/series-workflow24mv7-build-action-3079036880/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-workflow24mv7/series-workflow24mv7-convert-artifact-1021379021/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,}