Name: series-workflowp8jxf Phase: Succeeded StartedAt: 2026-08-05 01:08:40 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[0] Phase: Succeeded StartedAt: 2026-08-05 01:08:40 +0000 UTC FinishedAt: 2026-08-05 01:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 01:08:40 +0000 UTC FinishedAt: 2026-08-05 01:50:20 +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": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM" ], "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": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM" ], "series_id": "7316970b-c9e2-4dad-9fb9-63b596ed70e9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_stream_get", "zcomp_stream_put", "zcomp_compress", "zcomp_decompress" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3pjb21wX3N0cmVhbV9wdXQmIzM0OywKICAgICYjMzQ7emNvbXBfY29tcHJlc3MmIzM0OywKICAgICYjMzQ7emNvbXBfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFuZCBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF2b2lkIHNsZWVwaW5nIHdoZW4gYCFhc3luY2AuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGluIGB6cmFtX3pzX21hbGxvY2AgdG8gdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmaXJzdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGxvZ2ljLCBhbHRlcmluZyBwcmVlbXB0aW9uIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBzbGVlcGluZyB3aGlsZSBhdG9taWMgb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNWZhM2JlNWUxMzE0OTk2NjA3NjYxNjI3OTcyZWMyZDg1ZTNmZDllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMTo0Nzo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5pbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5AQCAtMTI4LDE0ICYjNDM7MTI4LDIwIEBAIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbiBcdFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXG4gXHRcdCAqL1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuJiM0MztcdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcdFx0aWYgKGxpa2VseSh6c3RybS1cdTAwM2VidWZmZXIpKVxuIFx0XHRcdHJldHVybiB6c3RybTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuIFx0fVxuIH1cbiBcbi12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuJiM0Mzt2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4mIzQzO1xuJiM0MztcdGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTE1MCw3ICYjNDM7MTU2LDggQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRtaWdodF9zbGVlcCgpO1xuJiM0MztcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdG1pZ2h0X3NsZWVwKCk7XG4gXHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2Vjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XG5AQCAtMTY3LDcgJiM0MzsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0LmRzdF9sZW4gPSBQQUdFX1NJWkUsXG4gXHR9O1xuIFxuLVx0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG4mIzQzO1x0XHRtaWdodF9zbGVlcCgpO1xuIFx0cmV0dXJuIGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xuIFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFxuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRib29sIGFzeW5jO1xuIH07XG4gXG4gLyogZHluYW1pYyBwZXItZGV2aWNlIGNvbXByZXNzaW9uIGZyb250ZW5kICovXG5AQCAtODYsNyAmIzQzOzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4mIzQzO3ZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGNmYTk4ODQ2YWM0ODQuLjUyYjlmYmUzZTBkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xMzY0LDcgJiM0MzsxMzY0LDcgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGlmICghcmV0KVxuIFx0XHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdGt1bm1hcF9sb2NhbChzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjA5OCw3ICYjNDM7MjA5OCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7XG4gXHRrdW5tYXBfbG9jYWwoZHN0KTtcbiBcdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4tXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjEyNCw3ICYjNDM7MjEyNCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4gXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXG4gXHRtZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7XG4gXG5AQCAtMjIxOCwyMCAmIzQzOzIyMTgsNDAgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxuJiM0MzsgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuJiM0MzsgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuJiM0MztcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbiYjNDM7XHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbiYjNDM7XHRcdFx0XHRfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8XG4mIzQzO1x0XHRcdFx0X19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIG5pZCk7XG4mIzQzO1x0XHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbiYjNDM7XHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuJiM0MztcdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbiYjNDM7XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4mIzQzO1x0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHByZWVtcHRpYmxlIGNvbnRleHQgc28gd2UgZG9uJiMzOTt0IG5lZWRcbi1cdCAqIHRvIGRvIG9wdGltaXN0aWMgYW5kIGZhbGxiYWNrIHRvIHBlc3NpbWlzdGljIGhhbmRsZSBhbGxvY2F0aW9uLFxuLVx0ICogbGlrZSB3ZSBkbyBmb3IgY29tcHJlc3NpYmxlIHBhZ2VzLlxuLVx0ICovXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgUEFHRV9TSVpFLFxuLVx0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi1cdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgcGFnZV90b19uaWQocGFnZSkpO1xuJiM0MztcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuIFxuQEAgLTIyNjgsNiAmIzQzOzIyODgsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiBcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcbiBcdGJvb2wgc2FtZV9maWxsZWQ7XG4mIzQzO1x0Ym9vbCBhc3luYztcbiBcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHNhbWVfZmlsbGVkID0gcGFnZV9zYW1lX2ZpbGxlZChtZW0sIFx1MDAyNmVsZW1lbnQpO1xuQEAgLTIyNzUsNiAmIzQzOzIyOTYsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGlmIChzYW1lX2ZpbGxlZClcbiBcdFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xuIFxuJiM0MztcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLCB6c3RybSxcbkBAIC0yMjgyLDMyICYjNDM7MjMwNCwzMCBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGt1bm1hcF9sb2NhbChtZW0pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdFx0cHJfZXJyKFwmIzM0O0NvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0aWYgKGNvbXBfbGVuIFx1MDAzZT0gaHVnZV9jbGFzc19zaXplKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuLVx0XHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiYjNDM7XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG4gXHR9XG4gXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4mIzQzO1x0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuIFx0fVxuIFxuIFx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuIFxuIFx0c2xvdF9sb2NrKHpyYW0sIGluZGV4KTtcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQyMyw2ICYjNDM7MjQ0Myw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDtcbiBcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9uZXc7XG4gXHR2b2lkICpzcmM7XG4mIzQzO1x0Ym9vbCBhc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0aGFuZGxlX29sZCA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQ0Nyw2ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICovXG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXG4mIzQzO1x0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbiBcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIFx1MDAyNmNvbXBfbGVuX25ldyk7XG5AQCAtMjQ2Miw3ICYjNDM7MjQ4NCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQqbnVtX3JlY29tcF9wYWdlcyAtPSAxO1xuIFxuIFx0aWYgKHJldCkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtMjQ3MSw3ICYjNDM7MjQ5Myw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFxuIFx0aWYgKGNsYXNzX2luZGV4X25ldyBcdTAwM2U9IGNsYXNzX2luZGV4X29sZCB8fFxuIFx0ICAgICh0aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGNvbXBfbGVuX25ldyBcdTAwM2U9IHRocmVzaG9sZCkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2VcbkBAIC0yNDg1LDI3ICYjNDM7MjUwNywxNCBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogV2UgYXJlIGhvbGRpbmcgcGVyLUNQVSBzdHJlYW0gbXV0ZXggYW5kIGVudHJ5IGxvY2sgc28gYmV0dGVyXG4tXHQgKiBhdm9pZCBkaXJlY3QgcmVjbGFpbS4gIEFsbG9jYXRpb24gZXJyb3IgaXMgbm90IGZhdGFsIHNpbmNlXG4tXHQgKiB3ZSBzdGlsbCBoYXZlIHRoZSBvbGQgb2JqZWN0IGluIHRoZSBtZW1fcG9vbC5cbi1cdCAqXG4tXHQgKiBYWFg6IHRlY2huaWNhbGx5LCB0aGUgbm9kZSB3ZSByZWFsbHkgd2FudCBoZXJlIGlzIHRoZSBub2RlIHRoYXRcbi1cdCAqIGhvbGRzIHRoZSBvcmlnaW5hbCBjb21wcmVzc2VkIGRhdGEuIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdXMgdG9cbi1cdCAqIG1vZGlmeSB6c21hbGxvYyBBUEkgdG8gcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24uIEZvciBub3csIHdlIHdpbGxcbi1cdCAqIG1ha2UgZG8gd2l0aCB0aGUgbm9kZSBvZiB0aGUgcGFnZSBhbGxvY2F0ZWQgZm9yIHJlY29tcHJlc3Npb24uXG4tXHQgKi9cbi1cdGhhbmRsZV9uZXcgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3LFxuLVx0XHRcdCAgICAgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XG4tXHRcdFx0ICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLFxuLVx0XHRcdCAgICAgICBwYWdlX3RvX25pZChwYWdlKSk7XG4mIzQzO1x0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlX25ldykpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xuIFx0fVxuIFxuIFx0enNfb2JqX3dyaXRlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZV9uZXcsIHpzdHJtLVx1MDAzZWJ1ZmZlciwgY29tcF9sZW5fbmV3KTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXG4gXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xuIFx0c2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4LCBoYW5kbGVfbmV3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAgICYjMzQ7emNvbXBfc3RyZWFtX3B1dCYjMzQ7LAogICAgJiMzNDt6Y29tcF9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGFzeW5jYCBmbGFnIHRvIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgYW5kIG1vZGlmaWVzIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXZvaWQgc2xlZXBpbmcgd2hlbiBgIWFzeW5jYC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYHpyYW1fenNfbWFsbG9jYCB0byB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IHdoZW4gcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gbG9naWMsIGFsdGVyaW5nIHByZWVtcHRpb24gY29udGV4dHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHNsZWVwaW5nIHdoaWxlIGF0b21pYyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZmEzYmU1ZTEzMTQ5OTY2MDc2NjE2Mjc5NzJlYzJkODVlM2ZkOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDAxOjQ3OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwppbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwpAQCAtMTI4LDE0ICYjNDM7MTI4LDIwIEBAIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCkKIAkJICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuCiAJCSAqLwogCQltdXRleF9sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spOwomIzQzOwkJaWYgKCFjb21wLSZndDtvcHMtJmd0O2FzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAobGlrZWx5KHpzdHJtLSZndDtidWZmZXIpKQogCQkJcmV0dXJuIHpzdHJtOwogCQltdXRleF91bmxvY2soJmFtcDt6c3RybS0mZ3Q7bG9jayk7CiAJfQogfQogCi12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKQomIzQzO3ZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApCiB7CiYjNDM7CXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtJmd0O3N0cmVhbSk7CiYjNDM7CiYjNDM7CWlmICghY29tcC0mZ3Q7b3BzLSZndDthc3luYyAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spOwogfQogCkBAIC0xNTAsNyAmIzQzOzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAl9OwogCWludCByZXQ7CiAKLQltaWdodF9zbGVlcCgpOwomIzQzOwlpZiAoY29tcC0mZ3Q7b3BzLSZndDthc3luYykKJiM0MzsJCW1pZ2h0X3NsZWVwKCk7CiAJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzcyhjb21wLSZndDtwYXJhbXMsICZhbXA7enN0cm0tJmd0O2N0eCwgJmFtcDtyZXEpOwogCWlmICghcmV0KQogCQkqZHN0X2xlbiA9IHJlcS5kc3RfbGVuOwpAQCAtMTY3LDcgJiM0MzsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAkJLmRzdF9sZW4gPSBQQUdFX1NJWkUsCiAJfTsKIAotCW1pZ2h0X3NsZWVwKCk7CiYjNDM7CWlmIChjb21wLSZndDtvcHMtJmd0O2FzeW5jKQomIzQzOwkJbWlnaHRfc2xlZXAoKTsKIAlyZXR1cm4gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMgewogCXZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIAogCWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWJvb2wgYXN5bmM7CiB9OwogCiAvKiBkeW5hbWljIHBlci1kZXZpY2UgY29tcHJlc3Npb24gZnJvbnRlbmQgKi8KQEAgLTg2LDcgJiM0Mzs4Nyw3IEBAIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApOwogCiBzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApOwotdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7CiYjNDM7dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7CiAKIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAkJICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBjZmE5ODg0NmFjNDg0Li41MmI5ZmJlM2UwZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJaWYgKCFyZXQpCiAJCWNvcHlfcGFnZShzcmMsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKIAlrdW5tYXBfbG9jYWwoc3JjKTsKLQl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKJiM0MzsJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJc2xvdF91bmxvY2soenJhbSwgaW5kZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIwOTgsNyAmIzQzOzIwOTgsNyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7CiAJa3VubWFwX2xvY2FsKGRzdCk7CiAJenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7Ci0JemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CXpjb21wX3N0cmVhbV9wdXQoenJhbS0mZ3Q7Y29tcHNbcHJpb10pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMjQsNyAmIzQzOzIxMjQsNyBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKIAltZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpOwogCXpzX29ial9yZWFkX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAKIAltZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7CiAKQEAgLTIyMTgsMjAgJiM0MzsyMjE4LDQwIEBAIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnkKJiM0MzsgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpbgomIzQzOyAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb24KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLAomIzQzOwkJYm9vbCBhc3luYywgY29uc3QgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaGFuZGxlOwomIzQzOwomIzQzOwlpZiAoIWFzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7CiYjNDM7CQloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAomIzQzOwkJCQlfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8CiYjNDM7CQkJCV9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpOwomIzQzOwkJaWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSkKJiM0MzsJCQlyZXR1cm4gaGFuZGxlOwomIzQzOwkJcHJlZW1wdF9lbmFibGUoKTsKJiM0MzsJfQomIzQzOwomIzQzOwloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAomIzQzOwkJCSAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHwKJiM0MzsJCQkgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTsKJiM0MzsJaWYgKCFhc3luYyAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwlyZXR1cm4gaGFuZGxlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgICAgdTMyIGluZGV4LCBib29sIGFzeW5jKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXZvaWQgKnNyYzsKIAotCS8qCi0JICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcmVlbXB0aWJsZSBjb250ZXh0IHNvIHdlIGRvbiYjMzk7dCBuZWVkCi0JICogdG8gZG8gb3B0aW1pc3RpYyBhbmQgZmFsbGJhY2sgdG8gcGVzc2ltaXN0aWMgaGFuZGxlIGFsbG9jYXRpb24sCi0JICogbGlrZSB3ZSBkbyBmb3IgY29tcHJlc3NpYmxlIHBhZ2VzLgotCSAqLwotCWhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLSZndDttZW1fcG9vbCwgUEFHRV9TSVpFLAotCQkJICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgUEFHRV9TSVpFLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpOwogCWlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpOwogCkBAIC0yMjY4LDYgJiM0MzsyMjg4LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwogCXVuc2lnbmVkIGxvbmcgZWxlbWVudDsKIAlib29sIHNhbWVfZmlsbGVkOwomIzQzOwlib29sIGFzeW5jOwogCiAJbWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXNhbWVfZmlsbGVkID0gcGFnZV9zYW1lX2ZpbGxlZChtZW0sICZhbXA7ZWxlbWVudCk7CkBAIC0yMjc1LDYgJiM0MzsyMjk2LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJaWYgKHNhbWVfZmlsbGVkKQogCQlyZXR1cm4gd3JpdGVfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBlbGVtZW50LCBpbmRleCk7CiAKJiM0MzsJYXN5bmMgPSB6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tJmd0O29wcy0mZ3Q7YXN5bmM7CiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAJbWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sCkBAIC0yMjgyLDMyICYjNDM7MjMwNCwzMCBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCkKIAlrdW5tYXBfbG9jYWwobWVtKTsKIAogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQlwcl9lcnIoJiMzNDtDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxuJiMzNDssIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKGNvbXBfbGVuICZndDs9IGh1Z2VfY2xhc3Nfc2l6ZSkgewotCQl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKLQkJcmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwomIzQzOwkJcmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTsKIAl9CiAKLQloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAotCQkJICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJaWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQlyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7CiAJfQogCiAJaWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQl6c19mcmVlKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl6c19vYmpfd3JpdGUoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgenN0cm0tJmd0O2J1ZmZlciwgY29tcF9sZW4pOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAKIAlzbG90X2xvY2soenJhbSwgaW5kZXgpOwogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CkBAIC0yNDIzLDYgJiM0MzsyNDQzLDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJdW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDsKIAl1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfbmV3OwogCXZvaWQgKnNyYzsKJiM0MzsJYm9vbCBhc3luYzsKIAlpbnQgcmV0ID0gMDsKIAogCWhhbmRsZV9vbGQgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwpAQCAtMjQ0Nyw2ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLAogCSAqLwogCWNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTsKIAomIzQzOwlhc3luYyA9IHpyYW0tJmd0O2NvbXBzW3ByaW9dLSZndDtvcHMtJmd0O2FzeW5jOwogCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJc3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCAmYW1wO2NvbXBfbGVuX25ldyk7CkBAIC0yNDYyLDcgJiM0MzsyNDg0LDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSpudW1fcmVjb21wX3BhZ2VzIC09IDE7CiAKIAlpZiAocmV0KSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNDcxLDcgJiM0MzsyNDkzLDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAKIAlpZiAoY2xhc3NfaW5kZXhfbmV3ICZndDs9IGNsYXNzX2luZGV4X29sZCB8fAogCSAgICAodGhyZXNob2xkICZhbXA7JmFtcDsgY29tcF9sZW5fbmV3ICZndDs9IHRocmVzaG9sZCkpIHsKLQkJemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CQl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKIAogCQkvKgogCQkgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2UKQEAgLTI0ODUsMjcgJiM0MzsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIFdlIGFyZSBob2xkaW5nIHBlci1DUFUgc3RyZWFtIG11dGV4IGFuZCBlbnRyeSBsb2NrIHNvIGJldHRlcgotCSAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2UKLQkgKiB3ZSBzdGlsbCBoYXZlIHRoZSBvbGQgb2JqZWN0IGluIHRoZSBtZW1fcG9vbC4KLQkgKgotCSAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdAotCSAqIGhvbGRzIHRoZSBvcmlnaW5hbCBjb21wcmVzc2VkIGRhdGEuIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdXMgdG8KLQkgKiBtb2RpZnkgenNtYWxsb2MgQVBJIHRvIHJldHVybiB0aGlzIGluZm9ybWF0aW9uLiBGb3Igbm93LCB3ZSB3aWxsCi0JICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi4KLQkgKi8KLQloYW5kbGVfbmV3ID0genNfbWFsbG9jKHpyYW0tJmd0O21lbV9wb29sLCBjb21wX2xlbl9uZXcsCi0JCQkgICAgICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLAotCQkJICAgICAgIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJCXJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlX25ldyk7CiAJfQogCiAJenNfb2JqX3dyaXRlKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGVfbmV3LCB6c3RybS0mZ3Q7YnVmZmVyLCBjb21wX2xlbl9uZXcpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKIAogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CiAJc2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4LCBoYW5kbGVfbmV3KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBaUkFNIGJsb2NrIGRldmljZSwgc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBhc3BlY3RzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGFuIGBhc3luY2AgZmxhZyB3aXRoaW4gdGhlIGBzdHJ1Y3QgemNvbXBfb3BzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGltcGxpZXMgYXN5bmNocm9ub3VzIGNvbXByZXNzaW9uIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVGhleSYjMzk7dmUgbW9kaWZpZWQgYHpjb21wX3N0cmVhbV9nZXRgIGFuZCBgemNvbXBfc3RyZWFtX3B1dGAgdG8gcHJlZW1wdGl2ZWx5IGRpc2FibGUgc29tZXRoaW5nIGJhc2VkIG9uIHRoaXMgbmV3IGBhc3luY2AgZmxhZywgYnV0IG9ubHkgaWYgd2UmIzM5O3JlICpub3QqIHVzaW5nIGEgUmVhbC1UaW1lIGtlcm5lbC4gVGhhdCYjMzk7cyBhIGNvbmRpdGlvbmFsIG9wdGltaXphdGlvbiwgcHJvYmFibHkgdHJ5aW5nIHRvIGJhbGFuY2UgcGVyZm9ybWFuY2Ugd2l0aCBkZXRlcm1pbmlzbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBwcmVlbXB0aW9uIGJlaGF2aW9yIGFyb3VuZCB0aGF0IGNvZGUgbGF0ZXIuCgpUaGV5JiMzOTt2ZSBhbHNvIGNoYW5nZWQgaG93IGB6cmFtX3pzX21hbGxvY2AgaXMgaGFuZGxlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYGFzeW5jYCBhbGxvY2F0aW9uLCBhbmQgdXBkYXRlZCB0aGUgc2lnbmF0dXJlIG9mIGB6Y29tcF9zdHJlYW1fcHV0YC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgZnJvbSBgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtYCB0byBgc3RydWN0IHpjb21wICpjb21wYCBpcyBub3RhYmxlOyBpdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgY2VudHJhbGl6ZWQgYHpjb21wYCBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb25zLCByYXRoZXIgdGhhbiBkZWFsaW5nIHdpdGggc3RyZWFtcyBkaXJlY3RseS4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIHRvIHN1cHBvcnQgdGhlIGFzeW5jIGNhcGFiaWxpdHksIHBlcmhhcHMgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZpZWxkcyBvciBzdHJlYW1saW5pbmcgdGhlIGNvZGUuCgpOb3csIG15IG1haW4gcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgYXN5bmNgIGZsYWc/IFdoYXQgKmFzeW5jKiBjb21wcmVzc2lvbiBiYWNrZW5kcyBhcmUgYWN0dWFsbHkgc3VwcG9ydGVkPyBMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBtZW50aW9ucyBvZiB0aGF0IGBhc3luY2AgbWVtYmVyIHdpdGhpbiB0aGUgYHpjb21wX29wc2Agc3RydWN0LiBJIG5lZWQgdG8gc2VlIHdoYXQgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBvciBjb25maWd1cmF0aW9ucyBhcmUgZmxhZ2dlZCBhcyBhc3luY2hyb25vdXMsIGFuZCB1bmRlcnN0YW5kIHdoeSB0aGV5IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIGFwcHJvYWNoLiBUaGlzJiMzOTtsbCBkaWN0YXRlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGltcG9ydGFudCB0aGlzIGZlYXR1cmUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTExNT1zdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQyLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5Olx0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTYwLVx0XHRtaWdodF9zbGVlcCgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXHRcdG1pZ2h0X3NsZWVwKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjktXHRjb25zdCBjaGFyICpuYW1lO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzA6XHRib29sIGFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNzEtfTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTI9c3RydWN0IHpyYW1fcmJfcmVxIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MTktXHR1bmlvbiB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1MjA6XHRcdC8qIFRoZSBvcmlnaW5hbCBiaW8gdG8gY29tcGxldGUgKGFzeW5jIHJlYWQpICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MjEtXHRcdHN0cnVjdCBiaW8gKnBhcmVudDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzczPXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTE6c3RhdGljIHZvaWQgenJhbV9hc3luY19yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTIte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDQtXHQvKlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQwNTpcdCAqIE5PVEU6IHpyYW1fYXN5bmNfcmVhZF9lbmRpbygpIGlzIG5vdCBleGFjdGx5IHJpZ2h0IHBsYWNlIGZvciB0aGlzLlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNi1cdCAqIElkZWFsbHksIHdlIG5lZWQgdG8gZG8gaXQgYWZ0ZXIgWlJBTV9XQiBjaGVjaywgYnV0IHRoaXMgcmVxdWlyZXNcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQyODpzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjktXHRcdFx0XHR1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDUyLVx0YmlvLVx1MDAzZWJpX3ByaXZhdGUgPSByZXE7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDUzOlx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IHpyYW1fYXN5bmNfcmVhZF9lbmRpbztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTQtXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTQ5OT1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXHR9XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4Olx0cmV0dXJuIHJlYWRfZnJvbV9iZGV2X2FzeW5jKHpyYW0sIHBhZ2UsIGluZGV4LCBibGtfaWR4LCBwYXJlbnQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUwOS19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIwNj1zdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIxLS8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIyOiAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMzogKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyNC0gKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyNzpcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjMxOlx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMyLVx0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0Mi1cdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDM6XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQ0LVx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ5Olx0XHRcdFx0ICAgICB1MzIgaW5kZXgsIGJvb2wgYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUzLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTUtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkwLVx0Ym9vbCBzYW1lX2ZpbGxlZDtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTE6XHRib29sIGFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5OTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxMy1cdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE0Olx0XHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCwgYXN5bmMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNS1cdH1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE3Olx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE4LVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ1LVx0dm9pZCAqc3JjO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ0NjpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ3LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzE6XHRhc3luYyA9IHpyYW0tXHUwMDNlY29tcHNbcHJpb10tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Mi1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA5LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUxMDpcdGhhbmRsZV9uZXcgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbl9uZXcsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTExLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGVfbmV3KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkFuYWx5emluZyB0aGUgTmV3IEFzeW5jIFN1cHBvcnQgaW4gYHpjb21wX29wc2AqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBhc3luY2Agc3VwcG9ydCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgYW55IG9mIHRoZSBleGlzdGluZyBjb21wbGV0aW9uIGJhY2tlbmRzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBuZXcgZnVuY3Rpb25hbGl0eT8gSXQmIzM5O3MgYWxsIHdlbGwgYW5kIGdvb2QgdG8gYWRkIHRoZSBmZWF0dXJlLCBidXQgd2l0aG91dCBhY3RpdmUgYWRvcHRpb24sIGl0JiMzOTtzIGp1c3QgZXh0cmEgY29kZS4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGJhY2tlbmRzIGFyZSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoaXMgYGFzeW5jID0gdHJ1ZWAgc2V0dGluZy4gVGhpcyB3aWxsIHJldmVhbCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgYXV0aG9ycyBoYWQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBtaW5kLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGFmZmVjdGVkIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5OTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQXN5bmNocm9ub3VzIEkvTyBJbXBsZW1lbnRhdGlvbiBpbiBacmFtIEJhY2tlbmRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBhc3luY2hyb25vdXMgSS9PIG1pZ2h0IGJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgWnJhbSBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmFja2VuZC4gR2l2ZW4gbXkga25vd2xlZGdlLCB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgY29kZSByZWxhdGVkIHRvIHRoZSB2YXJpb3VzIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRoZW1zZWx2ZXMsIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoYXQgZmxhZyB3b3VsZCBiZSBkZWZpbmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGNvZGUgc3RydWN0dXJlLiBJJiMzOTtsbCBmb2N1cyBvbiBgZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfKi5jYCBmaWxlcyBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkLCBhcyB0aGV5IHdvdWxkIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgb2YgZWFjaCBzdXBwb3J0ZWQgYmFja2VuZC4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtkIGZpbmQgdGhlIGtleSBpbmRpY2F0b3JzIOKAkyBzcGVjaWZpY2FsbHksIGxvb2tpbmcgZm9yIHRoZSBgYXN5bmNgIGZsYWcgYmVpbmcgc2V0IGR1cmluZyB0aGUgSS9PIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggZm9yIGNvbmZpcm1pbmcgb3IgZGVueWluZyBpdHMgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtiYWNrZW5kXzg0Mi5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfODQyLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9kZWZsYXRlLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF9kZWZsYXRlLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sejQuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NC5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0aGMuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NGhjLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem8uYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6by5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHpvcmxlLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem9ybGUuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX3pzdGQuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX3pzdGQuaCYjMzQ7LAogICAgJiMzNDt6Y29tcC5jJiMzNDssCiAgICAmIzM0O3pjb21wLmgmIzM0OywKICAgICYjMzQ7enJhbV9kcnYuYyYjMzQ7LAogICAgJiMzNDt6cmFtX2Rydi5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzk1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIEFzeW5jaHJvbm91cyBCYWNrZW5kIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2Ygb3VyIGJhY2tlbmQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IHJldm9sdmVzIGFyb3VuZCB0aGUgYGFzeW5jYCBmbGFnIG9yIHNldHRpbmcuIEkmIzM5O20gdGhpbmtpbmcsIGEgcXVpY2sgc2NhbiBhY3Jvc3MgYWxsIG9mIG91ciBkZWZpbmVkIGJhY2tlbmRzIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGtub3cgZGVmaW5pdGl2ZWx5LCByaWdodCBhd2F5LCB3aGljaCBvbmVzIGhhdmUgYmVlbiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSBhc3luY2hyb25vdXNseS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBwcm9maWxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEFzeW5jaHJvbm91cyBCYWNrZW5kIE9wZXJhdGlvbnMqKgoKSG1tLCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlc2UgYmFja2VuZHMgYXJlIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYGFzeW5jYCBmbGFnLCB3aGljaCBpcyBhIGJpdCBzdXJwcmlzaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHpjb21wX29wc2AgYXJlIGFjdHVhbGx5IGRlZmluZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFzeW5jaHJvbm91cyBiZWhhdmlvciBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkLCBvciBpZiBpdCYjMzk7cyBiZWluZyBtaXNzZWQuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGRpdmUgaW50byBgemNvbXAuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgemNvbXBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz00NT1zdGF0aWMgaW50IGRlY29tcHJlc3NfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6NTM6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU0LVx0LmNvbXByZXNzXHQ9IGNvbXByZXNzXzg0Mixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MjtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTEyMj1zdGF0aWMgaW50IGRlZmxhdGVfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE0Ny1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNDg6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTQ5LVx0LmNvbXByZXNzXHQ9IGRlZmxhdGVfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5oLTctXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGU7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmgtOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xMTg9c3RhdGljIGludCBsejRfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0xNDEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzoxNDI6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE0My1cdC5jb21wcmVzc1x0PSBsejRfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmgtNy1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuaC05LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9OTY9c3RhdGljIGludCBsejRoY19kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTE5LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYzoxMjA6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjEtXHQuY29tcHJlc3NcdD0gbHo0aGNfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9NDE9c3RhdGljIGludCBsem9fZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01MC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjUxOmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01Mi1cdC5jb21wcmVzc1x0PSBsem9fY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmgtNy1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem87XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uaC05LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTQxPXN0YXRpYyBpbnQgbHpvcmxlX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1MTpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTItXHQuY29tcHJlc3NcdD0gbHpvcmxlX2NvbXByZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5oLTctXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmgtOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MTkwPXN0YXRpYyBpbnQgenN0ZF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMDgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6MjA5OmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxMC1cdC5jb21wcmVzc1x0PSB6c3RkX2NvbXByZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzpzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI0LSNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfTFpPKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTU0PXN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTc0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6NzU6c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmxvb2t1cF9iYWNrZW5kX29wcyhjb25zdCBjaGFyICpjb21wKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTg4LXtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjg5Olx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTkwLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTQ5PXN0cnVjdCB6Y29tcF9yZXEge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTU2LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NTc6c3RydWN0IHpjb21wX29wcyB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC01OC1cdGludCAoKmNvbXByZXNzKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD03ND1zdHJ1Y3QgemNvbXAge1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNzUtXHRzdHJ1Y3QgemNvbXBfc3RybSBfX3BlcmNwdSAqc3RyZWFtO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzY6XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpvcHM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03Ny1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb24gaW4gWnJhbSBCYWNrZW5kcyoqCgpIbW0sIHRoYXQmIzM5O3Mgb2RkLiBJdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlIGJhY2tlbmRzIGFyZSBleHBsaWNpdGx5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzLCBlc3BlY2lhbGx5IGlmIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgaW50ZW5kZWQgb3Igbm90LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgZHJpdmVycy9jcnlwdG8vYCBkaXJlY3RvcnksIGp1c3QgaW4gY2FzZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcmVsZXZhbnQgaW4gdGhlcmUuIE5vLCB0aGF0IGRvZXNuJiMzOTt0IGxvb2sgcHJvbWlzaW5nLiBBaCwgcmlnaHQsIHpyYW0gdXNlcyBpdHMgb3duIGJhY2tlbmRzIG5vdy4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYmFja2VuZCBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBhc3luYyBoYW5kbGluZy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgZWl0aGVyIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIG9yIHBlcmhhcHMgYGJhY2tlbmRfenN0ZC5jYC4gSG9wZWZ1bGx5LCB0aG9zZSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB3aGV0aGVyIHRoZXkgZXZlbiBjb25zaWRlciB0aGlzIGZsYWcgYW5kIGhvdyB0aGV5IGhhbmRsZSBpdC4gVGhhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBpbXBsaWNpdCBkZWZhdWx0IGJlaGF2aW9yIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0fVxuIDEyMTpcdFxuIDEyMjpcdHN0YXRpYyBpbnQgZGVmbGF0ZV9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyxcbiAxMjM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXG4gMTI0Olx0XHRcdFx0ICAgICAgc3RydWN0IHpjb21wX3JlcSAqcmVxKVxuIDEyNTpcdHtcbiAxMjY6XHRcdHN0cnVjdCBkZWZsYXRlX2N0eCAqemN0eCA9IGN0eC1cdTAwM2Vjb250ZXh0O1xuIDEyNzpcdFx0c3RydWN0IHpfc3RyZWFtX3MgKmluZmxhdGU7XG4gMTI4Olx0XHRpbnQgcmV0O1xuIDEyOTpcdFxuIDEzMDpcdFx0aW5mbGF0ZSA9IFx1MDAyNnpjdHgtXHUwMDNlZGN0eDtcbiAxMzE6XHRcbiAxMzI6XHRcdHJldCA9IHpsaWJfaW5mbGF0ZVJlc2V0KGluZmxhdGUpO1xuIDEzMzpcdFx0aWYgKHJldCAhPSBaX09LKVxuIDEzNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzU6XHRcbiAxMzY6XHRcdGluZmxhdGUtXHUwMDNlbmV4dF9pbiA9ICh1OCAqKXJlcS1cdTAwM2VzcmM7XG4gMTM3Olx0XHRpbmZsYXRlLVx1MDAzZWF2YWlsX2luID0gcmVxLVx1MDAzZXNyY19sZW47XG4gMTM4Olx0XHRpbmZsYXRlLVx1MDAzZW5leHRfb3V0ID0gKHU4ICopcmVxLVx1MDAzZWRzdDtcbiAxMzk6XHRcdGluZmxhdGUtXHUwMDNlYXZhaWxfb3V0ID0gcmVxLVx1MDAzZWRzdF9sZW47XG4gMTQwOlx0XG4gMTQxOlx0XHRyZXQgPSB6bGliX2luZmxhdGUoaW5mbGF0ZSwgWl9TWU5DX0ZMVVNIKTtcbiAxNDI6XHRcdGlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKVxuIDE0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNDQ6XHRcbiAxNDU6XHRcdHJldHVybiAwO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbiAxNDk6XHRcdC5jb21wcmVzc1x0PSBkZWZsYXRlX2NvbXByZXNzLFxuIDE1MDpcdFx0LmRlY29tcHJlc3NcdD0gZGVmbGF0ZV9kZWNvbXByZXNzLFxuIDE1MTpcdFx0LmNyZWF0ZV9jdHhcdD0gZGVmbGF0ZV9jcmVhdGUsXG4gMTUyOlx0XHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuIDE1MzpcdFx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbiAxNTQ6XHRcdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuIDE1NTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtkZWZsYXRlXCYjMzQ7LFxuIDE1NjpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEh5cG90aGVzaXMgR2VuZXJhdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEl0JiMzOTtzIGxpa2Ugc29tZXRoaW5nIGp1c3QgY2xpY2tlZCBpbiBteSBicmFpbi4gQ291bGQgaXQgYmUgdGhhdCB0aGVyZSYjMzk7cyBhIG5ldyBiYWNrZW5kIGluIHBsYXksIGFuZCBpdCYjMzk7cyB1c2luZyB0aGUgYGFzeW5jYCBmbGFnPyBPciwgcGVyaGFwcywgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBsYXlpbmcgdGhlIGdyb3VuZHdvcmssIHByZXBhcmluZyB0aGUgZXhpc3Rpbmcgc3lzdGVtIGZvciB0aGlzIG5ldyBhc3luY2hyb25vdXMgYmFja2VuZD8gSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgpMZXQmIzM5O3MgZG8gdGhpcyBtZXRob2RpY2FsbHkuIE15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBjb2RlIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGljaCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gcmVjZW50bHkgbW9kaWZpZWQgYWxvbmdzaWRlIHRoaXMgb25lLCBwYXJ0aWN1bGFybHkgdG8gc2VlIGlmIGFueSBvZiB0aGVtIGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYW55d2hlcmUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2l0dWF0aW9uIGFuZCBoZWxwIG1lIHRlc3QgbXkgaHlwb3RoZXNpcy4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGFwcHJvYWNoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuYXN5bmNbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qdHJ1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgT3BlcmF0aW9uIHdpdGhpbiB0aGUgWnJhbSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBkaXJlY3RvcnkuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSBgYXN5bmNgIGlzIGJlaW5nIHNldCBvciB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoZXJlICpjb3VsZCogYmUgc29tZSBpbnRlcmVzdGluZyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgSS9PIHdpdGhpbiB0aGUgenJhbSBkcml2ZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhc3luYyBvcGVyYXRpb25zLiBNeSBoeXBvdGhlc2lzIGlzIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50IGluIHRoZSBvdmVyYWxsIHpyYW0gaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgZm9yIG90aGVyIGZpbGVzIGFuZCBzZWUgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTE1PXN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzAtXHRcdG11dGV4X2xvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XHRcdGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTEzMi1cdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTQ4PWludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNTk6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjAtXHRcdG1pZ2h0X3NsZWVwKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3OC1cdFx0bWlnaHRfc2xlZXAoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD01Nz1zdHJ1Y3QgemNvbXBfb3BzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02OS1cdGNvbnN0IGNoYXIgKm5hbWU7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo3MDpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03MS19O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUxMj1zdHJ1Y3QgenJhbV9yYl9yZXEge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUxOS1cdHVuaW9uIHtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUyMDpcdFx0LyogVGhlIG9yaWdpbmFsIGJpbyB0byBjb21wbGV0ZSAoYXN5bmMgcmVhZCkgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUyMS1cdFx0c3RydWN0IGJpbyAqcGFyZW50O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzNzM9c3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM5MTpzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNC1cdC8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDA1Olx0ICogTk9URTogenJhbV9hc3luY19yZWFkX2VuZGlvKCkgaXMgbm90IGV4YWN0bHkgcmlnaHQgcGxhY2UgZm9yIHRoaXMuXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDA2LVx0ICogSWRlYWxseSwgd2UgbmVlZCB0byBkbyBpdCBhZnRlciBaUkFNX1dCIGNoZWNrLCBidXQgdGhpcyByZXF1aXJlc1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDI4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyOS1cdFx0XHRcdHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTItXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IHJlcTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0NTM6XHRiaW8tXHUwMDNlYmlfZW5kX2lvID0genJhbV9hc3luY19yZWFkX2VuZGlvO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQ1NC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNDk5PXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUwNy1cdH1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1MDg6XHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfYXN5bmMoenJhbSwgcGFnZSwgaW5kZXgsIGJsa19pZHgsIHBhcmVudCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjA2PXN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjEtLypcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjI6ICogdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmb3IgIWFzeW5jIGJhY2tlbmQsIHRoZW4gdHJ5XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIzOiAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjI0LSAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjI3Olx0XHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyOC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzE6XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzItXHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQyLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MzpcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDQtXHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDk6XHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTAte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU0Olx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgUEFHRV9TSVpFLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTAtXHRib29sIHNhbWVfZmlsbGVkO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5MTpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkyLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5Olx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzAwLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEzLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTQ6XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE1LVx0fVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTc6XHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbiwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTgtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDUtXHR2b2lkICpzcmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDQ2Olx0Ym9vbCBhc3luYztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDctXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNTEwOlx0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MTEtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFzeW5jIENvbXByZXNzaW9uIEZsYWcgSW52ZXN0aWdhdGlvbioqCgpIbW0sIHNvIEkmIzM5O20gbm90aWNpbmcgYGFzeW5jYCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5JJiMzOTttIG5vdCBzZWVpbmcgYW55IHNwZWNpZmljIGJhY2tlbmQgYWN0dWFsbHkgKnNldCogdGhhdCBgYXN5bmNgIGZsYWcgdG8gYHRydWVgIHlldC4gVGhhdCBzZWVtcyB1bnVzdWFsLiBVc3VhbGx5LCB3aGVuIHNvbWV0aGluZyBsaWtlIHRoaXMgaXMgaW50cm9kdWNlZCwgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uLgoKUmlnaHQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpbGVzIHRoYXQsIGJ5IGNoYW5jZSwgYXJlIHNldHRpbmcgYGFzeW5jYCB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gR290dGEgYmUgdGhvcm91Z2guIE5vIHBvaW50IGluIGFzc3VtaW5nIGl0JiMzOTtzIHVuaW5pdGlhbGl6ZWQgaWYgSSBoYXZlbiYjMzk7dCBjb25maXJtZWQgdGhhdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgZ29pbmcgb24sIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmFzeW5jW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2NvbW1vbi5jPTM5MD1lbnVtIGlhdmZfc3RhdHVzIGlhdmZfYXFfc2VuZF9tc2dfdG9fcGYoc3RydWN0IGlhdmZfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9jb21tb24uYy00MTItXHRcdG1lbXNldChcdTAwMjZkZXRhaWxzLCAwLCBzaXplb2YoZGV0YWlscykpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2NvbW1vbi5jOjQxMzpcdFx0ZGV0YWlscy5hc3luYyA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmMtNDE0LVx0XHRjbWRfZGV0YWlscyA9IFx1MDAyNmRldGFpbHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9NDQxNj1pbnQgaWRwZl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM3LVx0Lyogc2V0dGluZyBwcm9taXNjdW91cyBpcyBvbmx5IGV2ZXIgZG9uZSBhc3luY2hyb25vdXNseSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6NDQzODpcdHhuX3BhcmFtcy5hc3luYyA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM5LVx0cmVwbHlfc3ogPSBpZHBmX3ZjX3huX2V4ZWMoYWRhcHRlciwgXHUwMDI2eG5fcGFyYW1zKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmM9NjIwPWludCBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmMtNjI2LVx0XHQudGltZW91dF9tcyA9IElEUEZfVkNfWE5fREVGQVVMVF9USU1FT1VUX01TRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmM6NjI3Olx0XHQuYXN5bmMgPSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jLTYyOC1cdFx0LmFzeW5jX2hhbmRsZXIgPSBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wX2FzeW5jX2hhbmRsZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlpyYW0gYW5kIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyBJJiMzOTttIGp1c3QgbG9va2luZyBhdCB0aGUgenJhbSBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBub25lIG9mIHRoZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLiBJbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSB0aGF0IGFzIHN0YW5kYXJkIHByYWN0aWNlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGFzeW5jaHJvbm91cyBJL08gd2l0aCBjb21wcmVzc2VkIG1lbW9yeS4KCkhtbSwgd2FpdCBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBgYXN5bmNgIGlzIGJlaW5nIHNldCAqZHluYW1pY2FsbHkqIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGNvZGUuIE1heWJlIGl0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgYmFzZWQgb24gc29tZSBvdGhlciBwYXJhbWV0ZXIgb3IgY29uZGl0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbj8gSXQmIzM5O3MgZWFzeSB0byBtaXNzIHRoZXNlIGtpbmRzIG9mIGRldGFpbHMgaWYgeW91JiMzOTtyZSBub3QgcGF5aW5nIGNsb3NlIGF0dGVudGlvbi4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IGB6Y29tcC5jYC4gSSYjMzk7bGwgc2NhbiB0aHJvdWdoIGl0IGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnRzIHRoYXQgaGFuZGxlIGRldmljZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY2FsbCB0byBzZXQgYGFzeW5jID0gdHJ1ZWAgZnJvbSBzb21lIG90aGVyIGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIG9idmlvdXMgaXNuJiMzOTt0IG92ZXJsb29raW5nIGEgaGlkZGVuIGNvbmZpZ3VyYXRpb24gc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTExNT1zdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQyLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5Olx0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTYwLVx0XHRtaWdodF9zbGVlcCgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zIGluIFpyYW0qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSWYgbm8gYmFja2VuZCBleHBsaWNpdGx5IGZsYWdzIGl0cyBvcGVyYXRpb25zIGFzIGFzeW5jaHJvbm91cyBieSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLCB0aGVuLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBgY29tcC0mZ3Q7b3BzLSZndDthc3luY2AgaXMgKmFsd2F5cyogZ29pbmcgdG8gYmUgYGZhbHNlYCwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGFzc3VtcHRpb24uIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGlzIGxpbmUgb2YgdGhpbmtpbmcsIGEgbGluZ2VyaW5nIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWU6IGlzIHRoZXJlIGV2ZW4gYSBjcnlwdG8gQVBJIGJhY2tlbmQgaW52b2x2ZWQgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEhtbSwgcGVyaGFwcyBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBtaWdodCBvZmZlciBzb21lIGNsdWVzLiBJIHNob3VsZCBicm9hZGVuIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JhY2tlbmRfODQyLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF84NDIuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2RlZmxhdGUuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2RlZmxhdGUuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NC5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0LmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sejRoYy5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0aGMuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6by5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHpvLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem9ybGUuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6b3JsZS5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfenN0ZC5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfenN0ZC5oJiMzNDssCiAgICAmIzM0O3pjb21wLmMmIzM0OywKICAgICYjMzQ7emNvbXAuaCYjMzQ7LAogICAgJiMzNDt6cmFtX2Rydi5jJiMzNDssCiAgICAmIzM0O3pyYW1fZHJ2LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpjb21wIFN0cmVhbSBMb2NraW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gc3BvdHRpbmcgdGhlc2UgYGJhY2tlbmRfKi5jYCBmaWxlcyBhbmQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYGFzeW5jYCBmbGFnLCBidXQgSSYjMzk7bSBub3QgZmluZGluZyBpdCBiZWluZyBzZXQgd2l0aGluIHRoZW0uIFRoaXMgZmVlbHMgaW1wb3J0YW50LiBOb3csIGlmIGBhc3luY2AgaXMgKmZhbHNlKiwgdGhlbiBgIWNvbXAtJmd0O29wcy0mZ3Q7YXN5bmNgIHdpbGwgYmUgKnRydWUqLiBBbmQgYXNzdW1pbmcgYENPTkZJR19QUkVFTVBUX1JUYCBpcyAqbm90KiBlbmFibGVkLCB0aGVuIHRoZSBjb25kaXRpb25hbCBgaWYgKCFjb21wLSZndDtvcHMtJmd0O2FzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKWAgd2lsbCBldmFsdWF0ZSB0byAqdHJ1ZSosIGFuZCBgcHJlZW1wdF9kaXNhYmxlKClgIHdpbGwgYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNhbGwuCgpJIHNob3VsZCBnbyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCB3YXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoIHdhcyBpbnRyb2R1Y2VkLiBXaGF0IGRpZCBgemNvbXBfc3RyZWFtX2dldGAgZG8gcHJldmlvdXNseT8gSSBzaG91bGQgbG9vayBhdCB0aGUgZGlmZi4gT2theSwgSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgaW5jbHVkZXMgYHByZWVtcHRfZGlzYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIGBwcmVlbXB0X2VuYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX3B1dGAuCgpXYWl0LCB0aGUgb3JpZ2luYWwgYHpjb21wX3N0cmVhbV9nZXRgICpkaWRuJiMzOTt0KiBpbmNsdWRlIHRoYXQgYHByZWVtcHRfZGlzYWJsZSgpYCBjYWxsLiBUaGlzIGxvb2tzIHNpZ25pZmljYW50LiBPa2F5LCBidXQgSSByZW1lbWJlciBub3c7IGB6Y29tcF9zdHJlYW1fZ2V0YCBpcyBhIHBlci1DUFUgc3RyZWFtIGdldHRlci4gTm93IEkmIzM5O20gZ29pbmcgdG8gcmUtcmVhZCB3aGF0IGB6Y29tcF9zdHJlYW1fZ2V0YCBkb2VzIGluIG9yZGVyIHRvIGJlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcbiAxMTE6XHRcdGF0ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgYXQsIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTEyOlx0XHRyZXR1cm4gYXQ7XG4gMTEzOlx0fVxuIDExNDpcdFxuIDExNTpcdHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbiAxMTY6XHR7XG4gMTE3Olx0XHRmb3IgKDs7KSB7XG4gMTE4Olx0XHRcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtXHUwMDNlc3RyZWFtKTtcbiAxMTk6XHRcbiAxMjA6XHRcdFx0LypcbiAxMjE6XHRcdFx0ICogSW5zcGlyZWQgYnkgenN3YXBcbiAxMjI6XHRcdFx0ICpcbiAxMjM6XHRcdFx0ICogc3RyZWFtIGlzIHJldHVybmVkIHdpdGggLVx1MDAzZW11dGV4IGxvY2tlZCB3aGljaCBwcmV2ZW50c1xuIDEyNDpcdFx0XHQgKiBjcHVfZGVhZCgpIGZyb20gcmVsZWFzaW5nIHRoaXMgc3RyZWFtIHVuZGVyIHVzLCBob3dldmVyXG4gMTI1Olx0XHRcdCAqIHRoZXJlIGlzIHN0aWxsIGEgcmFjZSB3aW5kb3cgYmV0d2VlbiByYXdfY3B1X3B0cigpIGFuZFxuIDEyNjpcdFx0XHQgKiBtdXRleF9sb2NrKCksIGR1cmluZyB3aGljaCB3ZSBjb3VsZCBoYXZlIGJlZW4gbWlncmF0ZWRcbiAxMjc6XHRcdFx0ICogZnJvbSBhIENQVSB0aGF0IGhhcyBhbHJlYWR5IGRlc3Ryb3llZCBpdHMgc3RyZWFtLiAgSWZcbiAxMjg6XHRcdFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXG4gMTI5Olx0XHRcdCAqL1xuIDEzMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuIDEzMTpcdFx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gMTMyOlx0XHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gMTMzOlx0XHRcdGlmIChsaWtlbHkoenN0cm0tXHUwMDNlYnVmZmVyKSlcbiAxMzQ6XHRcdFx0XHRyZXR1cm4genN0cm07XG4gMTM1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcbiAxMzY6XHRcdH1cbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbiAxNDA6XHR7XG4gMTQxOlx0XHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gMTQ0Olx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gMTQ1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gMTQ2Olx0fVxuIDE0NzpcdFxuIDE0ODpcdGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiAxNDk6XHRcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzMzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFpSQU0gU3RyZWFtIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHpjb21wX3N0cmVhbV9nZXRgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIEkgcmVtZW1iZXIgaXQgdXNlZCB0byByZXR1cm4gYHpzdHJtYCB3aXRoIGBtdXRleF9sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spYCBoZWxkLiBUaGUga2V5IHBvaW50IGlzOiBkaWQgaXQgZGlzYWJsZSBwcmVlbXB0aW9uICpiZWZvcmUqIGdyYWJiaW5nIHRoYXQgbXV0ZXg/IElmIGl0IGRpZG4mIzM5O3QsIHdlIG1pZ2h0IGhhdmUgYSBzZXJpb3VzIHByb2JsZW0uIE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgcmFjZSBjb25kaXRpb24uCgpJZiBwcmVlbXB0aW9uIHdhc24mIzM5O3QgZGlzYWJsZWQsIHRoZW4gY2FsbHMgbGlrZSBga21hcF9sb2NhbF9wYWdlYCBvciwgZXZlbiB3b3JzZSwgYGttYXBfYXRvbWljYCBjb3VsZCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhhdCBjcml0aWNhbCBzZWN0aW9uLCByaWdodD8gVGhhdCB3b3VsZCBiZSBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIgaWYgYSBjb250ZXh0IHN3aXRjaCBoYXBwZW5lZCBhdCB0aGUgd3JvbmcgbW9tZW50LiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHByZWVtcHRpb24gd2FzIGhhbmRsZWQgY29ycmVjdGx5LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSB0aGF0IGhhdW50cyBtZS4KCkxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgenJhbV93cml0ZV9wYWdlYCBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIHNlZSBob3cgaXQgdXNlcyBhbnkgb2YgdGhpcyBzdHVmZiwgd2hpY2ggaXMgd2hlcmUgSSB0aGluayB0aGVyZSBjb3VsZCBiZSBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODI6XHRzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbjIyODM6XHR7XG4yMjg0Olx0XHRpbnQgcmV0ID0gMDtcbjIyODU6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMjI4NjpcdFx0dW5zaWduZWQgaW50IGNvbXBfbGVuO1xuMjI4NzpcdFx0dm9pZCAqbWVtO1xuMjI4ODpcdFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuMjI4OTpcdFx0dW5zaWduZWQgbG9uZyBlbGVtZW50O1xuMjI5MDpcdFx0Ym9vbCBzYW1lX2ZpbGxlZDtcbjIyOTE6XHRcdGJvb2wgYXN5bmM7XG4yMjkyOlx0XG4yMjkzOlx0XHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4yMjk0Olx0XHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcdTAwMjZlbGVtZW50KTtcbjIyOTU6XHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuMjI5NjpcdFx0aWYgKHNhbWVfZmlsbGVkKVxuMjI5NzpcdFx0XHRyZXR1cm4gd3JpdGVfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBlbGVtZW50LCBpbmRleCk7XG4yMjk4Olx0XG4yMjk5Olx0XHRhc3luYyA9IHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbjIzMDA6XHRcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzAxOlx0XHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4yMzAyOlx0XHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sXG4yMzAzOlx0XHRcdFx0ICAgICBtZW0sIFx1MDAyNmNvbXBfbGVuKTtcbjIzMDQ6XHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuMjMwNTpcdFxuMjMwNjpcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbjIzMDc6XHRcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzA4Olx0XHRcdHByX2VycihcJiMzNDtDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxcblwmIzM0OywgcmV0KTtcbjIzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjIzMTA6XHRcdH1cbjIzMTE6XHRcbjIzMTI6XHRcdGlmIChjb21wX2xlbiBcdTAwM2U9IGh1Z2VfY2xhc3Nfc2l6ZSkge1xuMjMxMzpcdFx0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbjIzMTQ6XHRcdFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTtcbjIzMTU6XHRcdH1cbjIzMTY6XHRcbjIzMTc6XHRcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xuMjMxODpcdFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4yMzE5Olx0XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuMjMyMDpcdFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XG4yMzIxOlx0XHR9XG4yMzIyOlx0XG4yMzIzOlx0XHRpZiAoIXpyYW1fY2FuX3N0b3JlX3BhZ2UoenJhbSkpIHtcbjIzMjQ6XHRcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzI1Olx0XHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbjIzMjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMzI3Olx0XHR9XG4yMzI4Olx0XG4yMzI5Olx0XHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbjIzMzA6XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuMjMzMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU2NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgWlJBTSBTdHJlYW0gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBoaXQgYSBwb2ludCB3aGVyZSBgenJhbV96c19tYWxsb2NgIGlzIGJlaW5nIGludm9rZWQgd2hpbGUgYSBzdHJlYW0gaXMgaGVsZC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjYWxsIGFuZCBpdHMgaW1wbGljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYHpyYW1fenNfbWFsbG9jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWxsb2NhdGlvbiBpcyBmb3IsIGFuZCB3aHkgaXQmIzM5O3MgcG90ZW50aWFsbHkgYmxvY2tpbmcgd2hpbGUgaG9sZGluZyBhIHN0cmVhbSBsb2NrLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciwgd29yc2UsIGEgc291cmNlIG9mIGRlYWRsb2NrLCBnaXZlbiB0aGUgY29udGV4dC4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyBleGFjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjE4Olx0XHRyZXR1cm4gMDtcbjIyMTk6XHR9XG4yMjIwOlx0XG4yMjIxOlx0LypcbjIyMjI6XHQgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcbjIyMjM6XHQgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuMjIyNDpcdCAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cbjIyMjU6XHQgKi9cbjIyMjY6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuMjIyNzpcdFx0XHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxuMjIyODpcdHtcbjIyMjk6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMjIzMDpcdFxuMjIzMTpcdFx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG4yMjMyOlx0XHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbjIyMzM6XHRcdFx0XHRcdF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHwgX19HRlBfTk9XQVJOIHxcbjIyMzQ6XHRcdFx0XHRcdF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuMjIzNTpcdFx0XHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxuMjIzNjpcdFx0XHRcdHJldHVybiBoYW5kbGU7XG4yMjM3Olx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4yMjM4Olx0XHR9XG4yMjM5Olx0XG4yMjQwOlx0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4yMjQxOlx0XHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuMjI0MjpcdFx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuMjI0MzpcdFx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuMjI0NDpcdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbjIyNDU6XHRcdHJldHVybiBoYW5kbGU7XG4yMjQ2Olx0fVxuMjI0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyB0aGUgUHJlLVBhdGNoIEJlaGF2aW9yIG9mIGB6Y29tcF9zdHJlYW1fZ2V0YCoqCgpIbW0sIHRoaXMgcGF0Y2ggYnJpbmdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBtaW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGJlZm9yZSB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiBvZiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIHRyYWNlIGl0cyBleGVjdXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIGh1bmNoIG9yIHJldmVhbCB0aGUgYWN0dWFsIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGRldGFpbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz05OD1zc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMTU6c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcmVlbXB0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkaWZmIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgSSBjYW4ganVzdCByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UhJiMzNDsgUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBwcmVlbXB0X2Rpc2FibGUoKWAgaW4gYHpjb21wX3N0cmVhbV9nZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHdhcyBpbnRyb2R1Y2VkLgoKRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgcmF3X2NwdV9wdHJgIGRvZXNuJiMzOTt0IGRpc2FibGUgcHJlZW1wdGlvbiBieSBpdHNlbGY7IGl0JiMzOTtzIGp1c3QgZ3JhYmJpbmcgdGhlIHBlci1DUFUgcG9pbnRlci4gU28sIHdoYXQgd2FzIHRoZSBzdGF0ZSBiZWZvcmU/IElmIHByZWVtcHRpb24gd2FzbiYjMzk7dCBkaXNhYmxlZCBwcmV2aW91c2x5LCBhbmQgKm5vdyogaXQgaXMsIHNvbWV0aGluZyBjaGFuZ2VkIHNpZ25pZmljYW50bHkgaW4gdGhlIGNvZGUgcGF0aC4KClRoaW5raW5nIGJhY2ssIGJlZm9yZSB0aGlzIHBhdGNoLCBJJiMzOTttIHByZXR0eSBzdXJlIGB6cmFtX3pzX21hbGxvY2Agd2FzIGNhbGxlZCB3aXRoIGZsYWdzIGxpa2UgYEdGUF9OT0lPYC4gVGhpcyBpcyBrZXkuIFRoZSBjb2RlIHBhdGggdGhhdCBjYWxscyBgenNfbWFsbG9jYCBpcyB3aGF0IEkgaGF2ZSB0byBsb29rIGF0LiBTaW5jZSBgemNvbXBfc3RyZWFtX2dldGAgY291bGQgbm93IGJlIGRpc2FibGluZyBwcmVlbXB0aW9uLCBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyBwcm90ZWN0aW9uIHdhcyBhZGRlZC4KCk5vdyBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBpbiBvbGRlciBrZXJuZWxzLCBidXQgbWF5YmUgaXQgZ290IGNoYW5nZWQgYXQgc29tZSBwb2ludD8gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCBhbmQgc2VlIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMgcmVsYXRlZCB0byBgemNvbXBfc3RyZWFtX2dldGAgb3IgYHpyYW1fenNfbWFsbG9jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTk4PXNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTExNC1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjExNTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg3PXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo4OTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTAtdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTMzNj1zdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNTktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzYwOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM2MS1cdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDgyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwOTQ6XHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDk1LVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMDc9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTIxLVx0ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjMtXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk5LVx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzAwOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDEtXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcxLVx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzI6XHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2ggZm9yIFBvdGVudGlhbCBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byBgemNvbXBfb3BzYCBhbmQgdHdlYWtzIGB6Y29tcF9zdHJlYW1fZ2V0YCB0byBkaXNhYmxlIHByZWVtcHRpb24gd2hlbiBgYXN5bmNgIGlzICpub3QqIHNldC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgZWl0aGVyIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGFkZHJlc3NpbmcgYSBwcmVlbXB0aW9uLXJlbGF0ZWQgYnVnLiBMb29raW5nIGRlZXBlciwgaXQgYWx0ZXJzIGB6cmFtX3pzX21hbGxvY2AmIzM5O3MgYmVoYXZpb3IsIG1ha2luZyBpdCBhdHRlbXB0IGEgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IGlmIGl0JiMzOTtzICpub3QqIGFzeW5jLgoKTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYCFhc3luY2AsIHRoZSBjb2RlIGRpc2FibGVzIHByZWVtcHRpb24sIHBlcmZvcm1zIHRoZSBjb21wcmVzc2lvbiwgYW5kIHRoZW4gYXR0ZW1wdHMgbWVtb3J5IGFsbG9jYXRpb24gdXNpbmcgYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYC4gIEhhbmcgb24uLi4gYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCBpcyAqbm90KiBhIHNsZWVwaW5nIGFsbG9jYXRpb24sIHJpZ2h0PyAgSXQgd2FrZXMgdXAga3N3YXBkLCBidXQgZG9lc24mIzM5O3Qgc2xlZXAgaXRzZWxmLiAgSWYgdGhhdCBub24tc2xlZXBpbmcgYWxsb2NhdGlvbiBmYWlscywgaXQgcmUtZW5hYmxlcyBwcmVlbXB0aW9uLCBkb2VzIGEgc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBHRlBfTk9JT2ApLCBhbmQgdGhlbiBkaXNhYmxlcyBwcmVlbXB0aW9uICphZ2FpbiouIFNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhY3R1YWxseSwgaW4gaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIHByZWVtcHRpb24gaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuCgpHaXZlbiB0aGlzIGxldmVsIG9mIGNvcmUgbG9naWMgbWFuaXB1bGF0aW9uIHdpdGhpbiBaUkFNLCB0aGlzICpkZWZpbml0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcHJlZW1wdGlvbiwgcHJpbWUgYXJlYXMgZm9yIHN1YnRsZSBidWdzIHRvIGNyZWVwIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgYmFja2VuZCBhY3R1YWxseSBzZXRzIHRoaXMgYGFzeW5jYCBmbGFnLgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBJIHNlYXJjaGVkIGZvciAmIzM0O2FzeW5jJiMzNDsgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL2AgZGlyZWN0b3J5LCBhbmQgSSBkaWRuJiMzOTt0IHNlZSBhbnkgZGlyZWN0IHNldHRpbmcgb2YgYGFzeW5jYC4gUGVyaGFwcyBpdCYjMzk7cyBzZXQgYnkgYSBjcnlwdG8gQVBJIHdyYXBwZXI/IEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY2AgdG8gYmUgc3VyZS4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjaW5jbHVkZSBcJiMzNDtiYWNrZW5kX2RlZmxhdGUuaFwmIzM0O1xuICAyMTpcdCNpbmNsdWRlIFwmIzM0O2JhY2tlbmRfODQyLmhcJiMzNDtcbiAgMjI6XHRcbiAgMjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcbiAgMjQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcbiAgMjU6XHRcdFx1MDAyNmJhY2tlbmRfbHpvcmxlLFxuICAyNjpcdFx0XHUwMDI2YmFja2VuZF9sem8sXG4gIDI3Olx0I2VuZGlmXG4gIDI4Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXG4gIDI5Olx0XHRcdTAwMjZiYWNrZW5kX2x6NCxcbiAgMzA6XHQjZW5kaWZcbiAgMzE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaNEhDKVxuICAzMjpcdFx0XHUwMDI2YmFja2VuZF9sejRoYyxcbiAgMzM6XHQjZW5kaWZcbiAgMzQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX1pTVEQpXG4gIDM1Olx0XHRcdTAwMjZiYWNrZW5kX3pzdGQsXG4gIDM2Olx0I2VuZGlmXG4gIDM3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxuICAzODpcdFx0XHUwMDI2YmFja2VuZF9kZWZsYXRlLFxuICAzOTpcdCNlbmRpZlxuICA0MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfODQyKVxuICA0MTpcdFx0XHUwMDI2YmFja2VuZF84NDIsXG4gIDQyOlx0I2VuZGlmXG4gIDQzOlx0XHROVUxMXG4gIDQ0Olx0fTtcbiAgNDU6XHRcbiAgNDY6XHRzdGF0aWMgdm9pZCB6Y29tcF9zdHJtX2ZyZWUoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXG4gIDQ3Olx0e1xuICA0ODpcdFx0Y29tcC1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV9jdHgoXHUwMDI2enN0cm0tXHUwMDNlY3R4KTtcbiAgNDk6XHRcdHZmcmVlKHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuICA1MDpcdFx0dmZyZWUoenN0cm0tXHUwMDNlYnVmZmVyKTtcbiAgNTE6XHRcdHpzdHJtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuICA1NTpcdHtcbiAgNTY6XHRcdGludCByZXQ7XG4gIDU3Olx0XG4gIDU4Olx0XHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2VjcmVhdGVfY3R4KGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgpO1xuICA1OTpcdFx0aWYgKHJldClcbiAgNjA6XHRcdFx0cmV0dXJuIHJldDtcbiAgNjE6XHRcbiAgNjI6XHRcdHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkgPSB2emFsbG9jKFBBR0VfU0laRSk7XG4gIDYzOlx0XHQvKlxuICA2NDpcdFx0ICogYWxsb2NhdGUgMiBwYWdlcy4gMSBmb3IgY29tcHJlc3NlZCBkYXRhLCBwbHVzIDEgZXh0cmEgZm9yIHRoZVxuICA2NTpcdFx0ICogY2FzZSB3aGVuIGNvbXByZXNzZWQgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgb25lXG4gIDY2Olx0XHQgKi9cbiAgNjc6XHRcdHpzdHJtLVx1MDAzZWJ1ZmZlciA9IHZ6YWxsb2MoMiAqIFBBR0VfU0laRSk7XG4gIDY4Olx0XHRpZiAoIXpzdHJtLVx1MDAzZWJ1ZmZlciB8fCAhenN0cm0tXHUwMDNlbG9jYWxfY29weSkge1xuICA2OTpcdFx0XHR6Y29tcF9zdHJtX2ZyZWUoY29tcCwgenN0cm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXByZXNzaW9uIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFByZWVtcHRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGF0IGZpcnN0IGdsYW5jZSwgaXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gb3IgcHJlcGFyYXRpb24uIFRoZXJlIGFyZSBubyBvdGhlciBiYWNrZW5kcyBzcGVjaWZpZWQsIHdoaWNoIG1lYW5zIGBhc3luY2AgZGVmYXVsdHMgdG8gYGZhbHNlYC4gQnV0IHdhaXQsIGNvdWxkIGEgZnV0dXJlIHBhdGNoIGludHJvZHVjZSBhbiBhc3luYyBiYWNrZW5kPyBPciBpcyB0aGlzIGp1c3Qgc2V0dGluZyB0aGUgc3RhZ2U/CgpFdmVuIGlmIGl0JiMzOTtzIGFsd2F5cyBgZmFsc2VgIGN1cnJlbnRseSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2luZy4gQmVmb3JlIHRoaXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBkaWRuJiMzOTt0IGV4cGxpY2l0bHkgZGlzYWJsZSBwcmVlbXB0aW9uLiBOb3cgaXQgKmRvZXMqIGRpc2FibGUgcHJlZW1wdGlvbiBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG5vdCBlbmFibGVkISBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuCgpgYGBjCnN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCkKewoJZm9yICg7OykgewoJCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtJmd0O3N0cmVhbSk7CgoJCW11dGV4X2xvY2soJmFtcDt6c3RybS0mZ3Q7bG9jayk7CgkJaWYgKGxpa2VseSh6c3RybS0mZ3Q7YnVmZmVyKSkKCQkJcmV0dXJuIHpzdHJtOwoJCW11dGV4X3VubG9jaygmYW1wO3pzdHJtLSZndDtsb2NrKTsKCX0KfQpgYGAKCk9rYXksIHNvIGxvb2tpbmcgYXQgaXQsIGl0IHNlZW1zIGl0IGRpZG4mIzM5O3QgZGlzYWJsZSBwcmVlbXB0aW9uLiBBbmQgdGhhdCBtZWFucyBhIHRhc2sgY291bGQgYmUgcHJlZW1wdGVkIHdoaWxlIGhvbGRpbmcgYHpzdHJtLSZndDtsb2NrYCwgYnV0IGB6c3RybS0mZ3Q7bG9ja2AgaXMgYSBtdXRleCwgYW5kIG11dGV4ZXMgYXJlIHNsZWVwYWJsZS4gQnV0IHdhaXQsIGlmIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsIHlvdSAqY2Fubm90KiBzbGVlcCEgTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGB6Y29tcF9jb21wcmVzc2AgZnVuY3Rpb24gY2FsbHMgYGNvbXAtJmd0O29wcy0mZ3Q7Y29tcHJlc3NgLiBJZiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCBgY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzc2AgY2FuJiMzOTt0IHNsZWVwLgoKSSByZW1lbWJlciBgemNvbXBfY29tcHJlc3NgIHVzZWQgdG8gY2FsbCBgbWlnaHRfc2xlZXAoKWAuIExldCYjMzk7cyBsb29rIGF0IHRoZSBgemNvbXBfY29tcHJlc3NgIGRpZmYgdG8gc2VlIGlmIHRoaXMgY29uZmlybXMgd2hhdCBJIHN1c3BlY3Q6CgpgYGBkaWZmCkBAIC0xNTAsNyAmIzQzOzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAl9OwogCWludCByZXQ7CiAKLQltaWdodF9zbGVlcCgpOwomIzQzOwlpZiAoY29tcC0mZ3Q7b3BzLSZndDthc3luYykKJiM0MzsJCW1pZ2h0X3NsZWVwKCk7CiAJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzcyhjb21wLSZndDtwYXJhbXMsICZhbXA7enN0cm0tJmd0O2N0eCwgJmFtcDtyZXEpOwogYGBgCgpBaCwgeWVzLiBCZWZvcmUgdGhpcyBwYXRjaCwgYHpjb21wX2NvbXByZXNzYCAqY291bGQqIHNsZWVwLCBhbmQgYG1pZ2h0X3NsZWVwKClgIHdhcyBjYWxsZWQuIE5vdywgaWYgYCFhc3luY2AgKHdoaWNoIGl0IGN1cnJlbnRseSBpcyksIGBtaWdodF9zbGVlcCgpYCBpcyAqbm90KiBjYWxsZWQsIGFuZCBwcmVlbXB0aW9uICppcyogZGlzYWJsZWQhIFRoYXQgbWVhbnMgY29tcHJlc3Npb24gYWxnb3JpdGhtcyAobHpvLCBsejQsIHpzdGQsIGV0Yy4pIGFyZSBub3cgZXhlY3V0ZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkISBUaGlzIGlzIGEgbWFzc2l2ZSBmdW5jdGlvbmFsIHNoaWZ0LiBJdCBjaGFuZ2VzIHRoZSBjb250ZXh0IGZyb20gcHJlZW1wdGlibGUgdG8gbm9uLXByZWVtcHRpYmxlLgoKQW5kIHRoZSBjaGFuZ2VzIHRvIGB6cmFtX3pzX21hbGxvY2AgZnVydGhlciByZWluZm9yY2UgdGhpcy4gQmVmb3JlLCBpdCB3YXMgZG9pbmcgYSBzbGVlcGFibGUgYWxsb2NhdGlvbiAoYEdGUF9OT0lPYCkgd2hpbGUgaG9sZGluZyB0aGUgc3RyZWFtLiBOb3csIGlmIGAhYXN5bmNgLCBpdCBmaXJzdCB0cmllcyBhIG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiAoYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCkuIElmIHRoYXQgZmFpbHMsIGl0IGVuYWJsZXMgcHJlZW1wdGlvbiwgZG9lcyB0aGUgc2xlZXBhYmxlIGFsbG9jYXRpb24sIGFuZCBkaXNhYmxlcyBpdCBhZ2FpbiEKClRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgc2VyaW91cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6CgoqICAgYHpyYW1fd3JpdGVfcGFnZWAKKiAgIGB6cmFtX3pzX21hbGxvY2AKKiAgIGB6Y29tcF9jb21wcmVzc2AKKiAgIGB6Y29tcF9kZWNvbXByZXNzYAoqICAgYHpjb21wX3N0cmVhbV9nZXRgCiogICBgemNvbXBfc3RyZWFtX3B1dGAKCkhvbGQgb24sIGB6cmFtX3pzX21hbGxvY2AgaXMgc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3Qgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zOgoKKiAgIGB6Y29tcF9zdHJlYW1fZ2V0YAoqICAgYHpjb21wX3N0cmVhbV9wdXRgCiogICBgemNvbXBfY29tcHJlc3NgCiogICBgemNvbXBfZGVjb21wcmVzc2AKKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB3cml0aW5nLiBUaGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBpcyBsaWtlbHkgYHpyYW1fYnZlY19yd2AsIGB6cmFtX3J3X3BhZ2VgLCBvciBgenJhbV9zdWJtaXRfYmlvYC4gTGV0JiMzOTtzIGNoZWNrIGB6cmFtX2Rydi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV93cml0ZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTExPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTkzMC1cdCAqIFdlIHJlbGVhc2Ugc2xvdCBsb2NrIGR1cmluZyB3cml0ZWJhY2sgc28gc2xvdCBjYW4gY2hhbmdlIHVuZGVyIHVzOlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTMxOlx0ICogc2xvdF9mcmVlKCkgb3Igc2xvdF9mcmVlKCkgYW5kIHpyYW1fd3JpdGVfcGFnZSgpLiBJbiBib3RoIGNhc2VzXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy05MzItXHQgKiBzbG90IGxvc2VzIFpSQU1fUFBfU0xPVCBmbGFnLiBObyBjb25jdXJyZW50IHBvc3QtcHJvY2Vzc2luZyBjYW5cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI4MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyODI6c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjgzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzQ4PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNTktXHRcdG1lbWNweV9mcm9tX2J2ZWMocGFnZV9hZGRyZXNzKHBhZ2UpICYjNDM7IG9mZnNldCwgYnZlYyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzYwOlx0XHRyZXQgPSB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2MS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY2PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcwLVx0XHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzcxOlx0cmV0dXJuIHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBidmVjLVx1MDAzZWJ2X3BhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIFdyaXRlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgd3JpdGUgcGF0aC4gSSBzZWUgYHpyYW1fYnZlY193cml0ZWAgY2FsbGluZyBgenJhbV93cml0ZV9wYWdlYC4gTmF0dXJhbGx5LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBpcyBgenJhbV9idmVjX3dyaXRlYCBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgbW9zdCBsaWtlbHkgaXMuIEl0JiMzOTtzIGEga2VybmVsIGludGVybmFsIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGEgZmFpciBhc3N1bXB0aW9uLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uLi4uIHdoYXQgaXMgdGhlIGJpbyBzdWJtaXNzaW9uIGZ1bmN0aW9uIGluIHVzZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgdWx0aW1hdGVseSBtYWtlcyBpdHMgd2F5IHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2Ugb3IsIGluIHRoZSBjYXNlIG9mIFpSQU0sIGhvdyBpdCYjMzk7cyBjb21wcmVzc2VkIGFuZCBoYW5kbGVkIGluIG1lbW9yeS4gVW5kZXJzdGFuZGluZyB0aGUgYmlvIHN1Ym1pc3Npb24gaXMgY3JpdGljYWwgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiBpdCYjMzk7cyB0aGUgY2FzZSwgdGhhdCB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgYSBtZW1vcnkgZGV2aWNlIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBhIGNvbnZlbnRpb25hbCBkaXNrLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9idmVjX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzQ3LSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM0ODpzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNDktXHRcdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2NS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjY6c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2Ny1cdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2OS1cdGlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MDpcdFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS1cdHJldHVybiB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgYnZlYy1cdTAwM2Vidl9wYWdlLCBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjc0Mz1zdGF0aWMgdm9pZCB6cmFtX2Jpb193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NTUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzU2Olx0XHRpZiAoenJhbV9idmVjX3dyaXRlKHpyYW0sIFx1MDAyNmJ2LCBpbmRleCwgb2Zmc2V0KSBcdTAwM2MgMCkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc1Ny1cdFx0XHRhdG9taWM2NF9pbmMoXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5mYWlsZWRfd3JpdGVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKlRoZSBXcml0ZSBGbG93IFdpdGhpbiB6cmFtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgd3JpdGUgcGF0aCB3aXRoaW4genJhbS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgenJhbV9iaW9fd3JpdGVgIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIGRhdGEgZ2V0cyB3cml0dGVuIChvciwgd2VsbCwgKnByZXBhcmVkKiBmb3Igd3JpdGluZywgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHVuZGVybHlpbmcgY29tcHJlc3Npb24gYW5kIGJhY2tpbmcgc3RvcmUpLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBnZXQgY2FsbGVkIGZyb20/IEFoLCB5ZXMg4oCTIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmlvIHJlcXVlc3RzIGRlc3RpbmVkIGZvciB0aGUgenJhbSBkZXZpY2UuIFNvLCB0aGUgc3VibWlzc2lvbiBmdW5jdGlvbiBpcyB3aGF0IG9yY2hlc3RyYXRlcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGJpbyBhbmQsIHVsdGltYXRlbHksIGNhbGxzIGB6cmFtX2Jpb193cml0ZWAgdG8gZGVhbCB3aXRoIHRoZSB3cml0aW5nLiBJIHdvdWxkIHRoZW4gY2hlY2sgdG8gZW5zdXJlIHRoYXQgYWxsIGJpbyByZXF1ZXN0cyBhcmUgYmVpbmcgY29ycmVjdGx5IHN1Ym1pdHRlZCB0aHJvdWdoIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGlzIGFsbG93cyBtZSB0byBrbm93IHRoYXQgZXZlcnkgd3JpdGUgcGF0aCBmbG93cyB0aHJvdWdoIHRoaXMgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBmb3JtIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYmlvJiMzOTtzIHdyaXRlIHBhdGggZ29lcyB0aHJvdWdoIGB6cmFtX2Jpb193cml0ZWAsIHdoaWNoIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IGhhcHBlbnMgd2l0aGluIGB6cmFtX2Jpb193cml0ZWAg4oCTIGNvbXByZXNzaW9uLCBhbGxvY2F0aW9uLCB0aGUgYWN0dWFsIEkvTyB0byB0aGUgYmFja2luZyBkZXZpY2UsIGV0Yy4gQnV0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludCBmb3IgbXkgbWVudGFsIG1hcCBvZiB6cmFtJiMzOTtzIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fYmlvX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjcxMj1zdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc0Mi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NDM6c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NDQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NzY9c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzg0LVx0Y2FzZSBSRVFfT1BfV1JJVEU6XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzg1Olx0XHR6cmFtX2Jpb193cml0ZSh6cmFtLCBiaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzA1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBmbG93IGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipaUkFNIENvbXByZXNzaW9uIEVudHJ5IFBvaW50IGFuZCBEYXRhIEhhbmRsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgd2l0aGluIFpSQU0gaXMgYHpyYW1fc3VibWl0X2Jpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHdvdWxkIGJlIHRoZSBwb2ludCB3aGVyZSBJJiMzOTtkIGV4cGVjdCBibG9jayBJL08gcmVxdWVzdHMgdG8gYmUgaGFuZGxlZCBhbmQgZnVubmVsZWQgaW50byB0aGUgWlJBTSBsYXllciBmb3IgcHJvY2Vzc2luZy4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIG5vdGluZyB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGlzIGhlYXZpbHkgZGVwZW5kZW50IG9uIHRoZSB6bGliIGxpYnJhcnkgd2l0aCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBzcGVjaWZpY2FsbHkgYWxsb2NhdGVzIG1lbW9yeSB0aHJvdWdoIGB6cmFtX3pzX21hbGxvY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWN0dWFsIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gb2YgZGF0YSB3aXRoaW4gYSBzbG90LiBJJiMzOTtkIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiZWluZyB1c2VkLCBidXQgdGhlIGxpbmthZ2UgaXMgY2xlYXIuIEFuZCwgb2YgY291cnNlLCB0aGUgZmFjdCB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3JlY29tcHJlc3NgIGltcGxpZXMgdGhhdCYjMzk7cyBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgbGlrZWx5IG9yY2hlc3RyYXRpbmcgcmUtY29tcHJlc3Npb24gb2YgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGFzIHRoZSByb290IGZ1bmN0aW9uIGZvciB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM5MD1zdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl9yZWNvbXByZXNzKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSwgdTMyIHByaW8sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQzNC0gKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0MzU6c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDM2LVx0XHRcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjUzMD1zdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjY1MjpcdFx0ZXJyID0gcmVjb21wcmVzc19zbG90KHpyYW0sIHBwcy1cdTAwM2VpbmRleCwgcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI2NTMtXHRcdFx0XHQgICAgICBcdTAwMjZudW1fcmVjb21wX3BhZ2VzLCB0aHJlc2hvbGQsIHByaW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29tcHJlc3Npb24gSW50ZXJmYWNlKioKClJpZ2h0LCBzbyBgcmVjb21wcmVzc19zdG9yZWAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHRoZSBzeXNmcyBpbnRlcmFjdGlvbiwgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9uczogYHpjb21wX2NvbXByZXNzYCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlICpub3QqIHN0YXRpYywgb3IsIGF0IGxlYXN0LCBub3QgZGVjbGFyZWQgYXMgc3VjaCwgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhleSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBvciBpZiB0aGV5JiMzOTtyZSBoaWRkZW4gc29tZWhvdy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlPyBBIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2wgdGFibGUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gVGhlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIGFyZSBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFpSQU0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgWlJBTSBjb2RlLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgdGFyZ2V0czogYHpyYW1fc3VibWl0X2Jpb2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYHpjb21wX2NvbXByZXNzYCwgYHpjb21wX2RlY29tcHJlc3NgLCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBgemNvbXBfc3RyZWFtX3B1dGAuIFRoZXkgYXJlbiYjMzk7dCBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKV2FpdCBhIHNlY29uZCwgYHpyYW1fc3VibWl0X2Jpb2AgaXMganVzdCB0aGUgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIGJpbyBzdWJtaXNzaW9uIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBvcGVyYXRpb24uIERpcmVjdGx5IGZ1enppbmcgdGhhdCBvbmUgbWlnaHQgYmUgdHJpY2t5IGlmIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIGNhbiBmdXp6IGJsb2NrIGRldmljZXMgcHJldHR5IGVmZmVjdGl2ZWx5IHRocm91Z2ggYC9kZXYvenJhbVhgLiBJdCBpbnRlcmFjdHMgd2l0aCBibG9jayBkZXZpY2VzIHZpYSBvcGVuaW5nIGAvZGV2L3pyYW1YYCBhbmQgcGVyZm9ybWluZyByZWFkL3dyaXRlL2lvY3RsIG9wZXJhdGlvbnMuIEl0IGFsc28gaGl0cyB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuCgpTbywgcmVhbGlzdGljYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgIGxvb2tzIGxpa2UgYSBnb29kLCBmb2N1c2VkIHN5bWJvbC4gIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byB0YXJnZXQuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gT2J2aW91c2x5LCBgQ09ORklHX1pSQU1gIGlzIGVzc2VudGlhbC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGludm9sdmVkPyBBaCwgSSBzZWUgYSByZWZlcmVuY2UgdG8gYElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYC4gSWYgYENPTkZJR19QUkVFTVBUX1JUYCBpcyBlbmFibGVkLCBwcmVlbXB0aW9uIGlzbiYjMzk7dCBkaXNhYmxlZC4gU28sIGlmIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGUgbmV3IHByZWVtcHRpb24tZGlzYWJsZWQgY29kZSBwYXRoLCBJICpzaG91bGRuJiMzOTt0KiBlbmFibGUgYENPTkZJR19QUkVFTVBUX1JUYC4gSSB3b24mIzM5O3QgbmVlZCB0byBhZGQgYFBSRUVNUFRfUlRgIHRvIGBFbmFibGVDb25maWdzYC4KCldoYXQgYWJvdXQgb3B0aW9ucyBmb3IgY29tcHJlc3Npb24gYmFja2VuZHMsIGxpa2UgYENPTkZJR19aUkFNX0JBQ0tFTkRfTFpPYD8gTm8sIHdhaXQsIGBDT05GSUdfWlJBTWAgaXMgZW5vdWdoLCBzaW5jZSBpdCBzZWxlY3RzIGF0IGxlYXN0IG9uZSBiYWNrZW5kLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUsIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuICAyMTpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjY6XHRcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuICAyNzpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG4gIDMwOlx0XHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBaUkFNXG4gIDMyOlx0XHRzZWxlY3QgWlNURF9DT01QUkVTU1xuICAzMzpcdFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuICAzNjpcdFx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAzODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICAzOTpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG4gIDQyOlx0XHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDQ6XHRcdHNlbGVjdCA4NDJfQ09NUFJFU1NcbiAgNDU6XHRcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDk6XHRcdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuICA1MDpcdFx0XHQhWlJBTV9CQUNLRU5EX1pTVEQgXHUwMDI2XHUwMDI2ICFaUkFNX0JBQ0tFTkRfREVGTEFURSBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBQYXRjaCBSZXZpZXcgLSBTaWduaWZpY2FudCBGdW5jdGlvbmFsIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFpSQU1gIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYWRkIGBaUkFNYCB0byBgRW5hYmxlQ29uZmlnc2AsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGp1c3RpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHByZWVtcHRpb24gYmVoYXZpb3Igd2l0aGluIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseToKCiogICBgemNvbXBfc3RyZWFtX2dldGAgbm93IGRpc2FibGVzIHByZWVtcHRpb24gaWYgaXQmIzM5O3Mgbm90IGFzeW5jaHJvbm91cyBhbmQgUlQgaXMgKm5vdCogZW5hYmxlZC4KKiAgIGB6Y29tcF9zdHJlYW1fcHV0YCAqZW5hYmxlcyogcHJlZW1wdGlvbi4KKiAgIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBub3cgY29uZGl0aW9uYWxseSBjYWxsIGBtaWdodF9zbGVlcCgpYCBiYXNlZCBvbiB0aGUgYGFzeW5jYCBmbGFnLgoqICAgYHpyYW1fenNfbWFsbG9jYCBhdHRlbXB0cyBhIG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiAoYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCkgZmlyc3QgaWYgbm90IGFzeW5jIGFuZCBubyBSVC4KKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGFuZCBgcmVjb21wcmVzc19zbG90YCBub3cgcGFzcyBgYXN5bmNgIGRvd24gdG8gYHpyYW1fenNfbWFsbG9jYCBhbmQgYHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2VgLgoKVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBgenJhbWAgaGFuZGxlcyBtZW1vcnkgYW5kIHByZWVtcHRpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgY29uc2Npb3VzIGVmZm9ydCB0byBiYWxhbmNlIHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LCBlc3BlY2lhbGx5IGluIFJUIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBpdCB3YW50cyB0byBhdm9pZCBzbGVlcGluZyBpbiBub24tYXN5bmMgbW9kZS4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gLiBJIGtub3cgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0IHByb2JhYmx5IGNhbGxzIGludG8gdGhvc2Ugb3RoZXIgZnVuY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fc3VibWl0X2JpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NDM9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc1LSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc3NjpzdGF0aWMgdm9pZCB6cmFtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc3Ny17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2Mi1cdC5vcGVuID0genJhbV9vcGVuLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk2MzpcdC5zdWJtaXRfYmlvID0genJhbV9zdWJtaXRfYmlvLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2NC1cdC5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSB6cmFtX3Nsb3RfZnJlZV9ub3RpZnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIEhvb2tpbmcgUG9pbnRzIGluIFpSQU0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGhvb2sgaW50byB0aGUgWlJBTSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGB6cmFtX3N1Ym1pdF9iaW9gLCB3aGljaCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHByb2JsZW07IGl0IG1lYW5zIHN5emthbGxlciBsaWtlbHkgY2FuJiMzOTt0IGhvb2sgaXQgZGlyZWN0bHkgYnkgbmFtZS4gSSB3YXMgY29uc2lkZXJpbmcgaWYgaXQgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHdhaXQsIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIGNhc2U7IGl0IHNob3VsZCBiZSBhZGRyZXNzYWJsZS4KClRoZW4gSSBzaGlmdGVkIG15IGZvY3VzIHRvIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYC4gVGhleSYjMzk7cmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgZXhwb3J0ZWQsIG1ha2luZyB0aGVtIGhvb2thYmxlLiBJIHRob3VnaHQsICYjMzQ7R3JlYXQsIHRob3NlIGNvdWxkIGJlIGVhc2llciB0YXJnZXRzISYjMzQ7IEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhleSByZWFsbHkgZXhwb3J0ZWQ/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyB1c2FnZS4gKkhtbSouIE9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIEkgd2FzIHdyb25nLCBgRVhQT1JUX1NZTUJPTGAgaXMgbm90IHVzZWQuIFRoZXkgYXJlIG5vdCBleHBvcnRlZCwgZGVzcGl0ZSBiZWluZyBub24tc3RhdGljLCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBvbiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgaXMgbm90IHByb21pc2luZy4KCkxldCYjMzk7cyByZWZvY3VzIG9uIHRoZSBpbXBvcnRhbnQgdmFyaWFibGUgYW5kIGNoZWNrIHRoYXQgdGhlIHN0YXRpYyBrZXl3b3JkIGlzIG5vdCBhcHBsaWVkIHRvIGB6Y29tcF9jb21wcmVzc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ3LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQ4OmludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0OS1cdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODI1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipGb2N1cyBTeW1ib2wgQ29uZmlybWF0aW9uICZhbXA7IFJlY29tcHJlc3MgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBjb25maXJtZWQuIGB6Y29tcF9jb21wcmVzc2AsIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIOKAkyB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZCwgYW5kIGl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoYXQgY29uZmlybWVkIGV4cGxpY2l0bHkuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaW4gdGhpcyBhcmVhLiBXaXRoIHRoZXNlIGNvbmZpcm1lZCBhcyBteSBmb2N1cywgSSBjYW4gbm93IG1vdmUgZm9yd2FyZCwgSSB3YXMgYWxyZWFkeSBleHBlY3RpbmcgdGhlbSB0byBiZSBkZWZpbmVkIGluIGEgbm9uLXN0YXRpYyB3YXkuIAoKTmV4dCB1cCwgSSYjMzk7bGwgZGlyZWN0IG15IGF0dGVudGlvbiB0byBgcmVjb21wcmVzc19zdG9yZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjUyOS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MzA6c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTMxLVx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjI5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGlzIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaG9zZSBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBBcmUgdGhlcmUgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZT8gTGV0JiMzOTtzIHNlZS4uLiBgenJhbV96c19tYWxsb2NgIGlzIHN0YXRpYywgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHJlY29tcHJlc3Nfc2xvdGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IHRoZSBmb3VyIEkgbGlzdGVkLgoKU28sIEkmIzM5O3ZlIGdvdCBhIGdvb2QgbGlzdDogYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBwYXRjaCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgaGF2ZSBicm9hZGVyIHZpc2liaWxpdHkgYW5kIG1vcmUgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4KClRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSBmdW5kYW1lbnRhbCBwcmVlbXB0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciB3aXRoaW4gdGhlIHpyYW0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZGlzYWJsaW5nIHByZWVtcHRpb24gYW5kIGF2b2lkaW5nIHNsZWVwIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyByZWxhdGVkIHRvIGFuIGBhc3luY2AgZmxhZywgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBuYXN0eSBidWdzLiBJbWFnaW5lIHNsZWVwaW5nIHdoaWxlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQhIE9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgSSYjMzk7bSBvbiBoaWdoIGFsZXJ0LiBZZXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBpcyBkZWZpbmVkIGluIGB6Y29tcC5jYCBhbmQgZGVjbGFyZWQgaW4gYHpjb21wLmhgLCBqdXN0IGFzIGV4cGVjdGVkLiBUaGUgc2FtZSBmb3IgdGhlIG90aGVyIHRocmVlLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY3J1Y2lhbCBjb2RlLgoKVGhlIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaXMgYFpSQU1gLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBhc3luY2AgZmxhZyBmb3IgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcywgYW5kIHNpZ25pZmljYW50bHkgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF0dGVtcHQgbm9uLXNsZWVwYWJsZSBtZW1vcnkgYWxsb2NhdGlvbi4gQW55IGNoYW5nZXMgdGhhdCBhZmZlY3QgcHJlZW1wdGlvbiBjb250ZXh0IG9yIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGNhbiBpbnRyb2R1Y2UgY3JpdGljYWwgYnVncy4gVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt6Y29tcF9zdHJlYW1fcHV0JiMzNDssCiAgICAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt6Y29tcF9zdHJlYW1fcHV0JiMzNDssCiAgICAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTYuMzQxNDU5MDQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDcyMjI0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ6Y29tcF9zdHJlYW1fcHV0XCIsXG4gICAgXCJ6Y29tcF9jb21wcmVzc1wiLFxuICAgIFwiemNvbXBfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGFzeW5jYCBmbGFnIHRvIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgYW5kIG1vZGlmaWVzIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXZvaWQgc2xlZXBpbmcgd2hlbiBgIWFzeW5jYC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYHpyYW1fenNfbWFsbG9jYCB0byB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IHdoZW4gcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gbG9naWMsIGFsdGVyaW5nIHByZWVtcHRpb24gY29udGV4dHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHNsZWVwaW5nIHdoaWxlIGF0b21pYyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTYuMzQxNDYzNjM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTAwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVmYTNiZTVlMTMxNDk5NjYwNzY2MTYyNzk3MmVjMmQ4NWUzZmQ5ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAxOjQ3OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG5pbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG5AQCAtMTI4LDE0ICsxMjgsMjAgQEAgc3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbiBcXHRcXHQgKiBzbyB0aGVuIHVubG9jayBhbmQgcmUtdHJ5IG9uIHRoZSBjdXJyZW50IENQVS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIFxcdFxcdGlmIChsaWtlbHkoenN0cm0tXFx1MDAzZWJ1ZmZlcikpXFxuIFxcdFxcdFxcdHJldHVybiB6c3RybTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSlcXG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4ge1xcbitcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVxcdTAwM2VzdHJlYW0pO1xcbitcXG4rXFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuQEAgLTE1MCw3ICsxNTYsOCBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuIFxcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtaWdodF9zbGVlcCgpO1xcbitcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG4rXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gXFx0cmV0ID0gY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XFxuQEAgLTE2Nyw3ICsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gXFx0XFx0LmRzdF9sZW4gPSBQQUdFX1NJWkUsXFxuIFxcdH07XFxuIFxcbi1cXHRtaWdodF9zbGVlcCgpO1xcbitcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG4rXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gXFx0cmV0dXJuIGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLjUyOTNkNjM4ZGE4ZmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xcbiBcXHR2b2lkICgqcmVsZWFzZV9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuIFxcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRib29sIGFzeW5jO1xcbiB9O1xcbiBcXG4gLyogZHluYW1pYyBwZXItZGV2aWNlIGNvbXByZXNzaW9uIGZyb250ZW5kICovXFxuQEAgLTg2LDcgKzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcXG4gXFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuLXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xcbit2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKTtcXG4gXFxuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gXFx0XFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTJiOWZiZTNlMGQxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuQEAgLTEzNjQsNyArMTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdGlmICghcmV0KVxcbiBcXHRcXHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuIFxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTIwOTgsNyArMjA5OCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7XFxuIFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbiBcXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcXG4tXFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yMTI0LDcgKzIxMjQsNyBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRcXHRcXHRcXHR6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuIFxcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XFxuIFxcdHpzX29ial9yZWFkX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbiBcXG4gXFx0bWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpO1xcbiBcXG5AQCAtMjIxOCwyMCArMjIxOCw0MCBAQCBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxcbisgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxcbisgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxcbitcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbitcXG4rXFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG4rXFx0XFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG4rXFx0XFx0XFx0XFx0X19HRlBfS1NXQVBEX1JFQ0xBSU0gfCBfX0dGUF9OT1dBUk4gfFxcbitcXHRcXHRcXHRcXHRfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4rXFx0XFx0aWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0fVxcbitcXG4rXFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG4rXFx0XFx0XFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxcbitcXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4rXFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbitcXHRyZXR1cm4gaGFuZGxlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBpbmRleClcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgaW5kZXgsIGJvb2wgYXN5bmMpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHZvaWQgKnNyYztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHJlZW1wdGlibGUgY29udGV4dCBzbyB3ZSBkb24ndCBuZWVkXFxuLVxcdCAqIHRvIGRvIG9wdGltaXN0aWMgYW5kIGZhbGxiYWNrIHRvIHBlc3NpbWlzdGljIGhhbmRsZSBhbGxvY2F0aW9uLFxcbi1cXHQgKiBsaWtlIHdlIGRvIGZvciBjb21wcmVzc2libGUgcGFnZXMuXFxuLVxcdCAqL1xcbi1cXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcXG4tXFx0XFx0XFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxcbi1cXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgcGFnZV90b19uaWQocGFnZSkpO1xcbitcXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiBcXG5AQCAtMjI2OCw2ICsyMjg4LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbGVtZW50O1xcbiBcXHRib29sIHNhbWVfZmlsbGVkO1xcbitcXHRib29sIGFzeW5jO1xcbiBcXG4gXFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcXHUwMDI2ZWxlbWVudCk7XFxuQEAgLTIyNzUsNiArMjI5Niw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRpZiAoc2FtZV9maWxsZWQpXFxuIFxcdFxcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcXG4gXFxuK1xcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbiBcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0sIHpzdHJtLFxcbkBAIC0yMjgyLDMyICsyMzA0LDMwIEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuIFxcdFxcdHByX2VycihcXFwiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChjb21wX2xlbiBcXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuLVxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG4rXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbitcXHRcXHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCwgYXN5bmMpO1xcbiBcXHR9XFxuIFxcbi1cXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbi1cXHRcXHRcXHQgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XFxuLVxcdFxcdFxcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuK1xcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbiBcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIXpyYW1fY2FuX3N0b3JlX3BhZ2UoenJhbSkpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0XFx0enNfZnJlZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdHpzX29ial93cml0ZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cXHUwMDNlYnVmZmVyLCBjb21wX2xlbik7XFxuLVxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuIFxcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbkBAIC0yNDIzLDYgKzI0NDMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDtcXG4gXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcXG4gXFx0dm9pZCAqc3JjO1xcbitcXHRib29sIGFzeW5jO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGhhbmRsZV9vbGQgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xcbkBAIC0yNDQ3LDYgKzI0NjgsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0ICovXFxuIFxcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTtcXG4gXFxuK1xcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbcHJpb10tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuIFxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0cmV0ID0gemNvbXBfY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIFxcdTAwMjZjb21wX2xlbl9uZXcpO1xcbkBAIC0yNDYyLDcgKzI0ODQsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0Km51bV9yZWNvbXBfcGFnZXMgLT0gMTtcXG4gXFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbkBAIC0yNDcxLDcgKzI0OTMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFxuIFxcdGlmIChjbGFzc19pbmRleF9uZXcgXFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XFxuIFxcdCAgICAodGhyZXNob2xkIFxcdTAwMjZcXHUwMDI2IGNvbXBfbGVuX25ldyBcXHUwMDNlPSB0aHJlc2hvbGQpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNlY29uZGFyeSBhbGdvcml0aG1zIGZhaWxlZCB0byByZS1jb21wcmVzcyB0aGUgcGFnZVxcbkBAIC0yNDg1LDI3ICsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgYXJlIGhvbGRpbmcgcGVyLUNQVSBzdHJlYW0gbXV0ZXggYW5kIGVudHJ5IGxvY2sgc28gYmV0dGVyXFxuLVxcdCAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2VcXG4tXFx0ICogd2Ugc3RpbGwgaGF2ZSB0aGUgb2xkIG9iamVjdCBpbiB0aGUgbWVtX3Bvb2wuXFxuLVxcdCAqXFxuLVxcdCAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdFxcbi1cXHQgKiBob2xkcyB0aGUgb3JpZ2luYWwgY29tcHJlc3NlZCBkYXRhLiBCdXQgdGhhdCB3b3VsZCByZXF1aXJlIHVzIHRvXFxuLVxcdCAqIG1vZGlmeSB6c21hbGxvYyBBUEkgdG8gcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24uIEZvciBub3csIHdlIHdpbGxcXG4tXFx0ICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi5cXG4tXFx0ICovXFxuLVxcdGhhbmRsZV9uZXcgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tXFx0XFx0XFx0ICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLFxcbi1cXHRcXHRcXHQgICAgICAgcGFnZV90b19uaWQocGFnZSkpO1xcbitcXHRoYW5kbGVfbmV3ID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW5fbmV3LCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbiBcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGVfbmV3KTtcXG4gXFx0fVxcbiBcXG4gXFx0enNfb2JqX3dyaXRlKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGVfbmV3LCB6c3RybS1cXHUwMDNlYnVmZmVyLCBjb21wX2xlbl9uZXcpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbiBcXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIGhhbmRsZV9uZXcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0Nzo1Ny41MTk4MTczNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA4OTM4NTUyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3N0cmVhbV9nZXRcIixcbiAgICBcInpjb21wX3N0cmVhbV9wdXRcIixcbiAgICBcInpjb21wX2NvbXByZXNzXCIsXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNWZhM2JlNWUxMzE0OTk2NjA3NjYxNjI3OTcyZWMyZDg1ZTNmZDllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMTo0Nzo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLmRkNGRiNGE4YWY3MzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC0xMjgsMTQgKzEyOCwyMCBAQCBzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4gXHRcdCAqIHNvIHRoZW4gdW5sb2NrIGFuZCByZS10cnkgb24gdGhlIGN1cnJlbnQgQ1BVLlxuIFx0XHQgKi9cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcbitcdFx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0XHRpZiAobGlrZWx5KHpzdHJtLVx1MDAzZWJ1ZmZlcikpXG4gXHRcdFx0cmV0dXJuIHpzdHJtO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuLXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbiB7XG4rXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4rXG4rXHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4rXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTE1MCw3ICsxNTYsOCBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gXHR9O1xuIFx0aW50IHJldDtcbiBcbi1cdG1pZ2h0X3NsZWVwKCk7XG4rXHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG4rXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2Vjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XG5AQCAtMTY3LDcgKzE3NCw4IEBAIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4gXG4tXHRtaWdodF9zbGVlcCgpO1xuK1x0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuK1x0XHRtaWdodF9zbGVlcCgpO1xuIFx0cmV0dXJuIGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RydWN0IHpjb21wX29wcyB7XG4gXHR2b2lkICgqcmVsZWFzZV9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG4gXG4gXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0Ym9vbCBhc3luYztcbiB9O1xuIFxuIC8qIGR5bmFtaWMgcGVyLWRldmljZSBjb21wcmVzc2lvbiBmcm9udGVuZCAqL1xuQEAgLTg2LDcgKzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4gXG4gaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTJiOWZiZTNlMGQxOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTEzNjQsNyArMTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRpZiAoIXJldClcbiBcdFx0Y29weV9wYWdlKHNyYywgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4gXHRrdW5tYXBfbG9jYWwoc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjA5OCw3ICsyMDk4LDcgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuIFx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTIxMjQsNyArMjEyNCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4gXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4rXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbkBAIC0yMjE4LDIwICsyMjE4LDQwIEBAIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmb3IgIWFzeW5jIGJhY2tlbmQsIHRoZW4gdHJ5XG4rICogc2xlZXBhYmxlIGFsbG9jYXRpb247IGZvciBhc3luYyBiYWNrZW5kLCB3ZSBhbHdheXMgYmVnaW5cbisgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgenJhbV96c19tYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCBjb21wX2xlbixcbitcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbitcbitcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xuK1x0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4rXHRcdFx0XHRfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8XG4rXHRcdFx0XHRfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbitcdFx0aWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSlcbitcdFx0XHRyZXR1cm4gaGFuZGxlO1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuK1x0fVxuK1xuK1x0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxuK1x0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbitcdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbitcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4rXHRyZXR1cm4gaGFuZGxlO1xuK31cbitcbiBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0ICAgICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHByZWVtcHRpYmxlIGNvbnRleHQgc28gd2UgZG9uJ3QgbmVlZFxuLVx0ICogdG8gZG8gb3B0aW1pc3RpYyBhbmQgZmFsbGJhY2sgdG8gcGVzc2ltaXN0aWMgaGFuZGxlIGFsbG9jYXRpb24sXG4tXHQgKiBsaWtlIHdlIGRvIGZvciBjb21wcmVzc2libGUgcGFnZXMuXG4tXHQgKi9cbi1cdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBQQUdFX1NJWkUsXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4rXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiBcbkBAIC0yMjY4LDYgKzIyODgsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiBcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcbiBcdGJvb2wgc2FtZV9maWxsZWQ7XG4rXHRib29sIGFzeW5jO1xuIFxuIFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0c2FtZV9maWxsZWQgPSBwYWdlX3NhbWVfZmlsbGVkKG1lbSwgXHUwMDI2ZWxlbWVudCk7XG5AQCAtMjI3NSw2ICsyMjk2LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRpZiAoc2FtZV9maWxsZWQpXG4gXHRcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcbiBcbitcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLCB6c3RybSxcbkBAIC0yMjgyLDMyICsyMzA0LDMwIEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuIFx0a3VubWFwX2xvY2FsKG1lbSk7XG4gXG4gXHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHByX2VycihcIkNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkXFxuXCIsIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoY29tcF9sZW4gXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4tXHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4rXHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG4gXHR9XG4gXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4rXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbiwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiBcdH1cbiBcbiBcdGlmICghenJhbV9jYW5fc3RvcmVfcGFnZSh6cmFtKSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0c2xvdF9mcmVlKHpyYW0sIGluZGV4KTtcbkBAIC0yNDIzLDYgKzI0NDMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9vbGQ7XG4gXHR1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfbmV3O1xuIFx0dm9pZCAqc3JjO1xuK1x0Ym9vbCBhc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0aGFuZGxlX29sZCA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQ0Nyw2ICsyNDY4LDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKi9cbiBcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTtcbiBcbitcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBcdTAwMjZjb21wX2xlbl9uZXcpO1xuQEAgLTI0NjIsNyArMjQ4NCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQqbnVtX3JlY29tcF9wYWdlcyAtPSAxO1xuIFxuIFx0aWYgKHJldCkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0yNDcxLDcgKzI0OTMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdGlmIChjbGFzc19pbmRleF9uZXcgXHUwMDNlPSBjbGFzc19pbmRleF9vbGQgfHxcbiBcdCAgICAodGhyZXNob2xkIFx1MDAyNlx1MDAyNiBjb21wX2xlbl9uZXcgXHUwMDNlPSB0aHJlc2hvbGQpKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2VcbkBAIC0yNDg1LDI3ICsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBXZSBhcmUgaG9sZGluZyBwZXItQ1BVIHN0cmVhbSBtdXRleCBhbmQgZW50cnkgbG9jayBzbyBiZXR0ZXJcbi1cdCAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2Vcbi1cdCAqIHdlIHN0aWxsIGhhdmUgdGhlIG9sZCBvYmplY3QgaW4gdGhlIG1lbV9wb29sLlxuLVx0ICpcbi1cdCAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdFxuLVx0ICogaG9sZHMgdGhlIG9yaWdpbmFsIGNvbXByZXNzZWQgZGF0YS4gQnV0IHRoYXQgd291bGQgcmVxdWlyZSB1cyB0b1xuLVx0ICogbW9kaWZ5IHpzbWFsbG9jIEFQSSB0byByZXR1cm4gdGhpcyBpbmZvcm1hdGlvbi4gRm9yIG5vdywgd2Ugd2lsbFxuLVx0ICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi5cbi1cdCAqL1xuLVx0aGFuZGxlX25ldyA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcsXG4tXHRcdFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi1cdFx0XHQgICAgICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsXG4tXHRcdFx0ICAgICAgIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbitcdGhhbmRsZV9uZXcgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbl9uZXcsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xuIFx0fVxuIFxuIFx0enNfb2JqX3dyaXRlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZV9uZXcsIHpzdHJtLVx1MDAzZWJ1ZmZlciwgY29tcF9sZW5fbmV3KTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG4gXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIGhhbmRsZV9uZXcpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTcuNTE5ODE4NzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTc0MTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgWlJBTSBibG9jayBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgY29tcHJlc3Npb24gYXNwZWN0cy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGFuIGBhc3luY2AgZmxhZyB3aXRoaW4gdGhlIGBzdHJ1Y3QgemNvbXBfb3BzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGltcGxpZXMgYXN5bmNocm9ub3VzIGNvbXByZXNzaW9uIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGV5J3ZlIG1vZGlmaWVkIGB6Y29tcF9zdHJlYW1fZ2V0YCBhbmQgYHpjb21wX3N0cmVhbV9wdXRgIHRvIHByZWVtcHRpdmVseSBkaXNhYmxlIHNvbWV0aGluZyBiYXNlZCBvbiB0aGlzIG5ldyBgYXN5bmNgIGZsYWcsIGJ1dCBvbmx5IGlmIHdlJ3JlICpub3QqIHVzaW5nIGEgUmVhbC1UaW1lIGtlcm5lbC4gVGhhdCdzIGEgY29uZGl0aW9uYWwgb3B0aW1pemF0aW9uLCBwcm9iYWJseSB0cnlpbmcgdG8gYmFsYW5jZSBwZXJmb3JtYW5jZSB3aXRoIGRldGVybWluaXNtLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBwcmVlbXB0aW9uIGJlaGF2aW9yIGFyb3VuZCB0aGF0IGNvZGUgbGF0ZXIuXG5cblRoZXkndmUgYWxzbyBjaGFuZ2VkIGhvdyBgenJhbV96c19tYWxsb2NgIGlzIGhhbmRsZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBhc3luY2AgYWxsb2NhdGlvbiwgYW5kIHVwZGF0ZWQgdGhlIHNpZ25hdHVyZSBvZiBgemNvbXBfc3RyZWFtX3B1dGAuIFRoZSBzaWduYXR1cmUgY2hhbmdlIGZyb20gYHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybWAgdG8gYHN0cnVjdCB6Y29tcCAqY29tcGAgaXMgbm90YWJsZTsgaXQgc3VnZ2VzdHMgdGhleSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgY2VudHJhbGl6ZWQgYHpjb21wYCBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb25zLCByYXRoZXIgdGhhbiBkZWFsaW5nIHdpdGggc3RyZWFtcyBkaXJlY3RseS4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIHRvIHN1cHBvcnQgdGhlIGFzeW5jIGNhcGFiaWxpdHksIHBlcmhhcHMgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZpZWxkcyBvciBzdHJlYW1saW5pbmcgdGhlIGNvZGUuXG5cbk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBhc3luY2AgZmxhZz8gV2hhdCAqYXN5bmMqIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQ/IExldCdzIHVzZSBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgbWVudGlvbnMgb2YgdGhhdCBgYXN5bmNgIG1lbWJlciB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdC4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbXByZXNzaW9uIGFsZ29yaXRobXMgb3IgY29uZmlndXJhdGlvbnMgYXJlIGZsYWdnZWQgYXMgYXN5bmNocm9ub3VzLCBhbmQgdW5kZXJzdGFuZCB3aHkgdGhleSB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBhcHByb2FjaC4gVGhpcydsbCBkaWN0YXRlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGltcG9ydGFudCB0aGlzIGZlYXR1cmUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowMi43OTU1NjI0MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzODM1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXN5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMTU9c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5OlxcdGlmIChjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2MC1cXHRcXHRtaWdodF9zbGVlcCgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjktXFx0Y29uc3QgY2hhciAqbmFtZTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo3MDpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTcxLX07XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTI9c3RydWN0IHpyYW1fcmJfcmVxIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUxOS1cXHR1bmlvbiB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NTIwOlxcdFxcdC8qIFRoZSBvcmlnaW5hbCBiaW8gdG8gY29tcGxldGUgKGFzeW5jIHJlYWQpICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTIxLVxcdFxcdHN0cnVjdCBiaW8gKnBhcmVudDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzNzM9c3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM5MTpzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNC1cXHQvKlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0MDU6XFx0ICogTk9URTogenJhbV9hc3luY19yZWFkX2VuZGlvKCkgaXMgbm90IGV4YWN0bHkgcmlnaHQgcGxhY2UgZm9yIHRoaXMuXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNi1cXHQgKiBJZGVhbGx5LCB3ZSBuZWVkIHRvIGRvIGl0IGFmdGVyIFpSQU1fV0IgY2hlY2ssIGJ1dCB0aGlzIHJlcXVpcmVzXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0Mjg6c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9hc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyOS1cXHRcXHRcXHRcXHR1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTItXFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gcmVxO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0NTM6XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSB6cmFtX2FzeW5jX3JlYWRfZW5kaW87XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQ1NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0OTk9c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXFx0fVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1MDg6XFx0cmV0dXJuIHJlYWRfZnJvbV9iZGV2X2FzeW5jKHpyYW0sIHBhZ2UsIGluZGV4LCBibGtfaWR4LCBwYXJlbnQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIwNj1zdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjEtLypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIyOiAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjM6ICogc2xlZXBhYmxlIGFsbG9jYXRpb247IGZvciBhc3luYyBiYWNrZW5kLCB3ZSBhbHdheXMgYmVnaW5cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjI0LSAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgenJhbV96c19tYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCBjb21wX2xlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjI3OlxcdFxcdGJvb2wgYXN5bmMsIGNvbnN0IGludCBuaWQpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzE6XFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMyLVxcdFxcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQyLVxcdFxcdFxcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDM6XFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0NC1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ5OlxcdFxcdFxcdFxcdCAgICAgdTMyIGluZGV4LCBib29sIGFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU0OlxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjU1LVxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyODI9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkwLVxcdGJvb2wgc2FtZV9maWxsZWQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5MTpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTk6XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTMtXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTQ6XFx0XFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE1LVxcdH1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTc6XFx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ1LVxcdHZvaWQgKnNyYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDQ2OlxcdGJvb2wgYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ0Ny1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcXHRhc3luYyA9IHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzItXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUxMDpcXHRoYW5kbGVfbmV3ID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW5fbmV3LCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MTEtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGVfbmV3KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowMi44Mzc5NDg4ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAyMzE4MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUuXG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQXN5bmMgU3VwcG9ydCBpbiBgemNvbXBfb3BzYCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBgYXN5bmNgIHN1cHBvcnQgdG8gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGFjdC4gVGhlIGtleSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGUgZXhpc3RpbmcgY29tcGxldGlvbiBiYWNrZW5kcyBhY3R1YWxseSAqdXNpbmcqIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHk/IEl0J3MgYWxsIHdlbGwgYW5kIGdvb2QgdG8gYWRkIHRoZSBmZWF0dXJlLCBidXQgd2l0aG91dCBhY3RpdmUgYWRvcHRpb24sIGl0J3MganVzdCBleHRyYSBjb2RlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggYmFja2VuZHMgYXJlIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhpcyBgYXN5bmMgPSB0cnVlYCBzZXR0aW5nLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZSBhdXRob3JzIGhhZCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGluIG1pbmQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBhZmZlY3RlZCBiYWNrZW5kIGltcGxlbWVudGF0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MDYuMDQwMjcwMjkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzcxNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5OlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDAtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDcxOlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbcHJpb10tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Mi1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowNi4wODQwNDg2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTc0MDUxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBBc3luY2hyb25vdXMgSS9PIEltcGxlbWVudGF0aW9uIGluIFpyYW0gQmFja2VuZHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBhc3luY2hyb25vdXMgSS9PIG1pZ2h0IGJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgWnJhbSBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmFja2VuZC4gR2l2ZW4gbXkga25vd2xlZGdlLCB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgY29kZSByZWxhdGVkIHRvIHRoZSB2YXJpb3VzIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRoZW1zZWx2ZXMsIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoYXQgZmxhZyB3b3VsZCBiZSBkZWZpbmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGNvZGUgc3RydWN0dXJlLiBJJ2xsIGZvY3VzIG9uIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF8qLmNgIGZpbGVzIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQsIGFzIHRoZXkgd291bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvZiBlYWNoIHN1cHBvcnRlZCBiYWNrZW5kLiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgSSdkIGZpbmQgdGhlIGtleSBpbmRpY2F0b3JzIOKAkyBzcGVjaWZpY2FsbHksIGxvb2tpbmcgZm9yIHRoZSBgYXN5bmNgIGZsYWcgYmVpbmcgc2V0IGR1cmluZyB0aGUgSS9PIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggZm9yIGNvbmZpcm1pbmcgb3IgZGVueWluZyBpdHMgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MDkuMjgxNDU1NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYmFja2VuZF84NDIuY1wiLFxuICAgIFwiYmFja2VuZF84NDIuaFwiLFxuICAgIFwiYmFja2VuZF9kZWZsYXRlLmNcIixcbiAgICBcImJhY2tlbmRfZGVmbGF0ZS5oXCIsXG4gICAgXCJiYWNrZW5kX2x6NC5jXCIsXG4gICAgXCJiYWNrZW5kX2x6NC5oXCIsXG4gICAgXCJiYWNrZW5kX2x6NGhjLmNcIixcbiAgICBcImJhY2tlbmRfbHo0aGMuaFwiLFxuICAgIFwiYmFja2VuZF9sem8uY1wiLFxuICAgIFwiYmFja2VuZF9sem8uaFwiLFxuICAgIFwiYmFja2VuZF9sem9ybGUuY1wiLFxuICAgIFwiYmFja2VuZF9sem9ybGUuaFwiLFxuICAgIFwiYmFja2VuZF96c3RkLmNcIixcbiAgICBcImJhY2tlbmRfenN0ZC5oXCIsXG4gICAgXCJ6Y29tcC5jXCIsXG4gICAgXCJ6Y29tcC5oXCIsXG4gICAgXCJ6cmFtX2Rydi5jXCIsXG4gICAgXCJ6cmFtX2Rydi5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjA5LjI4MTUyMzAxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQ5ODUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGZvciBBc3luY2hyb25vdXMgQmFja2VuZCBDb25maWd1cmF0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBvdXIgYmFja2VuZCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgYXN5bmNgIGZsYWcgb3Igc2V0dGluZy4gSSdtIHRoaW5raW5nLCBhIHF1aWNrIHNjYW4gYWNyb3NzIGFsbCBvZiBvdXIgZGVmaW5lZCBiYWNrZW5kcyBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBrbm93IGRlZmluaXRpdmVseSwgcmlnaHQgYXdheSwgd2hpY2ggb25lcyBoYXZlIGJlZW4gZXhwbGljaXRseSBjb25maWd1cmVkIHRvIG9wZXJhdGUgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgcHJvZmlsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjEyLjE4NjUxMDUzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxOTc1OTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MTIuMjMxNzEzMDMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDA2MzQ2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBBc3luY2hyb25vdXMgQmFja2VuZCBPcGVyYXRpb25zKipcblxuSG1tLCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2Ugbm9uZSBvZiB0aGVzZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcsIHdoaWNoIGlzIGEgYml0IHN1cnByaXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgemNvbXBfb3BzYCBhcmUgYWN0dWFsbHkgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXN5bmNocm9ub3VzIGJlaGF2aW9yIGlzIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQsIG9yIGlmIGl0J3MgYmVpbmcgbWlzc2VkLiBUbyBkbyB0aGF0LCBJJ2xsIGRpdmUgaW50byBgemNvbXAuY2AuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE1LjQ3MjM0OTYzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTgzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHpjb21wX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTQ1PXN0YXRpYyBpbnQgZGVjb21wcmVzc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy01Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1Mzpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU0LVxcdC5jb21wcmVzc1xcdD0gY29tcHJlc3NfODQyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyO1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTIyPXN0YXRpYyBpbnQgZGVmbGF0ZV9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNDctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE0ODpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTQ5LVxcdC5jb21wcmVzc1xcdD0gZGVmbGF0ZV9jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuaC03LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmgtOS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTExOD1zdGF0aWMgaW50IGx6NF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQxLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE0Mjpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE0My1cXHQuY29tcHJlc3NcXHQ9IGx6NF9jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5oLTctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0Lmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuaC05LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz05Nj1zdGF0aWMgaW50IGx6NGhjX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTExOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEyMDpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjEtXFx0LmNvbXByZXNzXFx0PSBsejRoY19jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz00MT1zdGF0aWMgaW50IGx6b19kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTAtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM6NTE6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01Mi1cXHQuY29tcHJlc3NcXHQ9IGx6b19jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5oLTctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6bztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uaC05LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM9NDE9c3RhdGljIGludCBsem9ybGVfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jOjUxOmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTItXFx0LmNvbXByZXNzXFx0PSBsem9ybGVfY29tcHJlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuaC03LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGU7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmgtOS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0xOTA9c3RhdGljIGludCB6c3RkX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjA4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzoyMDk6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxMC1cXHQuY29tcHJlc3NcXHQ9IHpzdGRfY29tcHJlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQ7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzpzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNC0jaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTU0PXN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtNzQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6NzU6c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmxvb2t1cF9iYWNrZW5kX29wcyhjb25zdCBjaGFyICpjb21wKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy04OC17XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6ODk6XFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05MC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTQ5PXN0cnVjdCB6Y29tcF9yZXEge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NTc6c3RydWN0IHpjb21wX29wcyB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNTgtXFx0aW50ICgqY29tcHJlc3MpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NzQ9c3RydWN0IHpjb21wIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03NS1cXHRzdHJ1Y3QgemNvbXBfc3RybSBfX3BlcmNwdSAqc3RyZWFtO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjc2OlxcdGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKm9wcztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03Ny1cXHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE1LjUxNTQwOTczNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYwNDgyNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQXN5bmNocm9ub3VzIE9wZXJhdGlvbiBpbiBacmFtIEJhY2tlbmRzKipcblxuSG1tLCB0aGF0J3Mgb2RkLiBJdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlIGJhY2tlbmRzIGFyZSBleHBsaWNpdGx5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzLCBlc3BlY2lhbGx5IGlmIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgaW50ZW5kZWQgb3Igbm90LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgZHJpdmVycy9jcnlwdG8vYCBkaXJlY3RvcnksIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCBpbiB0aGVyZS4gTm8sIHRoYXQgZG9lc24ndCBsb29rIHByb21pc2luZy4gQWgsIHJpZ2h0LCB6cmFtIHVzZXMgaXRzIG93biBiYWNrZW5kcyBub3cuIE9rYXksIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYmFja2VuZCBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBhc3luYyBoYW5kbGluZy4gSSdsbCB0YWtlIGEgbG9vayBhdCBlaXRoZXIgYGRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY2Agb3IgcGVyaGFwcyBgYmFja2VuZF96c3RkLmNgLiBIb3BlZnVsbHksIHRob3NlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHdoZXRoZXIgdGhleSBldmVuIGNvbnNpZGVyIHRoaXMgZmxhZyBhbmQgaG93IHRoZXkgaGFuZGxlIGl0LiBUaGF0J3MgdGhlIGJlc3QgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgd2hldGhlciB3ZSdyZSBzZWVpbmcgc29tZSBpbXBsaWNpdCBkZWZhdWx0IGJlaGF2aW9yIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE5LjA3NTg5NTM1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdH1cXG4gMTIxOlxcdFxcbiAxMjI6XFx0c3RhdGljIGludCBkZWZsYXRlX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLFxcbiAxMjM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpjb21wX3JlcSAqcmVxKVxcbiAxMjU6XFx0e1xcbiAxMjY6XFx0XFx0c3RydWN0IGRlZmxhdGVfY3R4ICp6Y3R4ID0gY3R4LVxcdTAwM2Vjb250ZXh0O1xcbiAxMjc6XFx0XFx0c3RydWN0IHpfc3RyZWFtX3MgKmluZmxhdGU7XFxuIDEyODpcXHRcXHRpbnQgcmV0O1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRpbmZsYXRlID0gXFx1MDAyNnpjdHgtXFx1MDAzZWRjdHg7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJldCA9IHpsaWJfaW5mbGF0ZVJlc2V0KGluZmxhdGUpO1xcbiAxMzM6XFx0XFx0aWYgKHJldCAhPSBaX09LKVxcbiAxMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdGluZmxhdGUtXFx1MDAzZW5leHRfaW4gPSAodTggKilyZXEtXFx1MDAzZXNyYztcXG4gMTM3OlxcdFxcdGluZmxhdGUtXFx1MDAzZWF2YWlsX2luID0gcmVxLVxcdTAwM2VzcmNfbGVuO1xcbiAxMzg6XFx0XFx0aW5mbGF0ZS1cXHUwMDNlbmV4dF9vdXQgPSAodTggKilyZXEtXFx1MDAzZWRzdDtcXG4gMTM5OlxcdFxcdGluZmxhdGUtXFx1MDAzZWF2YWlsX291dCA9IHJlcS1cXHUwMDNlZHN0X2xlbjtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0cmV0ID0gemxpYl9pbmZsYXRlKGluZmxhdGUsIFpfU1lOQ19GTFVTSCk7XFxuIDE0MjpcXHRcXHRpZiAocmV0ICE9IFpfU1RSRUFNX0VORClcXG4gMTQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XFxuIDE0OTpcXHRcXHQuY29tcHJlc3NcXHQ9IGRlZmxhdGVfY29tcHJlc3MsXFxuIDE1MDpcXHRcXHQuZGVjb21wcmVzc1xcdD0gZGVmbGF0ZV9kZWNvbXByZXNzLFxcbiAxNTE6XFx0XFx0LmNyZWF0ZV9jdHhcXHQ9IGRlZmxhdGVfY3JlYXRlLFxcbiAxNTI6XFx0XFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuIDE1MzpcXHRcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG4gMTU0OlxcdFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4gMTU1OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiZGVmbGF0ZVxcXCIsXFxuIDE1NjpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoxOS4wNzU5Nzg5NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1ODU0Mzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHVzZXIgaXMgYSBrbm93bGVkZ2VhYmxlIGNvbGxlYWd1ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEh5cG90aGVzaXMgR2VuZXJhdGlvbioqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSXQncyBsaWtlIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQgaW4gbXkgYnJhaW4uIENvdWxkIGl0IGJlIHRoYXQgdGhlcmUncyBhIG5ldyBiYWNrZW5kIGluIHBsYXksIGFuZCBpdCdzIHVzaW5nIHRoZSBgYXN5bmNgIGZsYWc/IE9yLCBwZXJoYXBzLCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGxheWluZyB0aGUgZ3JvdW5kd29yaywgcHJlcGFyaW5nIHRoZSBleGlzdGluZyBzeXN0ZW0gZm9yIHRoaXMgbmV3IGFzeW5jaHJvbm91cyBiYWNrZW5kPyBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuTGV0J3MgZG8gdGhpcyBtZXRob2RpY2FsbHkuIE15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBjb2RlIHRyZWUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoaWNoIG90aGVyIGZpbGVzIGhhdmUgYmVlbiByZWNlbnRseSBtb2RpZmllZCBhbG9uZ3NpZGUgdGhpcyBvbmUsIHBhcnRpY3VsYXJseSB0byBzZWUgaWYgYW55IG9mIHRoZW0gYXJlIHNldHRpbmcgdGhlIGBhc3luY2AgZmxhZyBhbnl3aGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24gYW5kIGhlbHAgbWUgdGVzdCBteSBoeXBvdGhlc2lzLiBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBhcHByb2FjaCB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoyMy4wMzQ1MjcwNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTYxNjA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmFzeW5jW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKnRydWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjMuMDc5MDkzNjQ0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDIxODYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgT3BlcmF0aW9uIHdpdGhpbiB0aGUgWnJhbSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL2AgZGlyZWN0b3J5LiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSBgYXN5bmNgIGlzIGJlaW5nIHNldCBvciB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgKmNvdWxkKiBiZSBzb21lIGludGVyZXN0aW5nIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGFzeW5jaHJvbm91cyBJL08gd2l0aGluIHRoZSB6cmFtIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkncmUgaGFuZGxpbmcgYXN5bmMgb3BlcmF0aW9ucy4gTXkgaHlwb3RoZXNpcyBpcyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgZnVydGhlciBpbXByb3ZlbWVudCBpbiB0aGUgb3ZlcmFsbCB6cmFtIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIGZvciBvdGhlciBmaWxlcyBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoyNi4yMjEyODE5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDA2MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTE1PXN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTEzMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMyLVxcdFxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDItXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xNDg9aW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE1OTpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjAtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XFx0aWYgKGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc4LVxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD01Nz1zdHJ1Y3QgemNvbXBfb3BzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY5LVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzA6XFx0Ym9vbCBhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03MS19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NTEyPXN0cnVjdCB6cmFtX3JiX3JlcSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MTktXFx0dW5pb24ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUyMDpcXHRcXHQvKiBUaGUgb3JpZ2luYWwgYmlvIHRvIGNvbXBsZXRlIChhc3luYyByZWFkKSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUyMS1cXHRcXHRzdHJ1Y3QgYmlvICpwYXJlbnQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzczPXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTE6c3RhdGljIHZvaWQgenJhbV9hc3luY19yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDQtXFx0LypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDA1OlxcdCAqIE5PVEU6IHpyYW1fYXN5bmNfcmVhZF9lbmRpbygpIGlzIG5vdCBleGFjdGx5IHJpZ2h0IHBsYWNlIGZvciB0aGlzLlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDYtXFx0ICogSWRlYWxseSwgd2UgbmVlZCB0byBkbyBpdCBhZnRlciBaUkFNX1dCIGNoZWNrLCBidXQgdGhpcyByZXF1aXJlc1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDI4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjktXFx0XFx0XFx0XFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDUyLVxcdGJpby1cXHUwMDNlYmlfcHJpdmF0ZSA9IHJlcTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDUzOlxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0genJhbV9hc3luY19yZWFkX2VuZGlvO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNDk5PXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA3LVxcdH1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4OlxcdHJldHVybiByZWFkX2Zyb21fYmRldl9hc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCwgcGFyZW50KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMDY9c3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIxLS8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMjogKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIzOiAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyNC0gKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyNzpcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjMxOlxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMi1cXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0Mi1cXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQzOlxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDQtXFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0OTpcXHRcXHRcXHRcXHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5MC1cXHRib29sIHNhbWVfZmlsbGVkO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTE6XFx0Ym9vbCBhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkyLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5OlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDAtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEzLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE0OlxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNS1cXHR9XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE3OlxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTgtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ0NS1cXHR2b2lkICpzcmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ0NjpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzE6XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1twcmlvXS1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MTA6XFx0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTExLVxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlX25ldykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjYuMjYzMjk1NDMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzE2MzQyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQXN5bmMgQ29tcHJlc3Npb24gRmxhZyBJbnZlc3RpZ2F0aW9uKipcblxuSG1tLCBzbyBJJ20gbm90aWNpbmcgYGFzeW5jYCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLkknbSBub3Qgc2VlaW5nIGFueSBzcGVjaWZpYyBiYWNrZW5kIGFjdHVhbGx5ICpzZXQqIHRoYXQgYGFzeW5jYCBmbGFnIHRvIGB0cnVlYCB5ZXQuIFRoYXQgc2VlbXMgdW51c3VhbC4gVXN1YWxseSwgd2hlbiBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIGludHJvZHVjZWQsIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uLlxuXG5SaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpbGVzIHRoYXQsIGJ5IGNoYW5jZSwgYXJlIHNldHRpbmcgYGFzeW5jYCB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gR290dGEgYmUgdGhvcm91Z2guIE5vIHBvaW50IGluIGFzc3VtaW5nIGl0J3MgdW5pbml0aWFsaXplZCBpZiBJIGhhdmVuJ3QgY29uZmlybWVkIHRoYXQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgZ29pbmcgb24sIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjkuNTk0OTMxNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTM0NTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5hc3luY1tbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSp0cnVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmM9MzkwPWVudW0gaWF2Zl9zdGF0dXMgaWF2Zl9hcV9zZW5kX21zZ190b19wZihzdHJ1Y3QgaWF2Zl9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmMtNDEyLVxcdFxcdG1lbXNldChcXHUwMDI2ZGV0YWlscywgMCwgc2l6ZW9mKGRldGFpbHMpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmM6NDEzOlxcdFxcdGRldGFpbHMuYXN5bmMgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9jb21tb24uYy00MTQtXFx0XFx0Y21kX2RldGFpbHMgPSBcXHUwMDI2ZGV0YWlscztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTQ0MTY9aW50IGlkcGZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM3LVxcdC8qIHNldHRpbmcgcHJvbWlzY3VvdXMgaXMgb25seSBldmVyIGRvbmUgYXN5bmNocm9ub3VzbHkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzo0NDM4OlxcdHhuX3BhcmFtcy5hc3luYyA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtNDQzOS1cXHRyZXBseV9zeiA9IGlkcGZfdmNfeG5fZXhlYyhhZGFwdGVyLCBcXHUwMDI2eG5fcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubF9wdHAuYz02MjA9aW50IGlkcGZfcHRwX2dldF90eF90c3RhbXAoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jLTYyNi1cXHRcXHQudGltZW91dF9tcyA9IElEUEZfVkNfWE5fREVGQVVMVF9USU1FT1VUX01TRUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jOjYyNzpcXHRcXHQuYXN5bmMgPSB0cnVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubF9wdHAuYy02MjgtXFx0XFx0LmFzeW5jX2hhbmRsZXIgPSBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wX2FzeW5jX2hhbmRsZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjMxLjUwODM5NDQzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYxNjc2ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWnJhbSBhbmQgQXN5bmNocm9ub3VzIE9wZXJhdGlvbnM6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIGp1c3QgbG9va2luZyBhdCB0aGUgenJhbSBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBub25lIG9mIHRoZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLiBJbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSB0aGF0IGFzIHN0YW5kYXJkIHByYWN0aWNlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGFzeW5jaHJvbm91cyBJL08gd2l0aCBjb21wcmVzc2VkIG1lbW9yeS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBhc3luY2AgaXMgYmVpbmcgc2V0ICpkeW5hbWljYWxseSogc29tZXdoZXJlIHdpdGhpbiB0aGUgY29kZS4gTWF5YmUgaXQncyBiZWluZyBjb25maWd1cmVkIGJhc2VkIG9uIHNvbWUgb3RoZXIgcGFyYW1ldGVyIG9yIGNvbmRpdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEl0J3MgZWFzeSB0byBtaXNzIHRoZXNlIGtpbmRzIG9mIGRldGFpbHMgaWYgeW91J3JlIG5vdCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHpjb21wLmNgLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyB0aGF0IGhhbmRsZSBkZXZpY2UgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY2FsbCB0byBzZXQgYGFzeW5jID0gdHJ1ZWAgZnJvbSBzb21lIG90aGVyIGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIG9idmlvdXMgaXNuJ3Qgb3Zlcmxvb2tpbmcgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzQuODcwMDc0MTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQzMDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMTU9c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5OlxcdGlmIChjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2MC1cXHRcXHRtaWdodF9zbGVlcCgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzQuOTEyNTEyOTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjc2Mjk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zIGluIFpyYW0qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJZiBubyBiYWNrZW5kIGV4cGxpY2l0bHkgZmxhZ3MgaXRzIG9wZXJhdGlvbnMgYXMgYXN5bmNocm9ub3VzIGJ5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAsIHRoZW4sIGFzIGZhciBhcyBJIGNhbiBzZWUsIGBjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luY2AgaXMgKmFsd2F5cyogZ29pbmcgdG8gYmUgYGZhbHNlYCwgcmlnaHQ/IFRoYXQncyBhIGNydWNpYWwgYXNzdW1wdGlvbi4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgbGluZSBvZiB0aGlua2luZywgYSBsaW5nZXJpbmcgcXVlc3Rpb24gaXMgYnVnZ2luZyBtZTogaXMgdGhlcmUgZXZlbiBhIGNyeXB0byBBUEkgYmFja2VuZCBpbnZvbHZlZCBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdC4gSG1tLCBwZXJoYXBzIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZmlsZXMgaW4gYGRyaXZlcnMvYmxvY2svenJhbS9gIG1pZ2h0IG9mZmVyIHNvbWUgY2x1ZXMuIEkgc2hvdWxkIGJyb2FkZW4gbXkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjM4LjI4MDE0NTM2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJiYWNrZW5kXzg0Mi5jXCIsXG4gICAgXCJiYWNrZW5kXzg0Mi5oXCIsXG4gICAgXCJiYWNrZW5kX2RlZmxhdGUuY1wiLFxuICAgIFwiYmFja2VuZF9kZWZsYXRlLmhcIixcbiAgICBcImJhY2tlbmRfbHo0LmNcIixcbiAgICBcImJhY2tlbmRfbHo0LmhcIixcbiAgICBcImJhY2tlbmRfbHo0aGMuY1wiLFxuICAgIFwiYmFja2VuZF9sejRoYy5oXCIsXG4gICAgXCJiYWNrZW5kX2x6by5jXCIsXG4gICAgXCJiYWNrZW5kX2x6by5oXCIsXG4gICAgXCJiYWNrZW5kX2x6b3JsZS5jXCIsXG4gICAgXCJiYWNrZW5kX2x6b3JsZS5oXCIsXG4gICAgXCJiYWNrZW5kX3pzdGQuY1wiLFxuICAgIFwiYmFja2VuZF96c3RkLmhcIixcbiAgICBcInpjb21wLmNcIixcbiAgICBcInpjb21wLmhcIixcbiAgICBcInpyYW1fZHJ2LmNcIixcbiAgICBcInpyYW1fZHJ2LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzguMjgwMjA1Mzg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDEzNjQ0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaY29tcCBTdHJlYW0gTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBzcG90dGluZyB0aGVzZSBgYmFja2VuZF8qLmNgIGZpbGVzIGFuZCBJJ20gbG9va2luZyBmb3IgdGhlIGBhc3luY2AgZmxhZywgYnV0IEknbSBub3QgZmluZGluZyBpdCBiZWluZyBzZXQgd2l0aGluIHRoZW0uIFRoaXMgZmVlbHMgaW1wb3J0YW50LiBOb3csIGlmIGBhc3luY2AgaXMgKmZhbHNlKiwgdGhlbiBgIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jYCB3aWxsIGJlICp0cnVlKi4gQW5kIGFzc3VtaW5nIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlbiB0aGUgY29uZGl0aW9uYWwgYGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlgIHdpbGwgZXZhbHVhdGUgdG8gKnRydWUqLCBhbmQgYHByZWVtcHRfZGlzYWJsZSgpYCB3aWxsIGJlIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjYWxsLlxuXG5JIHNob3VsZCBnbyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCB3YXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoIHdhcyBpbnRyb2R1Y2VkLiBXaGF0IGRpZCBgemNvbXBfc3RyZWFtX2dldGAgZG8gcHJldmlvdXNseT8gSSBzaG91bGQgbG9vayBhdCB0aGUgZGlmZi4gT2theSwgSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgaW5jbHVkZXMgYHByZWVtcHRfZGlzYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIGBwcmVlbXB0X2VuYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX3B1dGAuXG5cbldhaXQsIHRoZSBvcmlnaW5hbCBgemNvbXBfc3RyZWFtX2dldGAgKmRpZG4ndCogaW5jbHVkZSB0aGF0IGBwcmVlbXB0X2Rpc2FibGUoKWAgY2FsbC4gVGhpcyBsb29rcyBzaWduaWZpY2FudC4gT2theSwgYnV0IEkgcmVtZW1iZXIgbm93OyBgemNvbXBfc3RyZWFtX2dldGAgaXMgYSBwZXItQ1BVIHN0cmVhbSBnZXR0ZXIuIE5vdyBJJ20gZ29pbmcgdG8gcmUtcmVhZCB3aGF0IGB6Y29tcF9zdHJlYW1fZ2V0YCBkb2VzIGluIG9yZGVyIHRvIGJlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo0NC42ODE1NzI0MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcbiAxMTE6XFx0XFx0YXQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGF0LCBcXFwiXFxcXG5cXFwiKTtcXG4gMTEyOlxcdFxcdHJldHVybiBhdDtcXG4gMTEzOlxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0Zm9yICg7Oykge1xcbiAxMTg6XFx0XFx0XFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtID0gcmF3X2NwdV9wdHIoY29tcC1cXHUwMDNlc3RyZWFtKTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0XFx0LypcXG4gMTIxOlxcdFxcdFxcdCAqIEluc3BpcmVkIGJ5IHpzd2FwXFxuIDEyMjpcXHRcXHRcXHQgKlxcbiAxMjM6XFx0XFx0XFx0ICogc3RyZWFtIGlzIHJldHVybmVkIHdpdGggLVxcdTAwM2VtdXRleCBsb2NrZWQgd2hpY2ggcHJldmVudHNcXG4gMTI0OlxcdFxcdFxcdCAqIGNwdV9kZWFkKCkgZnJvbSByZWxlYXNpbmcgdGhpcyBzdHJlYW0gdW5kZXIgdXMsIGhvd2V2ZXJcXG4gMTI1OlxcdFxcdFxcdCAqIHRoZXJlIGlzIHN0aWxsIGEgcmFjZSB3aW5kb3cgYmV0d2VlbiByYXdfY3B1X3B0cigpIGFuZFxcbiAxMjY6XFx0XFx0XFx0ICogbXV0ZXhfbG9jaygpLCBkdXJpbmcgd2hpY2ggd2UgY291bGQgaGF2ZSBiZWVuIG1pZ3JhdGVkXFxuIDEyNzpcXHRcXHRcXHQgKiBmcm9tIGEgQ1BVIHRoYXQgaGFzIGFscmVhZHkgZGVzdHJveWVkIGl0cyBzdHJlYW0uICBJZlxcbiAxMjg6XFx0XFx0XFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXFxuIDEyOTpcXHRcXHRcXHQgKi9cXG4gMTMwOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4gMTMxOlxcdFxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuIDEzMjpcXHRcXHRcXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gMTMzOlxcdFxcdFxcdGlmIChsaWtlbHkoenN0cm0tXFx1MDAzZWJ1ZmZlcikpXFxuIDEzNDpcXHRcXHRcXHRcXHRyZXR1cm4genN0cm07XFxuIDEzNTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4gMTM2OlxcdFxcdH1cXG4gMTM3OlxcdH1cXG4gMTM4OlxcdFxcbiAxMzk6XFx0dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtXFx1MDAzZXN0cmVhbSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuIDE0NDpcXHRcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiAxNDU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIDE0NjpcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gMTQ5OlxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo0NC42ODE2Mzg4MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYxNzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBaUkFNIFN0cmVhbSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgemNvbXBfc3RyZWFtX2dldGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIHJlbWVtYmVyIGl0IHVzZWQgdG8gcmV0dXJuIGB6c3RybWAgd2l0aCBgbXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKWAgaGVsZC4gVGhlIGtleSBwb2ludCBpczogZGlkIGl0IGRpc2FibGUgcHJlZW1wdGlvbiAqYmVmb3JlKiBncmFiYmluZyB0aGF0IG11dGV4PyBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGhhdmUgYSBzZXJpb3VzIHByb2JsZW0uIE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgcmFjZSBjb25kaXRpb24uXG5cbklmIHByZWVtcHRpb24gd2Fzbid0IGRpc2FibGVkLCB0aGVuIGNhbGxzIGxpa2UgYGttYXBfbG9jYWxfcGFnZWAgb3IsIGV2ZW4gd29yc2UsIGBrbWFwX2F0b21pY2AgY291bGQgaGF2ZSBiZWVuIHVzZWQgd2l0aGluIHRoYXQgY3JpdGljYWwgc2VjdGlvbiwgcmlnaHQ/IFRoYXQgd291bGQgYmUgYSByZWNpcGUgZm9yIGRpc2FzdGVyIGlmIGEgY29udGV4dCBzd2l0Y2ggaGFwcGVuZWQgYXQgdGhlIHdyb25nIG1vbWVudC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBwcmVlbXB0aW9uIHdhcyBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaXNzdWUgdGhhdCBoYXVudHMgbWUuXG5cbkxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gY2hlY2sgYHpyYW1fd3JpdGVfcGFnZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCdzIHdoZXJlIEkgY2FuIHNlZSBob3cgaXQgdXNlcyBhbnkgb2YgdGhpcyBzdHVmZiwgd2hpY2ggaXMgd2hlcmUgSSB0aGluayB0aGVyZSBjb3VsZCBiZSBhIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzMzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NDkuNzkxMjU5NTQyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgyOlxcdHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbjIyODM6XFx0e1xcbjIyODQ6XFx0XFx0aW50IHJldCA9IDA7XFxuMjI4NTpcXHRcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4yMjg2OlxcdFxcdHVuc2lnbmVkIGludCBjb21wX2xlbjtcXG4yMjg3OlxcdFxcdHZvaWQgKm1lbTtcXG4yMjg4OlxcdFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4yMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcXG4yMjkwOlxcdFxcdGJvb2wgc2FtZV9maWxsZWQ7XFxuMjI5MTpcXHRcXHRib29sIGFzeW5jO1xcbjIyOTI6XFx0XFxuMjI5MzpcXHRcXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMjI5NDpcXHRcXHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcXHUwMDI2ZWxlbWVudCk7XFxuMjI5NTpcXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4yMjk2OlxcdFxcdGlmIChzYW1lX2ZpbGxlZClcXG4yMjk3OlxcdFxcdFxcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuMjMwMDpcXHRcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4yMzAxOlxcdFxcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4yMzAyOlxcdFxcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sXFxuMjMwMzpcXHRcXHRcXHRcXHQgICAgIG1lbSwgXFx1MDAyNmNvbXBfbGVuKTtcXG4yMzA0OlxcdFxcdGt1bm1hcF9sb2NhbChtZW0pO1xcbjIzMDU6XFx0XFxuMjMwNjpcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbjIzMDc6XFx0XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMDg6XFx0XFx0XFx0cHJfZXJyKFxcXCJDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxcXFxuXFxcIiwgcmV0KTtcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXHR9XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGlmIChjb21wX2xlbiBcXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcXG4yMzEzOlxcdFxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4yMzE0OlxcdFxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XFxuMjMxNTpcXHRcXHR9XFxuMjMxNjpcXHRcXG4yMzE3OlxcdFxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbjIzMTg6XFx0XFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XFxuMjMxOTpcXHRcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuMjMyMDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XFxuMjMyMTpcXHRcXHR9XFxuMjMyMjpcXHRcXG4yMzIzOlxcdFxcdGlmICghenJhbV9jYW5fc3RvcmVfcGFnZSh6cmFtKSkge1xcbjIzMjQ6XFx0XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMjU6XFx0XFx0XFx0enNfZnJlZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4yMzI2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzMjc6XFx0XFx0fVxcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHR6c19vYmpfd3JpdGUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgenN0cm0tXFx1MDAzZWJ1ZmZlciwgY29tcF9sZW4pO1xcbjIzMzA6XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMzE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjQ5Ljc5MTQwMTAwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxNjkwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFpSQU0gU3RyZWFtIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGhpdCBhIHBvaW50IHdoZXJlIGB6cmFtX3pzX21hbGxvY2AgaXMgYmVpbmcgaW52b2tlZCB3aGlsZSBhIHN0cmVhbSBpcyBoZWxkLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGB6cmFtX3pzX21hbGxvY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWxsb2NhdGlvbiBpcyBmb3IsIGFuZCB3aHkgaXQncyBwb3RlbnRpYWxseSBibG9ja2luZyB3aGlsZSBob2xkaW5nIGEgc3RyZWFtIGxvY2suIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yLCB3b3JzZSwgYSBzb3VyY2Ugb2YgZGVhZGxvY2ssIGdpdmVuIHRoZSBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIGV4YWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo1My4wNjMwOTM5NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTg6XFx0XFx0cmV0dXJuIDA7XFxuMjIxOTpcXHR9XFxuMjIyMDpcXHRcXG4yMjIxOlxcdC8qXFxuMjIyMjpcXHQgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcXG4yMjIzOlxcdCAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXFxuMjIyNDpcXHQgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuMjIyNTpcXHQgKi9cXG4yMjI2OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXFxuMjIyNzpcXHRcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbjIyMjg6XFx0e1xcbjIyMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuMjIzMDpcXHRcXG4yMjMxOlxcdFxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XFxuMjIzMjpcXHRcXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbjIyMzM6XFx0XFx0XFx0XFx0XFx0X19HRlBfS1NXQVBEX1JFQ0xBSU0gfCBfX0dGUF9OT1dBUk4gfFxcbjIyMzQ6XFx0XFx0XFx0XFx0XFx0X19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIG5pZCk7XFxuMjIzNTpcXHRcXHRcXHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxcbjIyMzY6XFx0XFx0XFx0XFx0cmV0dXJuIGhhbmRsZTtcXG4yMjM3OlxcdFxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuMjIzODpcXHRcXHR9XFxuMjIzOTpcXHRcXG4yMjQwOlxcdFxcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXFxuMjI0MTpcXHRcXHRcXHRcXHQgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XFxuMjI0MjpcXHRcXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4yMjQzOlxcdFxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbjIyNDQ6XFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuMjI0NTpcXHRcXHRyZXR1cm4gaGFuZGxlO1xcbjIyNDY6XFx0fVxcbjIyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjUzLjA2MzIzMTA1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ0MDA2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIFByZS1QYXRjaCBCZWhhdmlvciBvZiBgemNvbXBfc3RyZWFtX2dldGAqKlxuXG5IbW0sIHRoaXMgcGF0Y2ggYnJpbmdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBtaW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgYmVmb3JlIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byB0aGUgcHJlLXBhdGNoIHZlcnNpb24gb2YgYHpjb21wX3N0cmVhbV9nZXRgIGFuZCB0cmFjZSBpdHMgZXhlY3V0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciByZXZlYWwgdGhlIGFjdHVhbCBtZWNoYW5pc20uIFRoaXMgaXMgYSBjcml0aWNhbCBkZXRhaWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NTYuMTA3MjQwODgzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTk4PXNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjExNTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NTYuMTUzMDg3Mjk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTM0NDE0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcmVlbXB0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIEkgY2FuIGp1c3QgcmUtZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIVwiIFJpZ2h0LCB0aGlzIHBhdGNoIGlzIGFkZGluZyBgcHJlZW1wdF9kaXNhYmxlKClgIGluIGB6Y29tcF9zdHJlYW1fZ2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyB3YXMgaW50cm9kdWNlZC5cblxuRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgcmF3X2NwdV9wdHJgIGRvZXNuJ3QgZGlzYWJsZSBwcmVlbXB0aW9uIGJ5IGl0c2VsZjsgaXQncyBqdXN0IGdyYWJiaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuIFNvLCB3aGF0IHdhcyB0aGUgc3RhdGUgYmVmb3JlPyBJZiBwcmVlbXB0aW9uIHdhc24ndCBkaXNhYmxlZCBwcmV2aW91c2x5LCBhbmQgKm5vdyogaXQgaXMsIHNvbWV0aGluZyBjaGFuZ2VkIHNpZ25pZmljYW50bHkgaW4gdGhlIGNvZGUgcGF0aC5cblxuVGhpbmtpbmcgYmFjaywgYmVmb3JlIHRoaXMgcGF0Y2gsIEknbSBwcmV0dHkgc3VyZSBgenJhbV96c19tYWxsb2NgIHdhcyBjYWxsZWQgd2l0aCBmbGFncyBsaWtlIGBHRlBfTk9JT2AuIFRoaXMgaXMga2V5LiBUaGUgY29kZSBwYXRoIHRoYXQgY2FsbHMgYHpzX21hbGxvY2AgaXMgd2hhdCBJIGhhdmUgdG8gbG9vayBhdC4gU2luY2UgYHpjb21wX3N0cmVhbV9nZXRgIGNvdWxkIG5vdyBiZSBkaXNhYmxpbmcgcHJlZW1wdGlvbiwgSSBuZWVkIHRvIGtub3cgd2h5IHRoaXMgcHJvdGVjdGlvbiB3YXMgYWRkZWQuXG5cbk5vdyBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBpbiBvbGRlciBrZXJuZWxzLCBidXQgbWF5YmUgaXQgZ290IGNoYW5nZWQgYXQgc29tZSBwb2ludD8gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCBhbmQgc2VlIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMgcmVsYXRlZCB0byBgemNvbXBfc3RyZWFtX2dldGAgb3IgYHpyYW1fenNfbWFsbG9jYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgYW5zd2VyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTowMi41NjY1MzIzMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzgxMjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9OTg9c3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTE1OnN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODc9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODk6c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05MC12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzMzY9c3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNTktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM2MDpcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNjEtXFx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjA4Mj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDk0OlxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5NS1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjEwNz1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOlxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjMtXFx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyODI9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk5LVxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDA6XFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMS1cXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MS1cXHRhc3luYyA9IHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzI6XFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MDIuODM0MzUxNzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODg2MjY5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBQb3RlbnRpYWwgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byBgemNvbXBfb3BzYCBhbmQgdHdlYWtzIGB6Y29tcF9zdHJlYW1fZ2V0YCB0byBkaXNhYmxlIHByZWVtcHRpb24gd2hlbiBgYXN5bmNgIGlzICpub3QqIHNldC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgZWl0aGVyIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGFkZHJlc3NpbmcgYSBwcmVlbXB0aW9uLXJlbGF0ZWQgYnVnLiBMb29raW5nIGRlZXBlciwgaXQgYWx0ZXJzIGB6cmFtX3pzX21hbGxvY2AncyBiZWhhdmlvciwgbWFraW5nIGl0IGF0dGVtcHQgYSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3QgaWYgaXQncyAqbm90KiBhc3luYy5cblxuTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYCFhc3luY2AsIHRoZSBjb2RlIGRpc2FibGVzIHByZWVtcHRpb24sIHBlcmZvcm1zIHRoZSBjb21wcmVzc2lvbiwgYW5kIHRoZW4gYXR0ZW1wdHMgbWVtb3J5IGFsbG9jYXRpb24gdXNpbmcgYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYC4gIEhhbmcgb24uLi4gYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCBpcyAqbm90KiBhIHNsZWVwaW5nIGFsbG9jYXRpb24sIHJpZ2h0PyAgSXQgd2FrZXMgdXAga3N3YXBkLCBidXQgZG9lc24ndCBzbGVlcCBpdHNlbGYuICBJZiB0aGF0IG5vbi1zbGVlcGluZyBhbGxvY2F0aW9uIGZhaWxzLCBpdCByZS1lbmFibGVzIHByZWVtcHRpb24sIGRvZXMgYSBzbGVlcGFibGUgYWxsb2NhdGlvbiAoYEdGUF9OT0lPYCksIGFuZCB0aGVuIGRpc2FibGVzIHByZWVtcHRpb24gKmFnYWluKi4gU28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGFjdHVhbGx5LCBpbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgcHJlZW1wdGlvbiBpcyBoYW5kbGVkIGR1cmluZyB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cblxuR2l2ZW4gdGhpcyBsZXZlbCBvZiBjb3JlIGxvZ2ljIG1hbmlwdWxhdGlvbiB3aXRoaW4gWlJBTSwgdGhpcyAqZGVmaW5pdGVseSogd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcHJlZW1wdGlvbiwgcHJpbWUgYXJlYXMgZm9yIHN1YnRsZSBidWdzIHRvIGNyZWVwIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgYmFja2VuZCBhY3R1YWxseSBzZXRzIHRoaXMgYGFzeW5jYCBmbGFnLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIEkgc2VhcmNoZWQgZm9yIFwiYXN5bmNcIiB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBkaXJlY3RvcnksIGFuZCBJIGRpZG4ndCBzZWUgYW55IGRpcmVjdCBzZXR0aW5nIG9mIGBhc3luY2AuIFBlcmhhcHMgaXQncyBzZXQgYnkgYSBjcnlwdG8gQVBJIHdyYXBwZXI/IEknbGwgY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCB0byBiZSBzdXJlLiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTowOS42MjI5ODE2OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjaW5jbHVkZSBcXFwiYmFja2VuZF9kZWZsYXRlLmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwiYmFja2VuZF84NDIuaFxcXCJcXG4gIDIyOlxcdFxcbiAgMjM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmJhY2tlbmRzW10gPSB7XFxuICAyNDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcXG4gIDI1OlxcdFxcdFxcdTAwMjZiYWNrZW5kX2x6b3JsZSxcXG4gIDI2OlxcdFxcdFxcdTAwMjZiYWNrZW5kX2x6byxcXG4gIDI3OlxcdCNlbmRpZlxcbiAgMjg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXFxuICAyOTpcXHRcXHRcXHUwMDI2YmFja2VuZF9sejQsXFxuICAzMDpcXHQjZW5kaWZcXG4gIDMxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXFxuICAzMjpcXHRcXHRcXHUwMDI2YmFja2VuZF9sejRoYyxcXG4gIDMzOlxcdCNlbmRpZlxcbiAgMzQ6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9aU1REKVxcbiAgMzU6XFx0XFx0XFx1MDAyNmJhY2tlbmRfenN0ZCxcXG4gIDM2OlxcdCNlbmRpZlxcbiAgMzc6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxcbiAgMzg6XFx0XFx0XFx1MDAyNmJhY2tlbmRfZGVmbGF0ZSxcXG4gIDM5OlxcdCNlbmRpZlxcbiAgNDA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXFxuICA0MTpcXHRcXHRcXHUwMDI2YmFja2VuZF84NDIsXFxuICA0MjpcXHQjZW5kaWZcXG4gIDQzOlxcdFxcdE5VTExcXG4gIDQ0OlxcdH07XFxuICA0NTpcXHRcXG4gIDQ2OlxcdHN0YXRpYyB2b2lkIHpjb21wX3N0cm1fZnJlZShzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV9jdHgoXFx1MDAyNnpzdHJtLVxcdTAwM2VjdHgpO1xcbiAgNDk6XFx0XFx0dmZyZWUoenN0cm0tXFx1MDAzZWxvY2FsX2NvcHkpO1xcbiAgNTA6XFx0XFx0dmZyZWUoenN0cm0tXFx1MDAzZWJ1ZmZlcik7XFxuICA1MTpcXHRcXHR6c3RybS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIGludCB6Y29tcF9zdHJtX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRpbnQgcmV0O1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV9jdHgoY29tcC1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2enN0cm0tXFx1MDAzZWN0eCk7XFxuICA1OTpcXHRcXHRpZiAocmV0KVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0enN0cm0tXFx1MDAzZWxvY2FsX2NvcHkgPSB2emFsbG9jKFBBR0VfU0laRSk7XFxuICA2MzpcXHRcXHQvKlxcbiAgNjQ6XFx0XFx0ICogYWxsb2NhdGUgMiBwYWdlcy4gMSBmb3IgY29tcHJlc3NlZCBkYXRhLCBwbHVzIDEgZXh0cmEgZm9yIHRoZVxcbiAgNjU6XFx0XFx0ICogY2FzZSB3aGVuIGNvbXByZXNzZWQgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgb25lXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHpzdHJtLVxcdTAwM2VidWZmZXIgPSB2emFsbG9jKDIgKiBQQUdFX1NJWkUpO1xcbiAgNjg6XFx0XFx0aWYgKCF6c3RybS1cXHUwMDNlYnVmZmVyIHx8ICF6c3RybS1cXHUwMDNlbG9jYWxfY29weSkge1xcbiAgNjk6XFx0XFx0XFx0emNvbXBfc3RybV9mcmVlKGNvbXAsIHpzdHJtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MDkuNjIzMDU5NDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNTI1Mzg2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21wcmVzc2lvbiBQYXRjaDogQSBEZWVwIERpdmUgaW50byBQcmVlbXB0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiBvciBwcmVwYXJhdGlvbi4gVGhlcmUgYXJlIG5vIG90aGVyIGJhY2tlbmRzIHNwZWNpZmllZCwgd2hpY2ggbWVhbnMgYGFzeW5jYCBkZWZhdWx0cyB0byBgZmFsc2VgLiBCdXQgd2FpdCwgY291bGQgYSBmdXR1cmUgcGF0Y2ggaW50cm9kdWNlIGFuIGFzeW5jIGJhY2tlbmQ/IE9yIGlzIHRoaXMganVzdCBzZXR0aW5nIHRoZSBzdGFnZT9cblxuRXZlbiBpZiBpdCdzIGFsd2F5cyBgZmFsc2VgIGN1cnJlbnRseSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2luZy4gQmVmb3JlIHRoaXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBkaWRuJ3QgZXhwbGljaXRseSBkaXNhYmxlIHByZWVtcHRpb24uIE5vdyBpdCAqZG9lcyogZGlzYWJsZSBwcmVlbXB0aW9uIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQhIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIExldCBtZSBjaGVjayB0aGUgY29kZS5cblxuYGBgY1xuc3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxue1xuXHRmb3IgKDs7KSB7XG5cdFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtID0gcmF3X2NwdV9wdHIoY29tcC1cdTAwM2VzdHJlYW0pO1xuXG5cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcblx0XHRpZiAobGlrZWx5KHpzdHJtLVx1MDAzZWJ1ZmZlcikpXG5cdFx0XHRyZXR1cm4genN0cm07XG5cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuXHR9XG59XG5gYGBcblxuT2theSwgc28gbG9va2luZyBhdCBpdCwgaXQgc2VlbXMgaXQgZGlkbid0IGRpc2FibGUgcHJlZW1wdGlvbi4gQW5kIHRoYXQgbWVhbnMgYSB0YXNrIGNvdWxkIGJlIHByZWVtcHRlZCB3aGlsZSBob2xkaW5nIGB6c3RybS1cdTAwM2Vsb2NrYCwgYnV0IGB6c3RybS1cdTAwM2Vsb2NrYCBpcyBhIG11dGV4LCBhbmQgbXV0ZXhlcyBhcmUgc2xlZXBhYmxlLiBCdXQgd2FpdCwgaWYgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCwgeW91ICpjYW5ub3QqIHNsZWVwISBMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgYHpjb21wX2NvbXByZXNzYCBmdW5jdGlvbiBjYWxscyBgY29tcC1cdTAwM2VvcHMtXHUwMDNlY29tcHJlc3NgLiBJZiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCBgY29tcC1cdTAwM2VvcHMtXHUwMDNlY29tcHJlc3NgIGNhbid0IHNsZWVwLlxuXG5JIHJlbWVtYmVyIGB6Y29tcF9jb21wcmVzc2AgdXNlZCB0byBjYWxsIGBtaWdodF9zbGVlcCgpYC4gTGV0J3MgbG9vayBhdCB0aGUgYHpjb21wX2NvbXByZXNzYCBkaWZmIHRvIHNlZSBpZiB0aGlzIGNvbmZpcm1zIHdoYXQgSSBzdXNwZWN0OlxuXG5gYGBkaWZmXG5AQCAtMTUwLDcgKzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0bWlnaHRfc2xlZXAoKTtcbitcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbitcdFx0bWlnaHRfc2xlZXAoKTtcbiBcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4gYGBgXG5cbkFoLCB5ZXMuIEJlZm9yZSB0aGlzIHBhdGNoLCBgemNvbXBfY29tcHJlc3NgICpjb3VsZCogc2xlZXAsIGFuZCBgbWlnaHRfc2xlZXAoKWAgd2FzIGNhbGxlZC4gTm93LCBpZiBgIWFzeW5jYCAod2hpY2ggaXQgY3VycmVudGx5IGlzKSwgYG1pZ2h0X3NsZWVwKClgIGlzICpub3QqIGNhbGxlZCwgYW5kIHByZWVtcHRpb24gKmlzKiBkaXNhYmxlZCEgVGhhdCBtZWFucyBjb21wcmVzc2lvbiBhbGdvcml0aG1zIChsem8sIGx6NCwgenN0ZCwgZXRjLikgYXJlIG5vdyBleGVjdXRlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQhIFRoaXMgaXMgYSBtYXNzaXZlIGZ1bmN0aW9uYWwgc2hpZnQuIEl0IGNoYW5nZXMgdGhlIGNvbnRleHQgZnJvbSBwcmVlbXB0aWJsZSB0byBub24tcHJlZW1wdGlibGUuXG5cbkFuZCB0aGUgY2hhbmdlcyB0byBgenJhbV96c19tYWxsb2NgIGZ1cnRoZXIgcmVpbmZvcmNlIHRoaXMuIEJlZm9yZSwgaXQgd2FzIGRvaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBHRlBfTk9JT2ApIHdoaWxlIGhvbGRpbmcgdGhlIHN0cmVhbS4gTm93LCBpZiBgIWFzeW5jYCwgaXQgZmlyc3QgdHJpZXMgYSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBfX0dGUF9LU1dBUERfUkVDTEFJTWApLiBJZiB0aGF0IGZhaWxzLCBpdCBlbmFibGVzIHByZWVtcHRpb24sIGRvZXMgdGhlIHNsZWVwYWJsZSBhbGxvY2F0aW9uLCBhbmQgZGlzYWJsZXMgaXQgYWdhaW4hXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgc2VyaW91cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6XG5cbiogICBgenJhbV93cml0ZV9wYWdlYFxuKiAgIGB6cmFtX3pzX21hbGxvY2BcbiogICBgemNvbXBfY29tcHJlc3NgXG4qICAgYHpjb21wX2RlY29tcHJlc3NgXG4qICAgYHpjb21wX3N0cmVhbV9nZXRgXG4qICAgYHpjb21wX3N0cmVhbV9wdXRgXG5cbkhvbGQgb24sIGB6cmFtX3pzX21hbGxvY2AgaXMgc3RhdGljLiBMZXQncyBtYWtlIGEgbGlzdCBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnM6XG5cbiogICBgemNvbXBfc3RyZWFtX2dldGBcbiogICBgemNvbXBfc3RyZWFtX3B1dGBcbiogICBgemNvbXBfY29tcHJlc3NgXG4qICAgYHpjb21wX2RlY29tcHJlc3NgXG4qICAgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBidXQgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igd3JpdGluZy4gVGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaXMgbGlrZWx5IGB6cmFtX2J2ZWNfcndgLCBgenJhbV9yd19wYWdlYCwgb3IgYHpyYW1fc3VibWl0X2Jpb2AuIExldCdzIGNoZWNrIGB6cmFtX2Rydi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyMS45NzU2MDA0NDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODMyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fd3JpdGVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz05MTE9c3RhdGljIGludCB6cmFtX3dyaXRlYmFja19jb21wbGV0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fd2JfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy05MzAtXFx0ICogV2UgcmVsZWFzZSBzbG90IGxvY2sgZHVyaW5nIHdyaXRlYmFjayBzbyBzbG90IGNhbiBjaGFuZ2UgdW5kZXIgdXM6XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTMxOlxcdCAqIHNsb3RfZnJlZSgpIG9yIHNsb3RfZnJlZSgpIGFuZCB6cmFtX3dyaXRlX3BhZ2UoKS4gSW4gYm90aCBjYXNlc1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTkzMi1cXHQgKiBzbG90IGxvc2VzIFpSQU1fUFBfU0xPVCBmbGFnLiBObyBjb25jdXJyZW50IHBvc3QtcHJvY2Vzc2luZyBjYW5cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI4MjpzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjgzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNDg9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzU5LVxcdFxcdG1lbWNweV9mcm9tX2J2ZWMocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBidmVjKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzYwOlxcdFxcdHJldCA9IHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2MS1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY2PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzAtXFx0XFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzE6XFx0cmV0dXJuIHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBidmVjLVxcdTAwM2Vidl9wYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjIyLjAyMDQ0MTgyOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI0NDA3ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIFdyaXRlIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIHdyaXRlIHBhdGguIEkgc2VlIGB6cmFtX2J2ZWNfd3JpdGVgIGNhbGxpbmcgYHpyYW1fd3JpdGVfcGFnZWAuIE5hdHVyYWxseSwgbXkgZmlyc3QgdGhvdWdodCBpcywgaXMgYHpyYW1fYnZlY193cml0ZWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0IG1vc3QgbGlrZWx5IGlzLiBJdCdzIGEga2VybmVsIGludGVybmFsIGZ1bmN0aW9uLCBzbyB0aGF0J3MgYSBmYWlyIGFzc3VtcHRpb24uIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24uLi4gd2hhdCBpcyB0aGUgYmlvIHN1Ym1pc3Npb24gZnVuY3Rpb24gaW4gdXNlIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSB1bHRpbWF0ZWx5IG1ha2VzIGl0cyB3YXkgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBvciwgaW4gdGhlIGNhc2Ugb2YgWlJBTSwgaG93IGl0J3MgY29tcHJlc3NlZCBhbmQgaGFuZGxlZCBpbiBtZW1vcnkuIFVuZGVyc3RhbmRpbmcgdGhlIGJpbyBzdWJtaXNzaW9uIGlzIGNyaXRpY2FsIHRvIHRoaXMgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaXQncyB0aGUgY2FzZSwgdGhhdCB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgYSBtZW1vcnkgZGV2aWNlIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBhIGNvbnZlbnRpb25hbCBkaXNrLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyNi4wNDQ4NTMxMTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTcxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fYnZlY193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM0Ny0gKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzQ4OnN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNDktXFx0XFx0XFx0XFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzY2OnN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzY3LVxcdFxcdFxcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjktXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MDpcXHRcXHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS1cXHRyZXR1cm4genJhbV93cml0ZV9wYWdlKHpyYW0sIGJ2ZWMtXFx1MDAzZWJ2X3BhZ2UsIGluZGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NDM9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NTUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc1NjpcXHRcXHRpZiAoenJhbV9idmVjX3dyaXRlKHpyYW0sIFxcdTAwMjZidiwgaW5kZXgsIG9mZnNldCkgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc1Ny1cXHRcXHRcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnpyYW0tXFx1MDAzZXN0YXRzLmZhaWxlZF93cml0ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyNi4wODkwMjkzMDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMjY3NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKlRoZSBXcml0ZSBGbG93IFdpdGhpbiB6cmFtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHdyaXRlIHBhdGggd2l0aGluIHpyYW0uIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIGdldHMgd3JpdHRlbiAob3IsIHdlbGwsICpwcmVwYXJlZCogZm9yIHdyaXRpbmcsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXByZXNzaW9uIGFuZCBiYWNraW5nIHN0b3JlKS4gTm93LCB3aGVyZSBkb2VzIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gZ2V0IGNhbGxlZCBmcm9tPyBBaCwgeWVzIOKAkyBpdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmlvIHJlcXVlc3RzIGRlc3RpbmVkIGZvciB0aGUgenJhbSBkZXZpY2UuIFNvLCB0aGUgc3VibWlzc2lvbiBmdW5jdGlvbiBpcyB3aGF0IG9yY2hlc3RyYXRlcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGJpbyBhbmQsIHVsdGltYXRlbHksIGNhbGxzIGB6cmFtX2Jpb193cml0ZWAgdG8gZGVhbCB3aXRoIHRoZSB3cml0aW5nLiBJIHdvdWxkIHRoZW4gY2hlY2sgdG8gZW5zdXJlIHRoYXQgYWxsIGJpbyByZXF1ZXN0cyBhcmUgYmVpbmcgY29ycmVjdGx5IHN1Ym1pdHRlZCB0aHJvdWdoIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGlzIGFsbG93cyBtZSB0byBrbm93IHRoYXQgZXZlcnkgd3JpdGUgcGF0aCBmbG93cyB0aHJvdWdoIHRoaXMgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBmb3JtIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYmlvJ3Mgd3JpdGUgcGF0aCBnb2VzIHRocm91Z2ggYHpyYW1fYmlvX3dyaXRlYCwgd2hpY2ggc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24uIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgaGFwcGVucyB3aXRoaW4gYHpyYW1fYmlvX3dyaXRlYCDigJMgY29tcHJlc3Npb24sIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgSS9PIHRvIHRoZSBiYWNraW5nIGRldmljZSwgZXRjLiBCdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBteSBtZW50YWwgbWFwIG9mIHpyYW0ncyB3cml0ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjI5LjkyMTcwNzc4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9iaW9fd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjcxMj1zdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzQyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NDM6c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzQ0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NzY9c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODQtXFx0Y2FzZSBSRVFfT1BfV1JJVEU6XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc4NTpcXHRcXHR6cmFtX2Jpb193cml0ZSh6cmFtLCBiaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjI5Ljk2NzIxNjU1MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjczMDYyODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBmbG93IGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOlxuXG4qKlpSQU0gQ29tcHJlc3Npb24gRW50cnkgUG9pbnQgYW5kIERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgd2l0aGluIFpSQU0gaXMgYHpyYW1fc3VibWl0X2Jpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHdvdWxkIGJlIHRoZSBwb2ludCB3aGVyZSBJJ2QgZXhwZWN0IGJsb2NrIEkvTyByZXF1ZXN0cyB0byBiZSBoYW5kbGVkIGFuZCBmdW5uZWxlZCBpbnRvIHRoZSBaUkFNIGxheWVyIGZvciBwcm9jZXNzaW5nLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGlzIGhlYXZpbHkgZGVwZW5kZW50IG9uIHRoZSB6bGliIGxpYnJhcnkgd2l0aCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBzcGVjaWZpY2FsbHkgYWxsb2NhdGVzIG1lbW9yeSB0aHJvdWdoIGB6cmFtX3pzX21hbGxvY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBhY3R1YWwgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBvZiBkYXRhIHdpdGhpbiBhIHNsb3QuIEknZCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhvc2UgZnVuY3Rpb25zIHRvIHNlZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmVpbmcgdXNlZCwgYnV0IHRoZSBsaW5rYWdlIGlzIGNsZWFyLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGZhY3QgdGhhdCBgcmVjb21wcmVzc19zbG90YCBpcyBjYWxsZWQgZnJvbSBgenJhbV9yZWNvbXByZXNzYCBpbXBsaWVzIHRoYXQncyBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgbGlrZWx5IG9yY2hlc3RyYXRpbmcgcmUtY29tcHJlc3Npb24gb2YgZGF0YS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYXMgdGhlIHJvb3QgZnVuY3Rpb24gZm9yIHRoZSB3aG9sZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjMzLjY0MDI4MjkyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4Njk3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wcmVzc19zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzOTA9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQzNC0gKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDM1OnN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzYtXFx0XFx0XFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI1MzA9c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI2NTI6XFx0XFx0ZXJyID0gcmVjb21wcmVzc19zbG90KHpyYW0sIHBwcy1cXHUwMDNlaW5kZXgsIHBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1My1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bnVtX3JlY29tcF9wYWdlcywgdGhyZXNob2xkLCBwcmlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzMuNjg2MTYxNzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDExOTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb21wcmVzc2lvbiBJbnRlcmZhY2UqKlxuXG5SaWdodCwgc28gYHJlY29tcHJlc3Nfc3RvcmVgIGlzIHRoZSBkZXNpZ25hdGVkIGVudHJ5IHBvaW50IGZvciB0aGUgc3lzZnMgaW50ZXJhY3Rpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zOiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSAqbm90KiBzdGF0aWMsIG9yLCBhdCBsZWFzdCwgbm90IGRlY2xhcmVkIGFzIHN1Y2gsIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGV4cG9ydGVkIHN5bWJvbHMgb3IgaWYgdGhleSdyZSBoaWRkZW4gc29tZWhvdy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlPyBBIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2wgdGFibGUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBvciBpbnRlZ3JhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzcuMDQwMjgzMjc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1Nzc4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzcuMDg2NzQ0ODUzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjg5NDM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgWlJBTSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgWlJBTSBjb2RlLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBsaWtlIHBvdGVudGlhbCB0YXJnZXRzOiBgenJhbV9zdWJtaXRfYmlvYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYW5kIGB6Y29tcF9zdHJlYW1fcHV0YC4gVGhleSBhcmVuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbldhaXQgYSBzZWNvbmQsIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIGp1c3QgdGhlIHN0YW5kYXJkIGJsb2NrIGRldmljZSBiaW8gc3VibWlzc2lvbiBmdW5jdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBvcGVyYXRpb24uIERpcmVjdGx5IGZ1enppbmcgdGhhdCBvbmUgbWlnaHQgYmUgdHJpY2t5IGlmIGl0J3Mgc3RhdGljLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgY2FuIGZ1enogYmxvY2sgZGV2aWNlcyBwcmV0dHkgZWZmZWN0aXZlbHkgdGhyb3VnaCBgL2Rldi96cmFtWGAuIEl0IGludGVyYWN0cyB3aXRoIGJsb2NrIGRldmljZXMgdmlhIG9wZW5pbmcgYC9kZXYvenJhbVhgIGFuZCBwZXJmb3JtaW5nIHJlYWQvd3JpdGUvaW9jdGwgb3BlcmF0aW9ucy4gSXQgYWxzbyBoaXRzIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNvIHRoYXQncyBjb3ZlcmVkLlxuXG5TbywgcmVhbGlzdGljYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgIGxvb2tzIGxpa2UgYSBnb29kLCBmb2N1c2VkIHN5bWJvbC4gIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byB0YXJnZXQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBPYnZpb3VzbHksIGBDT05GSUdfWlJBTWAgaXMgZXNzZW50aWFsLiBXaGF0IGVsc2UgbWlnaHQgYmUgaW52b2x2ZWQ/IEFoLCBJIHNlZSBhIHJlZmVyZW5jZSB0byBgSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgLiBJZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIGVuYWJsZWQsIHByZWVtcHRpb24gaXNuJ3QgZGlzYWJsZWQuIFNvLCBpZiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRlc3QgdGhlIG5ldyBwcmVlbXB0aW9uLWRpc2FibGVkIGNvZGUgcGF0aCwgSSAqc2hvdWxkbid0KiBlbmFibGUgYENPTkZJR19QUkVFTVBUX1JUYC4gSSB3b24ndCBuZWVkIHRvIGFkZCBgUFJFRU1QVF9SVGAgdG8gYEVuYWJsZUNvbmZpZ3NgLlxuXG5XaGF0IGFib3V0IG9wdGlvbnMgZm9yIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBsaWtlIGBDT05GSUdfWlJBTV9CQUNLRU5EX0xaT2A/IE5vLCB3YWl0LCBgQ09ORklHX1pSQU1gIGlzIGVub3VnaCwgc2luY2UgaXQgc2VsZWN0cyBhdCBsZWFzdCBvbmUgYmFja2VuZC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AganVzdCB0byBiZSBzdXJlLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjQ0LjM1NTY5MjA2NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBaUkFNXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgIDU6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIGNhbGxlZCAvZGV2L3pyYW1YIChYID0gMCwgMSwgLi4uKS5cXG4gICA4OlxcdFxcdCAgUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeVxcbiAgIDk6XFx0XFx0ICBpdHNlbGYuIFRoZXNlIGRpc2tzIGFsbG93IHZlcnkgZmFzdCBJL08gYW5kIGNvbXByZXNzaW9uIHByb3ZpZGVzXFxuICAxMDpcXHRcXHQgIGdvb2QgYW1vdW50cyBvZiBtZW1vcnkgc2F2aW5ncy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXFxuICAxMzpcXHRcXHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuICAxODpcXHRcXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMjA6XFx0XFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbiAgMjE6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcXG4gIDI0OlxcdFxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDI2OlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xcbiAgMjc6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwienN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAzMjpcXHRcXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbiAgMzM6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG4gIDM2OlxcdFxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMzg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgMzk6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDQ0OlxcdFxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4gIDQ1OlxcdFxcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICA0OTpcXHRcXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDUwOlxcdFxcdFxcdCFaUkFNX0JBQ0tFTkRfWlNURCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0RFRkxBVEUgXFx1MDAyNlxcdTAwMjYgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo0NC4zNTU3Njg2OTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MjIyNTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipaUkFNIFBhdGNoIFJldmlldyAtIFNpZ25pZmljYW50IEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFpSQU1gIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYWRkIGBaUkFNYCB0byBgRW5hYmxlQ29uZmlnc2AsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYWRqdXN0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwcmVlbXB0aW9uIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgemNvbXBfc3RyZWFtX2dldGAgbm93IGRpc2FibGVzIHByZWVtcHRpb24gaWYgaXQncyBub3QgYXN5bmNocm9ub3VzIGFuZCBSVCBpcyAqbm90KiBlbmFibGVkLlxuKiAgIGB6Y29tcF9zdHJlYW1fcHV0YCAqZW5hYmxlcyogcHJlZW1wdGlvbi5cbiogICBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2Agbm93IGNvbmRpdGlvbmFsbHkgY2FsbCBgbWlnaHRfc2xlZXAoKWAgYmFzZWQgb24gdGhlIGBhc3luY2AgZmxhZy5cbiogICBgenJhbV96c19tYWxsb2NgIGF0dGVtcHRzIGEgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIChgX19HRlBfS1NXQVBEX1JFQ0xBSU1gKSBmaXJzdCBpZiBub3QgYXN5bmMgYW5kIG5vIFJULlxuKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGFuZCBgcmVjb21wcmVzc19zbG90YCBub3cgcGFzcyBgYXN5bmNgIGRvd24gdG8gYHpyYW1fenNfbWFsbG9jYCBhbmQgYHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2VgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IGB6cmFtYCBoYW5kbGVzIG1lbW9yeSBhbmQgcHJlZW1wdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gYmFsYW5jZSBwZXJmb3JtYW5jZSBhbmQgbGF0ZW5jeSwgZXNwZWNpYWxseSBpbiBSVCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQgd2FudHMgdG8gYXZvaWQgc2xlZXBpbmcgaW4gbm9uLWFzeW5jIG1vZGUuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gSSdsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gLiBJIGtub3cgdGhhdCdzIHN0YXRpYywgc28gaXQgcHJvYmFibHkgY2FsbHMgaW50byB0aG9zZSBvdGhlciBmdW5jcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1MC44Mzc5OTcxMDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYyNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNzQzPXN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc1LSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NzY6c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTYyLVxcdC5vcGVuID0genJhbV9vcGVuLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5NjM6XFx0LnN1Ym1pdF9iaW8gPSB6cmFtX3N1Ym1pdF9iaW8sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2NC1cXHQuc3dhcF9zbG90X2ZyZWVfbm90aWZ5ID0genJhbV9zbG90X2ZyZWVfbm90aWZ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1MC44ODE1NjU4OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk4NTI5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIEhvb2tpbmcgUG9pbnRzIGluIFpSQU0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBob29rIGludG8gdGhlIFpSQU0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgenJhbV9zdWJtaXRfYmlvYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBjbGFzc2ljIHByb2JsZW07IGl0IG1lYW5zIHN5emthbGxlciBsaWtlbHkgY2FuJ3QgaG9vayBpdCBkaXJlY3RseSBieSBuYW1lLiBJIHdhcyBjb25zaWRlcmluZyBpZiBpdCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgd2FpdCwgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdGhlIGNhc2U7IGl0IHNob3VsZCBiZSBhZGRyZXNzYWJsZS5cblxuVGhlbiBJIHNoaWZ0ZWQgbXkgZm9jdXMgdG8gYHpjb21wX2NvbXByZXNzYCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGV5J3JlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGV4cG9ydGVkLCBtYWtpbmcgdGhlbSBob29rYWJsZS4gSSB0aG91Z2h0LCBcIkdyZWF0LCB0aG9zZSBjb3VsZCBiZSBlYXNpZXIgdGFyZ2V0cyFcIiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHRoZXkgcmVhbGx5IGV4cG9ydGVkPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gdXNhZ2UuICpIbW0qLiBPa2F5LCBJJ3ZlIGNoZWNrZWQgYW5kIEkgd2FzIHdyb25nLCBgRVhQT1JUX1NZTUJPTGAgaXMgbm90IHVzZWQuIFRoZXkgYXJlIG5vdCBleHBvcnRlZCwgZGVzcGl0ZSBiZWluZyBub24tc3RhdGljLCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBvbiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgaXMgbm90IHByb21pc2luZy5cblxuTGV0J3MgcmVmb2N1cyBvbiB0aGUgaW1wb3J0YW50IHZhcmlhYmxlIGFuZCBjaGVjayB0aGF0IHRoZSBzdGF0aWMga2V5d29yZCBpcyBub3QgYXBwbGllZCB0byBgemNvbXBfY29tcHJlc3NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1NS40ODAwOTgyMDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjkxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NvbXByZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTEzOT12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE0ODppbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ5LVxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1NS41NTQ3OTI2NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkzNDk0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzIFN5bWJvbCBDb25maXJtYXRpb24gXHUwMDI2IFJlY29tcHJlc3MgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gYHpjb21wX2NvbXByZXNzYCwgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGFuZCBgemNvbXBfZGVjb21wcmVzc2Ag4oCTIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuIFRoYXQncyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZCwgYW5kIGl0J3MgZ29vZCB0byBzZWUgdGhhdCBjb25maXJtZWQgZXhwbGljaXRseS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBpbiB0aGlzIGFyZWEuIFdpdGggdGhlc2UgY29uZmlybWVkIGFzIG15IGZvY3VzLCBJIGNhbiBub3cgbW92ZSBmb3J3YXJkLCBJIHdhcyBhbHJlYWR5IGV4cGVjdGluZyB0aGVtIHRvIGJlIGRlZmluZWQgaW4gYSBub24tc3RhdGljIHdheS4gXG5cbk5leHQgdXAsIEknbGwgZGlyZWN0IG15IGF0dGVudGlvbiB0byBgcmVjb21wcmVzc19zdG9yZWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6NTkuMDQ4Mjg5NzY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYzNzYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTI5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MzA6c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjUzMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6NTkuMDkxOTMwNjUzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNDUwNjY2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBaUkFNIENvbXByZXNzaW9uIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGByZWNvbXByZXNzX3N0b3JlYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aGF0LiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaG9zZSBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IGNhbGxpbmcgdGhlIG1vZGlmaWVkIGNvZGU/IExldCdzIHNlZS4uLiBgenJhbV96c19tYWxsb2NgIGlzIHN0YXRpYywgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHJlY29tcHJlc3Nfc2xvdGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IHRoZSBmb3VyIEkgbGlzdGVkLlxuXG5TbywgSSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggYW5kIGNydWNpYWxseSwgdGhleSBhcmUgKm5vbi1zdGF0aWMqLCB3aGljaCBtZWFucyB0aGV5IGhhdmUgYnJvYWRlciB2aXNpYmlsaXR5IGFuZCBtb3JlIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uXG5cblRoZSBwYXRjaCdzIGltcGFjdCBpcyBzaWduaWZpY2FudC4gSXQncyBjaGFuZ2luZyB0aGUgZnVuZGFtZW50YWwgcHJlZW1wdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3Igd2l0aGluIHRoZSB6cmFtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZGlzYWJsaW5nIHByZWVtcHRpb24gYW5kIGF2b2lkaW5nIHNsZWVwIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyByZWxhdGVkIHRvIGFuIGBhc3luY2AgZmxhZywgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBuYXN0eSBidWdzLiBJbWFnaW5lIHNsZWVwaW5nIHdoaWxlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQhIE9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJJ20gb24gaGlnaCBhbGVydC4gWWVzLCBgemNvbXBfc3RyZWFtX2dldGAgaXMgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwganVzdCBhcyBleHBlY3RlZC4gVGhlIHNhbWUgZm9yIHRoZSBvdGhlciB0aHJlZS4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgY29kZS5cblxuVGhlIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaXMgYFpSQU1gLlxuXG5NeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgYGFzeW5jYCBmbGFnIGZvciB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBhbmQgc2lnbmlmaWNhbnRseSBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXR0ZW1wdCBub24tc2xlZXBhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLiBBbnkgY2hhbmdlcyB0aGF0IGFmZmVjdCBwcmVlbXB0aW9uIGNvbnRleHQgb3IgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgY2FuIGludHJvZHVjZSBjcml0aWNhbCBidWdzLiBUaGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMjksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjUwOjA4LjMzNjk5OTgwMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjY4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfc3RyZWFtX2dldFwiLFxuICAgIFwiemNvbXBfc3RyZWFtX3B1dFwiLFxuICAgIFwiemNvbXBfY29tcHJlc3NcIixcbiAgICBcInpjb21wX2RlY29tcHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFuZCBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF2b2lkIHNsZWVwaW5nIHdoZW4gYCFhc3luY2AuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGluIGB6cmFtX3pzX21hbGxvY2AgdG8gdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmaXJzdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGxvZ2ljLCBhbHRlcmluZyBwcmVlbXB0aW9uIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBzbGVlcGluZyB3aGlsZSBhdG9taWMgb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3N0cmVhbV9nZXRcIixcbiAgICBcInpjb21wX3N0cmVhbV9wdXRcIixcbiAgICBcInpjb21wX2NvbXByZXNzXCIsXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp8jxf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 01:08:40 +0000 UTC FinishedAt: 2026-08-05 01:50:11 +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": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM" ], "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": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM" ], "series_id": "7316970b-c9e2-4dad-9fb9-63b596ed70e9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_stream_get", "zcomp_stream_put", "zcomp_compress", "zcomp_decompress" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3pjb21wX3N0cmVhbV9wdXQmIzM0OywKICAgICYjMzQ7emNvbXBfY29tcHJlc3MmIzM0OywKICAgICYjMzQ7emNvbXBfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFuZCBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF2b2lkIHNsZWVwaW5nIHdoZW4gYCFhc3luY2AuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGluIGB6cmFtX3pzX21hbGxvY2AgdG8gdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmaXJzdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGxvZ2ljLCBhbHRlcmluZyBwcmVlbXB0aW9uIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBzbGVlcGluZyB3aGlsZSBhdG9taWMgb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNWZhM2JlNWUxMzE0OTk2NjA3NjYxNjI3OTcyZWMyZDg1ZTNmZDllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMTo0Nzo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5pbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5AQCAtMTI4LDE0ICYjNDM7MTI4LDIwIEBAIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbiBcdFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXG4gXHRcdCAqL1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuJiM0MztcdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcdFx0aWYgKGxpa2VseSh6c3RybS1cdTAwM2VidWZmZXIpKVxuIFx0XHRcdHJldHVybiB6c3RybTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuIFx0fVxuIH1cbiBcbi12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuJiM0Mzt2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4mIzQzO1xuJiM0MztcdGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTE1MCw3ICYjNDM7MTU2LDggQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRtaWdodF9zbGVlcCgpO1xuJiM0MztcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdG1pZ2h0X3NsZWVwKCk7XG4gXHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2Vjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XG5AQCAtMTY3LDcgJiM0MzsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0LmRzdF9sZW4gPSBQQUdFX1NJWkUsXG4gXHR9O1xuIFxuLVx0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG4mIzQzO1x0XHRtaWdodF9zbGVlcCgpO1xuIFx0cmV0dXJuIGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xuIFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFxuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRib29sIGFzeW5jO1xuIH07XG4gXG4gLyogZHluYW1pYyBwZXItZGV2aWNlIGNvbXByZXNzaW9uIGZyb250ZW5kICovXG5AQCAtODYsNyAmIzQzOzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4mIzQzO3ZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGNmYTk4ODQ2YWM0ODQuLjUyYjlmYmUzZTBkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xMzY0LDcgJiM0MzsxMzY0LDcgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGlmICghcmV0KVxuIFx0XHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdGt1bm1hcF9sb2NhbChzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjA5OCw3ICYjNDM7MjA5OCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7XG4gXHRrdW5tYXBfbG9jYWwoZHN0KTtcbiBcdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4tXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjEyNCw3ICYjNDM7MjEyNCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4gXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXG4gXHRtZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7XG4gXG5AQCAtMjIxOCwyMCAmIzQzOzIyMTgsNDAgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxuJiM0MzsgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuJiM0MzsgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuJiM0MztcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbiYjNDM7XHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbiYjNDM7XHRcdFx0XHRfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8XG4mIzQzO1x0XHRcdFx0X19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIG5pZCk7XG4mIzQzO1x0XHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbiYjNDM7XHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuJiM0MztcdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbiYjNDM7XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4mIzQzO1x0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHByZWVtcHRpYmxlIGNvbnRleHQgc28gd2UgZG9uJiMzOTt0IG5lZWRcbi1cdCAqIHRvIGRvIG9wdGltaXN0aWMgYW5kIGZhbGxiYWNrIHRvIHBlc3NpbWlzdGljIGhhbmRsZSBhbGxvY2F0aW9uLFxuLVx0ICogbGlrZSB3ZSBkbyBmb3IgY29tcHJlc3NpYmxlIHBhZ2VzLlxuLVx0ICovXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgUEFHRV9TSVpFLFxuLVx0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi1cdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgcGFnZV90b19uaWQocGFnZSkpO1xuJiM0MztcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuIFxuQEAgLTIyNjgsNiAmIzQzOzIyODgsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiBcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcbiBcdGJvb2wgc2FtZV9maWxsZWQ7XG4mIzQzO1x0Ym9vbCBhc3luYztcbiBcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHNhbWVfZmlsbGVkID0gcGFnZV9zYW1lX2ZpbGxlZChtZW0sIFx1MDAyNmVsZW1lbnQpO1xuQEAgLTIyNzUsNiAmIzQzOzIyOTYsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGlmIChzYW1lX2ZpbGxlZClcbiBcdFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xuIFxuJiM0MztcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLCB6c3RybSxcbkBAIC0yMjgyLDMyICYjNDM7MjMwNCwzMCBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdGt1bm1hcF9sb2NhbChtZW0pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdFx0cHJfZXJyKFwmIzM0O0NvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0aWYgKGNvbXBfbGVuIFx1MDAzZT0gaHVnZV9jbGFzc19zaXplKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuLVx0XHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiYjNDM7XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG4gXHR9XG4gXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4mIzQzO1x0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuIFx0fVxuIFxuIFx0aWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuIFxuIFx0c2xvdF9sb2NrKHpyYW0sIGluZGV4KTtcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQyMyw2ICYjNDM7MjQ0Myw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDtcbiBcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9uZXc7XG4gXHR2b2lkICpzcmM7XG4mIzQzO1x0Ym9vbCBhc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0aGFuZGxlX29sZCA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQ0Nyw2ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICovXG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXG4mIzQzO1x0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbiBcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIFx1MDAyNmNvbXBfbGVuX25ldyk7XG5AQCAtMjQ2Miw3ICYjNDM7MjQ4NCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQqbnVtX3JlY29tcF9wYWdlcyAtPSAxO1xuIFxuIFx0aWYgKHJldCkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtMjQ3MSw3ICYjNDM7MjQ5Myw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFxuIFx0aWYgKGNsYXNzX2luZGV4X25ldyBcdTAwM2U9IGNsYXNzX2luZGV4X29sZCB8fFxuIFx0ICAgICh0aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGNvbXBfbGVuX25ldyBcdTAwM2U9IHRocmVzaG9sZCkpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2VcbkBAIC0yNDg1LDI3ICYjNDM7MjUwNywxNCBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogV2UgYXJlIGhvbGRpbmcgcGVyLUNQVSBzdHJlYW0gbXV0ZXggYW5kIGVudHJ5IGxvY2sgc28gYmV0dGVyXG4tXHQgKiBhdm9pZCBkaXJlY3QgcmVjbGFpbS4gIEFsbG9jYXRpb24gZXJyb3IgaXMgbm90IGZhdGFsIHNpbmNlXG4tXHQgKiB3ZSBzdGlsbCBoYXZlIHRoZSBvbGQgb2JqZWN0IGluIHRoZSBtZW1fcG9vbC5cbi1cdCAqXG4tXHQgKiBYWFg6IHRlY2huaWNhbGx5LCB0aGUgbm9kZSB3ZSByZWFsbHkgd2FudCBoZXJlIGlzIHRoZSBub2RlIHRoYXRcbi1cdCAqIGhvbGRzIHRoZSBvcmlnaW5hbCBjb21wcmVzc2VkIGRhdGEuIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdXMgdG9cbi1cdCAqIG1vZGlmeSB6c21hbGxvYyBBUEkgdG8gcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24uIEZvciBub3csIHdlIHdpbGxcbi1cdCAqIG1ha2UgZG8gd2l0aCB0aGUgbm9kZSBvZiB0aGUgcGFnZSBhbGxvY2F0ZWQgZm9yIHJlY29tcHJlc3Npb24uXG4tXHQgKi9cbi1cdGhhbmRsZV9uZXcgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3LFxuLVx0XHRcdCAgICAgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XG4tXHRcdFx0ICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLFxuLVx0XHRcdCAgICAgICBwYWdlX3RvX25pZChwYWdlKSk7XG4mIzQzO1x0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlX25ldykpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4mIzQzO1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xuIFx0fVxuIFxuIFx0enNfb2JqX3dyaXRlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZV9uZXcsIHpzdHJtLVx1MDAzZWJ1ZmZlciwgY29tcF9sZW5fbmV3KTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuJiM0MztcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXG4gXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xuIFx0c2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4LCBoYW5kbGVfbmV3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAgICYjMzQ7emNvbXBfc3RyZWFtX3B1dCYjMzQ7LAogICAgJiMzNDt6Y29tcF9jb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGFzeW5jYCBmbGFnIHRvIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgYW5kIG1vZGlmaWVzIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXZvaWQgc2xlZXBpbmcgd2hlbiBgIWFzeW5jYC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYHpyYW1fenNfbWFsbG9jYCB0byB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IHdoZW4gcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gbG9naWMsIGFsdGVyaW5nIHByZWVtcHRpb24gY29udGV4dHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHNsZWVwaW5nIHdoaWxlIGF0b21pYyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZmEzYmU1ZTEzMTQ5OTY2MDc2NjE2Mjc5NzJlYzJkODVlM2ZkOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDAxOjQ3OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwppbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwpAQCAtMTI4LDE0ICYjNDM7MTI4LDIwIEBAIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCkKIAkJICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuCiAJCSAqLwogCQltdXRleF9sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spOwomIzQzOwkJaWYgKCFjb21wLSZndDtvcHMtJmd0O2FzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAobGlrZWx5KHpzdHJtLSZndDtidWZmZXIpKQogCQkJcmV0dXJuIHpzdHJtOwogCQltdXRleF91bmxvY2soJmFtcDt6c3RybS0mZ3Q7bG9jayk7CiAJfQogfQogCi12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKQomIzQzO3ZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApCiB7CiYjNDM7CXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtJmd0O3N0cmVhbSk7CiYjNDM7CiYjNDM7CWlmICghY29tcC0mZ3Q7b3BzLSZndDthc3luYyAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spOwogfQogCkBAIC0xNTAsNyAmIzQzOzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAl9OwogCWludCByZXQ7CiAKLQltaWdodF9zbGVlcCgpOwomIzQzOwlpZiAoY29tcC0mZ3Q7b3BzLSZndDthc3luYykKJiM0MzsJCW1pZ2h0X3NsZWVwKCk7CiAJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzcyhjb21wLSZndDtwYXJhbXMsICZhbXA7enN0cm0tJmd0O2N0eCwgJmFtcDtyZXEpOwogCWlmICghcmV0KQogCQkqZHN0X2xlbiA9IHJlcS5kc3RfbGVuOwpAQCAtMTY3LDcgJiM0MzsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAkJLmRzdF9sZW4gPSBQQUdFX1NJWkUsCiAJfTsKIAotCW1pZ2h0X3NsZWVwKCk7CiYjNDM7CWlmIChjb21wLSZndDtvcHMtJmd0O2FzeW5jKQomIzQzOwkJbWlnaHRfc2xlZXAoKTsKIAlyZXR1cm4gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMgewogCXZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIAogCWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWJvb2wgYXN5bmM7CiB9OwogCiAvKiBkeW5hbWljIHBlci1kZXZpY2UgY29tcHJlc3Npb24gZnJvbnRlbmQgKi8KQEAgLTg2LDcgJiM0Mzs4Nyw3IEBAIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApOwogCiBzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApOwotdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7CiYjNDM7dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7CiAKIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAkJICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBjZmE5ODg0NmFjNDg0Li41MmI5ZmJlM2UwZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJaWYgKCFyZXQpCiAJCWNvcHlfcGFnZShzcmMsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKIAlrdW5tYXBfbG9jYWwoc3JjKTsKLQl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKJiM0MzsJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJc2xvdF91bmxvY2soenJhbSwgaW5kZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIwOTgsNyAmIzQzOzIwOTgsNyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7CiAJa3VubWFwX2xvY2FsKGRzdCk7CiAJenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7Ci0JemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CXpjb21wX3N0cmVhbV9wdXQoenJhbS0mZ3Q7Y29tcHNbcHJpb10pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMjQsNyAmIzQzOzIxMjQsNyBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKIAltZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpOwogCXpzX29ial9yZWFkX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAKIAltZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7CiAKQEAgLTIyMTgsMjAgJiM0MzsyMjE4LDQwIEBAIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnkKJiM0MzsgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpbgomIzQzOyAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb24KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLAomIzQzOwkJYm9vbCBhc3luYywgY29uc3QgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaGFuZGxlOwomIzQzOwomIzQzOwlpZiAoIWFzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7CiYjNDM7CQloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAomIzQzOwkJCQlfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8CiYjNDM7CQkJCV9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpOwomIzQzOwkJaWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSkKJiM0MzsJCQlyZXR1cm4gaGFuZGxlOwomIzQzOwkJcHJlZW1wdF9lbmFibGUoKTsKJiM0MzsJfQomIzQzOwomIzQzOwloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAomIzQzOwkJCSAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHwKJiM0MzsJCQkgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTsKJiM0MzsJaWYgKCFhc3luYyAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwlyZXR1cm4gaGFuZGxlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgICAgdTMyIGluZGV4LCBib29sIGFzeW5jKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXZvaWQgKnNyYzsKIAotCS8qCi0JICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcmVlbXB0aWJsZSBjb250ZXh0IHNvIHdlIGRvbiYjMzk7dCBuZWVkCi0JICogdG8gZG8gb3B0aW1pc3RpYyBhbmQgZmFsbGJhY2sgdG8gcGVzc2ltaXN0aWMgaGFuZGxlIGFsbG9jYXRpb24sCi0JICogbGlrZSB3ZSBkbyBmb3IgY29tcHJlc3NpYmxlIHBhZ2VzLgotCSAqLwotCWhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLSZndDttZW1fcG9vbCwgUEFHRV9TSVpFLAotCQkJICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgUEFHRV9TSVpFLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpOwogCWlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpOwogCkBAIC0yMjY4LDYgJiM0MzsyMjg4LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwogCXVuc2lnbmVkIGxvbmcgZWxlbWVudDsKIAlib29sIHNhbWVfZmlsbGVkOwomIzQzOwlib29sIGFzeW5jOwogCiAJbWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXNhbWVfZmlsbGVkID0gcGFnZV9zYW1lX2ZpbGxlZChtZW0sICZhbXA7ZWxlbWVudCk7CkBAIC0yMjc1LDYgJiM0MzsyMjk2LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAJaWYgKHNhbWVfZmlsbGVkKQogCQlyZXR1cm4gd3JpdGVfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBlbGVtZW50LCBpbmRleCk7CiAKJiM0MzsJYXN5bmMgPSB6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tJmd0O29wcy0mZ3Q7YXN5bmM7CiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAJbWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sCkBAIC0yMjgyLDMyICYjNDM7MjMwNCwzMCBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCkKIAlrdW5tYXBfbG9jYWwobWVtKTsKIAogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQlwcl9lcnIoJiMzNDtDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxuJiMzNDssIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKGNvbXBfbGVuICZndDs9IGh1Z2VfY2xhc3Nfc2l6ZSkgewotCQl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKLQkJcmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwomIzQzOwkJcmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTsKIAl9CiAKLQloYW5kbGUgPSB6c19tYWxsb2MoenJhbS0mZ3Q7bWVtX3Bvb2wsIGNvbXBfbGVuLAotCQkJICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJaWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQlyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7CiAJfQogCiAJaWYgKCF6cmFtX2Nhbl9zdG9yZV9wYWdlKHpyYW0pKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwogCQl6c19mcmVlKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl6c19vYmpfd3JpdGUoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgenN0cm0tJmd0O2J1ZmZlciwgY29tcF9sZW4pOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7CiAKIAlzbG90X2xvY2soenJhbSwgaW5kZXgpOwogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CkBAIC0yNDIzLDYgJiM0MzsyNDQzLDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJdW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDsKIAl1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfbmV3OwogCXZvaWQgKnNyYzsKJiM0MzsJYm9vbCBhc3luYzsKIAlpbnQgcmV0ID0gMDsKIAogCWhhbmRsZV9vbGQgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwpAQCAtMjQ0Nyw2ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLAogCSAqLwogCWNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTsKIAomIzQzOwlhc3luYyA9IHpyYW0tJmd0O2NvbXBzW3ByaW9dLSZndDtvcHMtJmd0O2FzeW5jOwogCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJc3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCXJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCAmYW1wO2NvbXBfbGVuX25ldyk7CkBAIC0yNDYyLDcgJiM0MzsyNDg0LDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSpudW1fcmVjb21wX3BhZ2VzIC09IDE7CiAKIAlpZiAocmV0KSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNDcxLDcgJiM0MzsyNDkzLDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAKIAlpZiAoY2xhc3NfaW5kZXhfbmV3ICZndDs9IGNsYXNzX2luZGV4X29sZCB8fAogCSAgICAodGhyZXNob2xkICZhbXA7JmFtcDsgY29tcF9sZW5fbmV3ICZndDs9IHRocmVzaG9sZCkpIHsKLQkJemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CQl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKIAogCQkvKgogCQkgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2UKQEAgLTI0ODUsMjcgJiM0MzsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIFdlIGFyZSBob2xkaW5nIHBlci1DUFUgc3RyZWFtIG11dGV4IGFuZCBlbnRyeSBsb2NrIHNvIGJldHRlcgotCSAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2UKLQkgKiB3ZSBzdGlsbCBoYXZlIHRoZSBvbGQgb2JqZWN0IGluIHRoZSBtZW1fcG9vbC4KLQkgKgotCSAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdAotCSAqIGhvbGRzIHRoZSBvcmlnaW5hbCBjb21wcmVzc2VkIGRhdGEuIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdXMgdG8KLQkgKiBtb2RpZnkgenNtYWxsb2MgQVBJIHRvIHJldHVybiB0aGlzIGluZm9ybWF0aW9uLiBGb3Igbm93LCB3ZSB3aWxsCi0JICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi4KLQkgKi8KLQloYW5kbGVfbmV3ID0genNfbWFsbG9jKHpyYW0tJmd0O21lbV9wb29sLCBjb21wX2xlbl9uZXcsCi0JCQkgICAgICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLAotCQkJICAgICAgIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKJiM0MzsJaGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7Ci0JCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwkJemNvbXBfc3RyZWFtX3B1dCh6cmFtLSZndDtjb21wc1twcmlvXSk7CiAJCXJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlX25ldyk7CiAJfQogCiAJenNfb2JqX3dyaXRlKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGVfbmV3LCB6c3RybS0mZ3Q7YnVmZmVyLCBjb21wX2xlbl9uZXcpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6Y29tcF9zdHJlYW1fcHV0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKIAogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CiAJc2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4LCBoYW5kbGVfbmV3KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBaUkFNIGJsb2NrIGRldmljZSwgc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBhc3BlY3RzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGFuIGBhc3luY2AgZmxhZyB3aXRoaW4gdGhlIGBzdHJ1Y3QgemNvbXBfb3BzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGltcGxpZXMgYXN5bmNocm9ub3VzIGNvbXByZXNzaW9uIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVGhleSYjMzk7dmUgbW9kaWZpZWQgYHpjb21wX3N0cmVhbV9nZXRgIGFuZCBgemNvbXBfc3RyZWFtX3B1dGAgdG8gcHJlZW1wdGl2ZWx5IGRpc2FibGUgc29tZXRoaW5nIGJhc2VkIG9uIHRoaXMgbmV3IGBhc3luY2AgZmxhZywgYnV0IG9ubHkgaWYgd2UmIzM5O3JlICpub3QqIHVzaW5nIGEgUmVhbC1UaW1lIGtlcm5lbC4gVGhhdCYjMzk7cyBhIGNvbmRpdGlvbmFsIG9wdGltaXphdGlvbiwgcHJvYmFibHkgdHJ5aW5nIHRvIGJhbGFuY2UgcGVyZm9ybWFuY2Ugd2l0aCBkZXRlcm1pbmlzbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBwcmVlbXB0aW9uIGJlaGF2aW9yIGFyb3VuZCB0aGF0IGNvZGUgbGF0ZXIuCgpUaGV5JiMzOTt2ZSBhbHNvIGNoYW5nZWQgaG93IGB6cmFtX3pzX21hbGxvY2AgaXMgaGFuZGxlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYGFzeW5jYCBhbGxvY2F0aW9uLCBhbmQgdXBkYXRlZCB0aGUgc2lnbmF0dXJlIG9mIGB6Y29tcF9zdHJlYW1fcHV0YC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgZnJvbSBgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtYCB0byBgc3RydWN0IHpjb21wICpjb21wYCBpcyBub3RhYmxlOyBpdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgY2VudHJhbGl6ZWQgYHpjb21wYCBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb25zLCByYXRoZXIgdGhhbiBkZWFsaW5nIHdpdGggc3RyZWFtcyBkaXJlY3RseS4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIHRvIHN1cHBvcnQgdGhlIGFzeW5jIGNhcGFiaWxpdHksIHBlcmhhcHMgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZpZWxkcyBvciBzdHJlYW1saW5pbmcgdGhlIGNvZGUuCgpOb3csIG15IG1haW4gcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgYXN5bmNgIGZsYWc/IFdoYXQgKmFzeW5jKiBjb21wcmVzc2lvbiBiYWNrZW5kcyBhcmUgYWN0dWFsbHkgc3VwcG9ydGVkPyBMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBtZW50aW9ucyBvZiB0aGF0IGBhc3luY2AgbWVtYmVyIHdpdGhpbiB0aGUgYHpjb21wX29wc2Agc3RydWN0LiBJIG5lZWQgdG8gc2VlIHdoYXQgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBvciBjb25maWd1cmF0aW9ucyBhcmUgZmxhZ2dlZCBhcyBhc3luY2hyb25vdXMsIGFuZCB1bmRlcnN0YW5kIHdoeSB0aGV5IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIGFwcHJvYWNoLiBUaGlzJiMzOTtsbCBkaWN0YXRlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGltcG9ydGFudCB0aGlzIGZlYXR1cmUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTExNT1zdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQyLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5Olx0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTYwLVx0XHRtaWdodF9zbGVlcCgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXHRcdG1pZ2h0X3NsZWVwKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjktXHRjb25zdCBjaGFyICpuYW1lO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzA6XHRib29sIGFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNzEtfTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTI9c3RydWN0IHpyYW1fcmJfcmVxIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MTktXHR1bmlvbiB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1MjA6XHRcdC8qIFRoZSBvcmlnaW5hbCBiaW8gdG8gY29tcGxldGUgKGFzeW5jIHJlYWQpICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MjEtXHRcdHN0cnVjdCBiaW8gKnBhcmVudDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzczPXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTE6c3RhdGljIHZvaWQgenJhbV9hc3luY19yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTIte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDQtXHQvKlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQwNTpcdCAqIE5PVEU6IHpyYW1fYXN5bmNfcmVhZF9lbmRpbygpIGlzIG5vdCBleGFjdGx5IHJpZ2h0IHBsYWNlIGZvciB0aGlzLlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNi1cdCAqIElkZWFsbHksIHdlIG5lZWQgdG8gZG8gaXQgYWZ0ZXIgWlJBTV9XQiBjaGVjaywgYnV0IHRoaXMgcmVxdWlyZXNcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQyODpzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjktXHRcdFx0XHR1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDUyLVx0YmlvLVx1MDAzZWJpX3ByaXZhdGUgPSByZXE7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDUzOlx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IHpyYW1fYXN5bmNfcmVhZF9lbmRpbztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTQtXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTQ5OT1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXHR9XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4Olx0cmV0dXJuIHJlYWRfZnJvbV9iZGV2X2FzeW5jKHpyYW0sIHBhZ2UsIGluZGV4LCBibGtfaWR4LCBwYXJlbnQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUwOS19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIwNj1zdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIxLS8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIyOiAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMzogKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyNC0gKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyNzpcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjMxOlx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMyLVx0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0Mi1cdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDM6XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQ0LVx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ5Olx0XHRcdFx0ICAgICB1MzIgaW5kZXgsIGJvb2wgYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUzLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTUtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkwLVx0Ym9vbCBzYW1lX2ZpbGxlZDtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTE6XHRib29sIGFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5OTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxMy1cdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE0Olx0XHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCwgYXN5bmMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNS1cdH1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE3Olx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE4LVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ1LVx0dm9pZCAqc3JjO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ0NjpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ3LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzE6XHRhc3luYyA9IHpyYW0tXHUwMDNlY29tcHNbcHJpb10tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Mi1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA5LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUxMDpcdGhhbmRsZV9uZXcgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbl9uZXcsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTExLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGVfbmV3KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkFuYWx5emluZyB0aGUgTmV3IEFzeW5jIFN1cHBvcnQgaW4gYHpjb21wX29wc2AqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBhc3luY2Agc3VwcG9ydCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgYW55IG9mIHRoZSBleGlzdGluZyBjb21wbGV0aW9uIGJhY2tlbmRzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBuZXcgZnVuY3Rpb25hbGl0eT8gSXQmIzM5O3MgYWxsIHdlbGwgYW5kIGdvb2QgdG8gYWRkIHRoZSBmZWF0dXJlLCBidXQgd2l0aG91dCBhY3RpdmUgYWRvcHRpb24sIGl0JiMzOTtzIGp1c3QgZXh0cmEgY29kZS4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGJhY2tlbmRzIGFyZSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoaXMgYGFzeW5jID0gdHJ1ZWAgc2V0dGluZy4gVGhpcyB3aWxsIHJldmVhbCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgYXV0aG9ycyBoYWQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBtaW5kLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGFmZmVjdGVkIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5OTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQXN5bmNocm9ub3VzIEkvTyBJbXBsZW1lbnRhdGlvbiBpbiBacmFtIEJhY2tlbmRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBhc3luY2hyb25vdXMgSS9PIG1pZ2h0IGJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgWnJhbSBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmFja2VuZC4gR2l2ZW4gbXkga25vd2xlZGdlLCB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgY29kZSByZWxhdGVkIHRvIHRoZSB2YXJpb3VzIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRoZW1zZWx2ZXMsIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoYXQgZmxhZyB3b3VsZCBiZSBkZWZpbmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGNvZGUgc3RydWN0dXJlLiBJJiMzOTtsbCBmb2N1cyBvbiBgZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfKi5jYCBmaWxlcyBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkLCBhcyB0aGV5IHdvdWxkIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgb2YgZWFjaCBzdXBwb3J0ZWQgYmFja2VuZC4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtkIGZpbmQgdGhlIGtleSBpbmRpY2F0b3JzIOKAkyBzcGVjaWZpY2FsbHksIGxvb2tpbmcgZm9yIHRoZSBgYXN5bmNgIGZsYWcgYmVpbmcgc2V0IGR1cmluZyB0aGUgSS9PIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggZm9yIGNvbmZpcm1pbmcgb3IgZGVueWluZyBpdHMgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtiYWNrZW5kXzg0Mi5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfODQyLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9kZWZsYXRlLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF9kZWZsYXRlLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sejQuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NC5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0aGMuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NGhjLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem8uYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6by5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHpvcmxlLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem9ybGUuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX3pzdGQuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX3pzdGQuaCYjMzQ7LAogICAgJiMzNDt6Y29tcC5jJiMzNDssCiAgICAmIzM0O3pjb21wLmgmIzM0OywKICAgICYjMzQ7enJhbV9kcnYuYyYjMzQ7LAogICAgJiMzNDt6cmFtX2Rydi5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzk1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIEFzeW5jaHJvbm91cyBCYWNrZW5kIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2Ygb3VyIGJhY2tlbmQgY29uZmlndXJhdGlvbnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IHJldm9sdmVzIGFyb3VuZCB0aGUgYGFzeW5jYCBmbGFnIG9yIHNldHRpbmcuIEkmIzM5O20gdGhpbmtpbmcsIGEgcXVpY2sgc2NhbiBhY3Jvc3MgYWxsIG9mIG91ciBkZWZpbmVkIGJhY2tlbmRzIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGtub3cgZGVmaW5pdGl2ZWx5LCByaWdodCBhd2F5LCB3aGljaCBvbmVzIGhhdmUgYmVlbiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSBhc3luY2hyb25vdXNseS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBwcm9maWxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEFzeW5jaHJvbm91cyBCYWNrZW5kIE9wZXJhdGlvbnMqKgoKSG1tLCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlc2UgYmFja2VuZHMgYXJlIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYGFzeW5jYCBmbGFnLCB3aGljaCBpcyBhIGJpdCBzdXJwcmlzaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHpjb21wX29wc2AgYXJlIGFjdHVhbGx5IGRlZmluZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFzeW5jaHJvbm91cyBiZWhhdmlvciBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkLCBvciBpZiBpdCYjMzk7cyBiZWluZyBtaXNzZWQuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGRpdmUgaW50byBgemNvbXAuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgemNvbXBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz00NT1zdGF0aWMgaW50IGRlY29tcHJlc3NfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6NTM6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU0LVx0LmNvbXByZXNzXHQ9IGNvbXByZXNzXzg0Mixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MjtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTEyMj1zdGF0aWMgaW50IGRlZmxhdGVfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE0Ny1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoxNDg6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTQ5LVx0LmNvbXByZXNzXHQ9IGRlZmxhdGVfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5oLTctXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGU7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmgtOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYz0xMTg9c3RhdGljIGludCBsejRfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0xNDEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzoxNDI6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE0My1cdC5jb21wcmVzc1x0PSBsejRfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmgtNy1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuaC05LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM9OTY9c3RhdGljIGludCBsejRoY19kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMTE5LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYzoxMjA6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjEtXHQuY29tcHJlc3NcdD0gbHo0aGNfY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9NDE9c3RhdGljIGludCBsem9fZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01MC1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jOjUxOmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01Mi1cdC5jb21wcmVzc1x0PSBsem9fY29tcHJlc3MsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmgtNy1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem87XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uaC05LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTQxPXN0YXRpYyBpbnQgbHpvcmxlX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1MTpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTItXHQuY29tcHJlc3NcdD0gbHpvcmxlX2NvbXByZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5oLTctXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmgtOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MTkwPXN0YXRpYyBpbnQgenN0ZF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMDgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6MjA5OmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxMC1cdC5jb21wcmVzc1x0PSB6c3RkX2NvbXByZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuaC03LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oLTktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzpzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI0LSNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfTFpPKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTU0PXN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTc0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6NzU6c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmxvb2t1cF9iYWNrZW5kX29wcyhjb25zdCBjaGFyICpjb21wKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTg4LXtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjg5Olx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTkwLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTQ5PXN0cnVjdCB6Y29tcF9yZXEge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTU2LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NTc6c3RydWN0IHpjb21wX29wcyB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC01OC1cdGludCAoKmNvbXByZXNzKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD03ND1zdHJ1Y3QgemNvbXAge1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNzUtXHRzdHJ1Y3QgemNvbXBfc3RybSBfX3BlcmNwdSAqc3RyZWFtO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzY6XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpvcHM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03Ny1cdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb24gaW4gWnJhbSBCYWNrZW5kcyoqCgpIbW0sIHRoYXQmIzM5O3Mgb2RkLiBJdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlIGJhY2tlbmRzIGFyZSBleHBsaWNpdGx5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzLCBlc3BlY2lhbGx5IGlmIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgaW50ZW5kZWQgb3Igbm90LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgZHJpdmVycy9jcnlwdG8vYCBkaXJlY3RvcnksIGp1c3QgaW4gY2FzZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcmVsZXZhbnQgaW4gdGhlcmUuIE5vLCB0aGF0IGRvZXNuJiMzOTt0IGxvb2sgcHJvbWlzaW5nLiBBaCwgcmlnaHQsIHpyYW0gdXNlcyBpdHMgb3duIGJhY2tlbmRzIG5vdy4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYmFja2VuZCBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBhc3luYyBoYW5kbGluZy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgZWl0aGVyIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIG9yIHBlcmhhcHMgYGJhY2tlbmRfenN0ZC5jYC4gSG9wZWZ1bGx5LCB0aG9zZSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB3aGV0aGVyIHRoZXkgZXZlbiBjb25zaWRlciB0aGlzIGZsYWcgYW5kIGhvdyB0aGV5IGhhbmRsZSBpdC4gVGhhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBpbXBsaWNpdCBkZWZhdWx0IGJlaGF2aW9yIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0fVxuIDEyMTpcdFxuIDEyMjpcdHN0YXRpYyBpbnQgZGVmbGF0ZV9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyxcbiAxMjM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXG4gMTI0Olx0XHRcdFx0ICAgICAgc3RydWN0IHpjb21wX3JlcSAqcmVxKVxuIDEyNTpcdHtcbiAxMjY6XHRcdHN0cnVjdCBkZWZsYXRlX2N0eCAqemN0eCA9IGN0eC1cdTAwM2Vjb250ZXh0O1xuIDEyNzpcdFx0c3RydWN0IHpfc3RyZWFtX3MgKmluZmxhdGU7XG4gMTI4Olx0XHRpbnQgcmV0O1xuIDEyOTpcdFxuIDEzMDpcdFx0aW5mbGF0ZSA9IFx1MDAyNnpjdHgtXHUwMDNlZGN0eDtcbiAxMzE6XHRcbiAxMzI6XHRcdHJldCA9IHpsaWJfaW5mbGF0ZVJlc2V0KGluZmxhdGUpO1xuIDEzMzpcdFx0aWYgKHJldCAhPSBaX09LKVxuIDEzNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzU6XHRcbiAxMzY6XHRcdGluZmxhdGUtXHUwMDNlbmV4dF9pbiA9ICh1OCAqKXJlcS1cdTAwM2VzcmM7XG4gMTM3Olx0XHRpbmZsYXRlLVx1MDAzZWF2YWlsX2luID0gcmVxLVx1MDAzZXNyY19sZW47XG4gMTM4Olx0XHRpbmZsYXRlLVx1MDAzZW5leHRfb3V0ID0gKHU4ICopcmVxLVx1MDAzZWRzdDtcbiAxMzk6XHRcdGluZmxhdGUtXHUwMDNlYXZhaWxfb3V0ID0gcmVxLVx1MDAzZWRzdF9sZW47XG4gMTQwOlx0XG4gMTQxOlx0XHRyZXQgPSB6bGliX2luZmxhdGUoaW5mbGF0ZSwgWl9TWU5DX0ZMVVNIKTtcbiAxNDI6XHRcdGlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKVxuIDE0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNDQ6XHRcbiAxNDU6XHRcdHJldHVybiAwO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbiAxNDk6XHRcdC5jb21wcmVzc1x0PSBkZWZsYXRlX2NvbXByZXNzLFxuIDE1MDpcdFx0LmRlY29tcHJlc3NcdD0gZGVmbGF0ZV9kZWNvbXByZXNzLFxuIDE1MTpcdFx0LmNyZWF0ZV9jdHhcdD0gZGVmbGF0ZV9jcmVhdGUsXG4gMTUyOlx0XHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuIDE1MzpcdFx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbiAxNTQ6XHRcdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuIDE1NTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtkZWZsYXRlXCYjMzQ7LFxuIDE1NjpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEh5cG90aGVzaXMgR2VuZXJhdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEl0JiMzOTtzIGxpa2Ugc29tZXRoaW5nIGp1c3QgY2xpY2tlZCBpbiBteSBicmFpbi4gQ291bGQgaXQgYmUgdGhhdCB0aGVyZSYjMzk7cyBhIG5ldyBiYWNrZW5kIGluIHBsYXksIGFuZCBpdCYjMzk7cyB1c2luZyB0aGUgYGFzeW5jYCBmbGFnPyBPciwgcGVyaGFwcywgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBsYXlpbmcgdGhlIGdyb3VuZHdvcmssIHByZXBhcmluZyB0aGUgZXhpc3Rpbmcgc3lzdGVtIGZvciB0aGlzIG5ldyBhc3luY2hyb25vdXMgYmFja2VuZD8gSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgpMZXQmIzM5O3MgZG8gdGhpcyBtZXRob2RpY2FsbHkuIE15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBjb2RlIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGljaCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gcmVjZW50bHkgbW9kaWZpZWQgYWxvbmdzaWRlIHRoaXMgb25lLCBwYXJ0aWN1bGFybHkgdG8gc2VlIGlmIGFueSBvZiB0aGVtIGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYW55d2hlcmUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2l0dWF0aW9uIGFuZCBoZWxwIG1lIHRlc3QgbXkgaHlwb3RoZXNpcy4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGFwcHJvYWNoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuYXN5bmNbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qdHJ1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgT3BlcmF0aW9uIHdpdGhpbiB0aGUgWnJhbSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBkaXJlY3RvcnkuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSBgYXN5bmNgIGlzIGJlaW5nIHNldCBvciB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoZXJlICpjb3VsZCogYmUgc29tZSBpbnRlcmVzdGluZyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBhc3luY2hyb25vdXMgSS9PIHdpdGhpbiB0aGUgenJhbSBkcml2ZXIuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhc3luYyBvcGVyYXRpb25zLiBNeSBoeXBvdGhlc2lzIGlzIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50IGluIHRoZSBvdmVyYWxsIHpyYW0gaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgZm9yIG90aGVyIGZpbGVzIGFuZCBzZWUgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTE1PXN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzAtXHRcdG11dGV4X2xvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XHRcdGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTEzMi1cdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTQ4PWludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNTk6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjAtXHRcdG1pZ2h0X3NsZWVwKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3OC1cdFx0bWlnaHRfc2xlZXAoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD01Nz1zdHJ1Y3QgemNvbXBfb3BzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02OS1cdGNvbnN0IGNoYXIgKm5hbWU7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo3MDpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03MS19O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUxMj1zdHJ1Y3QgenJhbV9yYl9yZXEge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUxOS1cdHVuaW9uIHtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUyMDpcdFx0LyogVGhlIG9yaWdpbmFsIGJpbyB0byBjb21wbGV0ZSAoYXN5bmMgcmVhZCkgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUyMS1cdFx0c3RydWN0IGJpbyAqcGFyZW50O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzNzM9c3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM5MTpzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNC1cdC8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDA1Olx0ICogTk9URTogenJhbV9hc3luY19yZWFkX2VuZGlvKCkgaXMgbm90IGV4YWN0bHkgcmlnaHQgcGxhY2UgZm9yIHRoaXMuXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDA2LVx0ICogSWRlYWxseSwgd2UgbmVlZCB0byBkbyBpdCBhZnRlciBaUkFNX1dCIGNoZWNrLCBidXQgdGhpcyByZXF1aXJlc1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDI4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyOS1cdFx0XHRcdHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTItXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IHJlcTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0NTM6XHRiaW8tXHUwMDNlYmlfZW5kX2lvID0genJhbV9hc3luY19yZWFkX2VuZGlvO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQ1NC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNDk5PXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUwNy1cdH1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1MDg6XHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfYXN5bmMoenJhbSwgcGFnZSwgaW5kZXgsIGJsa19pZHgsIHBhcmVudCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjA2PXN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjEtLypcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjI6ICogdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmb3IgIWFzeW5jIGJhY2tlbmQsIHRoZW4gdHJ5XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIzOiAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjI0LSAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjI3Olx0XHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyOC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzE6XHRpZiAoIWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzItXHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQyLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MzpcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDQtXHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDk6XHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTAte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU0Olx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgUEFHRV9TSVpFLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTAtXHRib29sIHNhbWVfZmlsbGVkO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5MTpcdGJvb2wgYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkyLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5Olx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzAwLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEzLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTQ6XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE1LVx0fVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTc6XHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbiwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTgtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDUtXHR2b2lkICpzcmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDQ2Olx0Ym9vbCBhc3luYztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDctXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNTEwOlx0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MTEtXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFzeW5jIENvbXByZXNzaW9uIEZsYWcgSW52ZXN0aWdhdGlvbioqCgpIbW0sIHNvIEkmIzM5O20gbm90aWNpbmcgYGFzeW5jYCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5JJiMzOTttIG5vdCBzZWVpbmcgYW55IHNwZWNpZmljIGJhY2tlbmQgYWN0dWFsbHkgKnNldCogdGhhdCBgYXN5bmNgIGZsYWcgdG8gYHRydWVgIHlldC4gVGhhdCBzZWVtcyB1bnVzdWFsLiBVc3VhbGx5LCB3aGVuIHNvbWV0aGluZyBsaWtlIHRoaXMgaXMgaW50cm9kdWNlZCwgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uLgoKUmlnaHQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpbGVzIHRoYXQsIGJ5IGNoYW5jZSwgYXJlIHNldHRpbmcgYGFzeW5jYCB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gR290dGEgYmUgdGhvcm91Z2guIE5vIHBvaW50IGluIGFzc3VtaW5nIGl0JiMzOTtzIHVuaW5pdGlhbGl6ZWQgaWYgSSBoYXZlbiYjMzk7dCBjb25maXJtZWQgdGhhdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgZ29pbmcgb24sIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmFzeW5jW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2NvbW1vbi5jPTM5MD1lbnVtIGlhdmZfc3RhdHVzIGlhdmZfYXFfc2VuZF9tc2dfdG9fcGYoc3RydWN0IGlhdmZfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9jb21tb24uYy00MTItXHRcdG1lbXNldChcdTAwMjZkZXRhaWxzLCAwLCBzaXplb2YoZGV0YWlscykpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2NvbW1vbi5jOjQxMzpcdFx0ZGV0YWlscy5hc3luYyA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmMtNDE0LVx0XHRjbWRfZGV0YWlscyA9IFx1MDAyNmRldGFpbHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9NDQxNj1pbnQgaWRwZl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM3LVx0Lyogc2V0dGluZyBwcm9taXNjdW91cyBpcyBvbmx5IGV2ZXIgZG9uZSBhc3luY2hyb25vdXNseSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6NDQzODpcdHhuX3BhcmFtcy5hc3luYyA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM5LVx0cmVwbHlfc3ogPSBpZHBmX3ZjX3huX2V4ZWMoYWRhcHRlciwgXHUwMDI2eG5fcGFyYW1zKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmM9NjIwPWludCBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmMtNjI2LVx0XHQudGltZW91dF9tcyA9IElEUEZfVkNfWE5fREVGQVVMVF9USU1FT1VUX01TRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmxfcHRwLmM6NjI3Olx0XHQuYXN5bmMgPSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jLTYyOC1cdFx0LmFzeW5jX2hhbmRsZXIgPSBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wX2FzeW5jX2hhbmRsZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlpyYW0gYW5kIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyBJJiMzOTttIGp1c3QgbG9va2luZyBhdCB0aGUgenJhbSBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBub25lIG9mIHRoZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLiBJbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSB0aGF0IGFzIHN0YW5kYXJkIHByYWN0aWNlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGFzeW5jaHJvbm91cyBJL08gd2l0aCBjb21wcmVzc2VkIG1lbW9yeS4KCkhtbSwgd2FpdCBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBgYXN5bmNgIGlzIGJlaW5nIHNldCAqZHluYW1pY2FsbHkqIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGNvZGUuIE1heWJlIGl0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgYmFzZWQgb24gc29tZSBvdGhlciBwYXJhbWV0ZXIgb3IgY29uZGl0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbj8gSXQmIzM5O3MgZWFzeSB0byBtaXNzIHRoZXNlIGtpbmRzIG9mIGRldGFpbHMgaWYgeW91JiMzOTtyZSBub3QgcGF5aW5nIGNsb3NlIGF0dGVudGlvbi4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IGB6Y29tcC5jYC4gSSYjMzk7bGwgc2NhbiB0aHJvdWdoIGl0IGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnRzIHRoYXQgaGFuZGxlIGRldmljZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY2FsbCB0byBzZXQgYGFzeW5jID0gdHJ1ZWAgZnJvbSBzb21lIG90aGVyIGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIG9idmlvdXMgaXNuJiMzOTt0IG92ZXJsb29raW5nIGEgaGlkZGVuIGNvbmZpZ3VyYXRpb24gc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTExNT1zdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQyLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5Olx0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTYwLVx0XHRtaWdodF9zbGVlcCgpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zIGluIFpyYW0qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSWYgbm8gYmFja2VuZCBleHBsaWNpdGx5IGZsYWdzIGl0cyBvcGVyYXRpb25zIGFzIGFzeW5jaHJvbm91cyBieSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLCB0aGVuLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBgY29tcC0mZ3Q7b3BzLSZndDthc3luY2AgaXMgKmFsd2F5cyogZ29pbmcgdG8gYmUgYGZhbHNlYCwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGFzc3VtcHRpb24uIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGlzIGxpbmUgb2YgdGhpbmtpbmcsIGEgbGluZ2VyaW5nIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWU6IGlzIHRoZXJlIGV2ZW4gYSBjcnlwdG8gQVBJIGJhY2tlbmQgaW52b2x2ZWQgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEhtbSwgcGVyaGFwcyBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBtaWdodCBvZmZlciBzb21lIGNsdWVzLiBJIHNob3VsZCBicm9hZGVuIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JhY2tlbmRfODQyLmMmIzM0OywKICAgICYjMzQ7YmFja2VuZF84NDIuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2RlZmxhdGUuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2RlZmxhdGUuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6NC5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0LmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sejRoYy5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHo0aGMuaCYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6by5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfbHpvLmgmIzM0OywKICAgICYjMzQ7YmFja2VuZF9sem9ybGUuYyYjMzQ7LAogICAgJiMzNDtiYWNrZW5kX2x6b3JsZS5oJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfenN0ZC5jJiMzNDssCiAgICAmIzM0O2JhY2tlbmRfenN0ZC5oJiMzNDssCiAgICAmIzM0O3pjb21wLmMmIzM0OywKICAgICYjMzQ7emNvbXAuaCYjMzQ7LAogICAgJiMzNDt6cmFtX2Rydi5jJiMzNDssCiAgICAmIzM0O3pyYW1fZHJ2LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpjb21wIFN0cmVhbSBMb2NraW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gc3BvdHRpbmcgdGhlc2UgYGJhY2tlbmRfKi5jYCBmaWxlcyBhbmQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYGFzeW5jYCBmbGFnLCBidXQgSSYjMzk7bSBub3QgZmluZGluZyBpdCBiZWluZyBzZXQgd2l0aGluIHRoZW0uIFRoaXMgZmVlbHMgaW1wb3J0YW50LiBOb3csIGlmIGBhc3luY2AgaXMgKmZhbHNlKiwgdGhlbiBgIWNvbXAtJmd0O29wcy0mZ3Q7YXN5bmNgIHdpbGwgYmUgKnRydWUqLiBBbmQgYXNzdW1pbmcgYENPTkZJR19QUkVFTVBUX1JUYCBpcyAqbm90KiBlbmFibGVkLCB0aGVuIHRoZSBjb25kaXRpb25hbCBgaWYgKCFjb21wLSZndDtvcHMtJmd0O2FzeW5jICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKWAgd2lsbCBldmFsdWF0ZSB0byAqdHJ1ZSosIGFuZCBgcHJlZW1wdF9kaXNhYmxlKClgIHdpbGwgYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNhbGwuCgpJIHNob3VsZCBnbyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCB3YXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoIHdhcyBpbnRyb2R1Y2VkLiBXaGF0IGRpZCBgemNvbXBfc3RyZWFtX2dldGAgZG8gcHJldmlvdXNseT8gSSBzaG91bGQgbG9vayBhdCB0aGUgZGlmZi4gT2theSwgSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgaW5jbHVkZXMgYHByZWVtcHRfZGlzYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIGBwcmVlbXB0X2VuYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX3B1dGAuCgpXYWl0LCB0aGUgb3JpZ2luYWwgYHpjb21wX3N0cmVhbV9nZXRgICpkaWRuJiMzOTt0KiBpbmNsdWRlIHRoYXQgYHByZWVtcHRfZGlzYWJsZSgpYCBjYWxsLiBUaGlzIGxvb2tzIHNpZ25pZmljYW50LiBPa2F5LCBidXQgSSByZW1lbWJlciBub3c7IGB6Y29tcF9zdHJlYW1fZ2V0YCBpcyBhIHBlci1DUFUgc3RyZWFtIGdldHRlci4gTm93IEkmIzM5O20gZ29pbmcgdG8gcmUtcmVhZCB3aGF0IGB6Y29tcF9zdHJlYW1fZ2V0YCBkb2VzIGluIG9yZGVyIHRvIGJlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcbiAxMTE6XHRcdGF0ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgYXQsIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTEyOlx0XHRyZXR1cm4gYXQ7XG4gMTEzOlx0fVxuIDExNDpcdFxuIDExNTpcdHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcbiAxMTY6XHR7XG4gMTE3Olx0XHRmb3IgKDs7KSB7XG4gMTE4Olx0XHRcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtXHUwMDNlc3RyZWFtKTtcbiAxMTk6XHRcbiAxMjA6XHRcdFx0LypcbiAxMjE6XHRcdFx0ICogSW5zcGlyZWQgYnkgenN3YXBcbiAxMjI6XHRcdFx0ICpcbiAxMjM6XHRcdFx0ICogc3RyZWFtIGlzIHJldHVybmVkIHdpdGggLVx1MDAzZW11dGV4IGxvY2tlZCB3aGljaCBwcmV2ZW50c1xuIDEyNDpcdFx0XHQgKiBjcHVfZGVhZCgpIGZyb20gcmVsZWFzaW5nIHRoaXMgc3RyZWFtIHVuZGVyIHVzLCBob3dldmVyXG4gMTI1Olx0XHRcdCAqIHRoZXJlIGlzIHN0aWxsIGEgcmFjZSB3aW5kb3cgYmV0d2VlbiByYXdfY3B1X3B0cigpIGFuZFxuIDEyNjpcdFx0XHQgKiBtdXRleF9sb2NrKCksIGR1cmluZyB3aGljaCB3ZSBjb3VsZCBoYXZlIGJlZW4gbWlncmF0ZWRcbiAxMjc6XHRcdFx0ICogZnJvbSBhIENQVSB0aGF0IGhhcyBhbHJlYWR5IGRlc3Ryb3llZCBpdHMgc3RyZWFtLiAgSWZcbiAxMjg6XHRcdFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXG4gMTI5Olx0XHRcdCAqL1xuIDEzMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuIDEzMTpcdFx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gMTMyOlx0XHRcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gMTMzOlx0XHRcdGlmIChsaWtlbHkoenN0cm0tXHUwMDNlYnVmZmVyKSlcbiAxMzQ6XHRcdFx0XHRyZXR1cm4genN0cm07XG4gMTM1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcbiAxMzY6XHRcdH1cbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbiAxNDA6XHR7XG4gMTQxOlx0XHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gMTQ0Olx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gMTQ1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gMTQ2Olx0fVxuIDE0NzpcdFxuIDE0ODpcdGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiAxNDk6XHRcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzMzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFpSQU0gU3RyZWFtIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHpjb21wX3N0cmVhbV9nZXRgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIEkgcmVtZW1iZXIgaXQgdXNlZCB0byByZXR1cm4gYHpzdHJtYCB3aXRoIGBtdXRleF9sb2NrKCZhbXA7enN0cm0tJmd0O2xvY2spYCBoZWxkLiBUaGUga2V5IHBvaW50IGlzOiBkaWQgaXQgZGlzYWJsZSBwcmVlbXB0aW9uICpiZWZvcmUqIGdyYWJiaW5nIHRoYXQgbXV0ZXg/IElmIGl0IGRpZG4mIzM5O3QsIHdlIG1pZ2h0IGhhdmUgYSBzZXJpb3VzIHByb2JsZW0uIE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgcmFjZSBjb25kaXRpb24uCgpJZiBwcmVlbXB0aW9uIHdhc24mIzM5O3QgZGlzYWJsZWQsIHRoZW4gY2FsbHMgbGlrZSBga21hcF9sb2NhbF9wYWdlYCBvciwgZXZlbiB3b3JzZSwgYGttYXBfYXRvbWljYCBjb3VsZCBoYXZlIGJlZW4gdXNlZCB3aXRoaW4gdGhhdCBjcml0aWNhbCBzZWN0aW9uLCByaWdodD8gVGhhdCB3b3VsZCBiZSBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIgaWYgYSBjb250ZXh0IHN3aXRjaCBoYXBwZW5lZCBhdCB0aGUgd3JvbmcgbW9tZW50LiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHByZWVtcHRpb24gd2FzIGhhbmRsZWQgY29ycmVjdGx5LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSB0aGF0IGhhdW50cyBtZS4KCkxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgenJhbV93cml0ZV9wYWdlYCBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIHNlZSBob3cgaXQgdXNlcyBhbnkgb2YgdGhpcyBzdHVmZiwgd2hpY2ggaXMgd2hlcmUgSSB0aGluayB0aGVyZSBjb3VsZCBiZSBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODI6XHRzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbjIyODM6XHR7XG4yMjg0Olx0XHRpbnQgcmV0ID0gMDtcbjIyODU6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMjI4NjpcdFx0dW5zaWduZWQgaW50IGNvbXBfbGVuO1xuMjI4NzpcdFx0dm9pZCAqbWVtO1xuMjI4ODpcdFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuMjI4OTpcdFx0dW5zaWduZWQgbG9uZyBlbGVtZW50O1xuMjI5MDpcdFx0Ym9vbCBzYW1lX2ZpbGxlZDtcbjIyOTE6XHRcdGJvb2wgYXN5bmM7XG4yMjkyOlx0XG4yMjkzOlx0XHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4yMjk0Olx0XHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcdTAwMjZlbGVtZW50KTtcbjIyOTU6XHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuMjI5NjpcdFx0aWYgKHNhbWVfZmlsbGVkKVxuMjI5NzpcdFx0XHRyZXR1cm4gd3JpdGVfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBlbGVtZW50LCBpbmRleCk7XG4yMjk4Olx0XG4yMjk5Olx0XHRhc3luYyA9IHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbjIzMDA6XHRcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzAxOlx0XHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4yMzAyOlx0XHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sXG4yMzAzOlx0XHRcdFx0ICAgICBtZW0sIFx1MDAyNmNvbXBfbGVuKTtcbjIzMDQ6XHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuMjMwNTpcdFxuMjMwNjpcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbjIzMDc6XHRcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzA4Olx0XHRcdHByX2VycihcJiMzNDtDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxcblwmIzM0OywgcmV0KTtcbjIzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjIzMTA6XHRcdH1cbjIzMTE6XHRcbjIzMTI6XHRcdGlmIChjb21wX2xlbiBcdTAwM2U9IGh1Z2VfY2xhc3Nfc2l6ZSkge1xuMjMxMzpcdFx0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbjIzMTQ6XHRcdFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTtcbjIzMTU6XHRcdH1cbjIzMTY6XHRcbjIzMTc6XHRcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xuMjMxODpcdFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4yMzE5Olx0XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuMjMyMDpcdFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XG4yMzIxOlx0XHR9XG4yMzIyOlx0XG4yMzIzOlx0XHRpZiAoIXpyYW1fY2FuX3N0b3JlX3BhZ2UoenJhbSkpIHtcbjIzMjQ6XHRcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4yMzI1Olx0XHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbjIzMjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMzI3Olx0XHR9XG4yMzI4Olx0XG4yMzI5Olx0XHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbjIzMzA6XHRcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuMjMzMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU2NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgWlJBTSBTdHJlYW0gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBoaXQgYSBwb2ludCB3aGVyZSBgenJhbV96c19tYWxsb2NgIGlzIGJlaW5nIGludm9rZWQgd2hpbGUgYSBzdHJlYW0gaXMgaGVsZC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjYWxsIGFuZCBpdHMgaW1wbGljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYHpyYW1fenNfbWFsbG9jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWxsb2NhdGlvbiBpcyBmb3IsIGFuZCB3aHkgaXQmIzM5O3MgcG90ZW50aWFsbHkgYmxvY2tpbmcgd2hpbGUgaG9sZGluZyBhIHN0cmVhbSBsb2NrLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciwgd29yc2UsIGEgc291cmNlIG9mIGRlYWRsb2NrLCBnaXZlbiB0aGUgY29udGV4dC4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyBleGFjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjE4Olx0XHRyZXR1cm4gMDtcbjIyMTk6XHR9XG4yMjIwOlx0XG4yMjIxOlx0LypcbjIyMjI6XHQgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcbjIyMjM6XHQgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxuMjIyNDpcdCAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cbjIyMjU6XHQgKi9cbjIyMjY6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxuMjIyNzpcdFx0XHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxuMjIyODpcdHtcbjIyMjk6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMjIzMDpcdFxuMjIzMTpcdFx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG4yMjMyOlx0XHRcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcbjIyMzM6XHRcdFx0XHRcdF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHwgX19HRlBfTk9XQVJOIHxcbjIyMzQ6XHRcdFx0XHRcdF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuMjIzNTpcdFx0XHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxuMjIzNjpcdFx0XHRcdHJldHVybiBoYW5kbGU7XG4yMjM3Olx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4yMjM4Olx0XHR9XG4yMjM5Olx0XG4yMjQwOlx0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4yMjQxOlx0XHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuMjI0MjpcdFx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xuMjI0MzpcdFx0aWYgKCFhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuMjI0NDpcdFx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbjIyNDU6XHRcdHJldHVybiBoYW5kbGU7XG4yMjQ2Olx0fVxuMjI0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyB0aGUgUHJlLVBhdGNoIEJlaGF2aW9yIG9mIGB6Y29tcF9zdHJlYW1fZ2V0YCoqCgpIbW0sIHRoaXMgcGF0Y2ggYnJpbmdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBtaW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGJlZm9yZSB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiBvZiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIHRyYWNlIGl0cyBleGVjdXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIGh1bmNoIG9yIHJldmVhbCB0aGUgYWN0dWFsIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGRldGFpbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz05OD1zc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMTU6c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcmVlbXB0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkaWZmIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgSSBjYW4ganVzdCByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UhJiMzNDsgUmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBwcmVlbXB0X2Rpc2FibGUoKWAgaW4gYHpjb21wX3N0cmVhbV9nZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHdhcyBpbnRyb2R1Y2VkLgoKRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgcmF3X2NwdV9wdHJgIGRvZXNuJiMzOTt0IGRpc2FibGUgcHJlZW1wdGlvbiBieSBpdHNlbGY7IGl0JiMzOTtzIGp1c3QgZ3JhYmJpbmcgdGhlIHBlci1DUFUgcG9pbnRlci4gU28sIHdoYXQgd2FzIHRoZSBzdGF0ZSBiZWZvcmU/IElmIHByZWVtcHRpb24gd2FzbiYjMzk7dCBkaXNhYmxlZCBwcmV2aW91c2x5LCBhbmQgKm5vdyogaXQgaXMsIHNvbWV0aGluZyBjaGFuZ2VkIHNpZ25pZmljYW50bHkgaW4gdGhlIGNvZGUgcGF0aC4KClRoaW5raW5nIGJhY2ssIGJlZm9yZSB0aGlzIHBhdGNoLCBJJiMzOTttIHByZXR0eSBzdXJlIGB6cmFtX3pzX21hbGxvY2Agd2FzIGNhbGxlZCB3aXRoIGZsYWdzIGxpa2UgYEdGUF9OT0lPYC4gVGhpcyBpcyBrZXkuIFRoZSBjb2RlIHBhdGggdGhhdCBjYWxscyBgenNfbWFsbG9jYCBpcyB3aGF0IEkgaGF2ZSB0byBsb29rIGF0LiBTaW5jZSBgemNvbXBfc3RyZWFtX2dldGAgY291bGQgbm93IGJlIGRpc2FibGluZyBwcmVlbXB0aW9uLCBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyBwcm90ZWN0aW9uIHdhcyBhZGRlZC4KCk5vdyBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBpbiBvbGRlciBrZXJuZWxzLCBidXQgbWF5YmUgaXQgZ290IGNoYW5nZWQgYXQgc29tZSBwb2ludD8gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCBhbmQgc2VlIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMgcmVsYXRlZCB0byBgemNvbXBfc3RyZWFtX2dldGAgb3IgYHpyYW1fenNfbWFsbG9jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3N0cmVhbV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTk4PXNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTExNC1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjExNTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTYte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg3PXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo4OTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTAtdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTMzNj1zdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNTktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzYwOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM2MS1cdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDgyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwOTQ6XHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDk1LVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMDc9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTIxLVx0ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjMtXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk5LVx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzAwOlx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDEtXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzNT1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcxLVx0YXN5bmMgPSB6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLVx1MDAzZW9wcy1cdTAwM2Vhc3luYztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzI6XHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2ggZm9yIFBvdGVudGlhbCBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byBgemNvbXBfb3BzYCBhbmQgdHdlYWtzIGB6Y29tcF9zdHJlYW1fZ2V0YCB0byBkaXNhYmxlIHByZWVtcHRpb24gd2hlbiBgYXN5bmNgIGlzICpub3QqIHNldC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgZWl0aGVyIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGFkZHJlc3NpbmcgYSBwcmVlbXB0aW9uLXJlbGF0ZWQgYnVnLiBMb29raW5nIGRlZXBlciwgaXQgYWx0ZXJzIGB6cmFtX3pzX21hbGxvY2AmIzM5O3MgYmVoYXZpb3IsIG1ha2luZyBpdCBhdHRlbXB0IGEgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IGlmIGl0JiMzOTtzICpub3QqIGFzeW5jLgoKTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYCFhc3luY2AsIHRoZSBjb2RlIGRpc2FibGVzIHByZWVtcHRpb24sIHBlcmZvcm1zIHRoZSBjb21wcmVzc2lvbiwgYW5kIHRoZW4gYXR0ZW1wdHMgbWVtb3J5IGFsbG9jYXRpb24gdXNpbmcgYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYC4gIEhhbmcgb24uLi4gYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCBpcyAqbm90KiBhIHNsZWVwaW5nIGFsbG9jYXRpb24sIHJpZ2h0PyAgSXQgd2FrZXMgdXAga3N3YXBkLCBidXQgZG9lc24mIzM5O3Qgc2xlZXAgaXRzZWxmLiAgSWYgdGhhdCBub24tc2xlZXBpbmcgYWxsb2NhdGlvbiBmYWlscywgaXQgcmUtZW5hYmxlcyBwcmVlbXB0aW9uLCBkb2VzIGEgc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBHRlBfTk9JT2ApLCBhbmQgdGhlbiBkaXNhYmxlcyBwcmVlbXB0aW9uICphZ2FpbiouIFNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhY3R1YWxseSwgaW4gaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIHByZWVtcHRpb24gaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuCgpHaXZlbiB0aGlzIGxldmVsIG9mIGNvcmUgbG9naWMgbWFuaXB1bGF0aW9uIHdpdGhpbiBaUkFNLCB0aGlzICpkZWZpbml0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcHJlZW1wdGlvbiwgcHJpbWUgYXJlYXMgZm9yIHN1YnRsZSBidWdzIHRvIGNyZWVwIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgYmFja2VuZCBhY3R1YWxseSBzZXRzIHRoaXMgYGFzeW5jYCBmbGFnLgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBJIHNlYXJjaGVkIGZvciAmIzM0O2FzeW5jJiMzNDsgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL2AgZGlyZWN0b3J5LCBhbmQgSSBkaWRuJiMzOTt0IHNlZSBhbnkgZGlyZWN0IHNldHRpbmcgb2YgYGFzeW5jYC4gUGVyaGFwcyBpdCYjMzk7cyBzZXQgYnkgYSBjcnlwdG8gQVBJIHdyYXBwZXI/IEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY2AgdG8gYmUgc3VyZS4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjaW5jbHVkZSBcJiMzNDtiYWNrZW5kX2RlZmxhdGUuaFwmIzM0O1xuICAyMTpcdCNpbmNsdWRlIFwmIzM0O2JhY2tlbmRfODQyLmhcJiMzNDtcbiAgMjI6XHRcbiAgMjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcbiAgMjQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcbiAgMjU6XHRcdFx1MDAyNmJhY2tlbmRfbHpvcmxlLFxuICAyNjpcdFx0XHUwMDI2YmFja2VuZF9sem8sXG4gIDI3Olx0I2VuZGlmXG4gIDI4Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXG4gIDI5Olx0XHRcdTAwMjZiYWNrZW5kX2x6NCxcbiAgMzA6XHQjZW5kaWZcbiAgMzE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaNEhDKVxuICAzMjpcdFx0XHUwMDI2YmFja2VuZF9sejRoYyxcbiAgMzM6XHQjZW5kaWZcbiAgMzQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX1pTVEQpXG4gIDM1Olx0XHRcdTAwMjZiYWNrZW5kX3pzdGQsXG4gIDM2Olx0I2VuZGlmXG4gIDM3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxuICAzODpcdFx0XHUwMDI2YmFja2VuZF9kZWZsYXRlLFxuICAzOTpcdCNlbmRpZlxuICA0MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfODQyKVxuICA0MTpcdFx0XHUwMDI2YmFja2VuZF84NDIsXG4gIDQyOlx0I2VuZGlmXG4gIDQzOlx0XHROVUxMXG4gIDQ0Olx0fTtcbiAgNDU6XHRcbiAgNDY6XHRzdGF0aWMgdm9pZCB6Y29tcF9zdHJtX2ZyZWUoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXG4gIDQ3Olx0e1xuICA0ODpcdFx0Y29tcC1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV9jdHgoXHUwMDI2enN0cm0tXHUwMDNlY3R4KTtcbiAgNDk6XHRcdHZmcmVlKHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuICA1MDpcdFx0dmZyZWUoenN0cm0tXHUwMDNlYnVmZmVyKTtcbiAgNTE6XHRcdHpzdHJtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxuICA1NTpcdHtcbiAgNTY6XHRcdGludCByZXQ7XG4gIDU3Olx0XG4gIDU4Olx0XHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2VjcmVhdGVfY3R4KGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgpO1xuICA1OTpcdFx0aWYgKHJldClcbiAgNjA6XHRcdFx0cmV0dXJuIHJldDtcbiAgNjE6XHRcbiAgNjI6XHRcdHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkgPSB2emFsbG9jKFBBR0VfU0laRSk7XG4gIDYzOlx0XHQvKlxuICA2NDpcdFx0ICogYWxsb2NhdGUgMiBwYWdlcy4gMSBmb3IgY29tcHJlc3NlZCBkYXRhLCBwbHVzIDEgZXh0cmEgZm9yIHRoZVxuICA2NTpcdFx0ICogY2FzZSB3aGVuIGNvbXByZXNzZWQgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgb25lXG4gIDY2Olx0XHQgKi9cbiAgNjc6XHRcdHpzdHJtLVx1MDAzZWJ1ZmZlciA9IHZ6YWxsb2MoMiAqIFBBR0VfU0laRSk7XG4gIDY4Olx0XHRpZiAoIXpzdHJtLVx1MDAzZWJ1ZmZlciB8fCAhenN0cm0tXHUwMDNlbG9jYWxfY29weSkge1xuICA2OTpcdFx0XHR6Y29tcF9zdHJtX2ZyZWUoY29tcCwgenN0cm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXByZXNzaW9uIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFByZWVtcHRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGF0IGZpcnN0IGdsYW5jZSwgaXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gb3IgcHJlcGFyYXRpb24uIFRoZXJlIGFyZSBubyBvdGhlciBiYWNrZW5kcyBzcGVjaWZpZWQsIHdoaWNoIG1lYW5zIGBhc3luY2AgZGVmYXVsdHMgdG8gYGZhbHNlYC4gQnV0IHdhaXQsIGNvdWxkIGEgZnV0dXJlIHBhdGNoIGludHJvZHVjZSBhbiBhc3luYyBiYWNrZW5kPyBPciBpcyB0aGlzIGp1c3Qgc2V0dGluZyB0aGUgc3RhZ2U/CgpFdmVuIGlmIGl0JiMzOTtzIGFsd2F5cyBgZmFsc2VgIGN1cnJlbnRseSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2luZy4gQmVmb3JlIHRoaXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBkaWRuJiMzOTt0IGV4cGxpY2l0bHkgZGlzYWJsZSBwcmVlbXB0aW9uLiBOb3cgaXQgKmRvZXMqIGRpc2FibGUgcHJlZW1wdGlvbiBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG5vdCBlbmFibGVkISBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuCgpgYGBjCnN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCkKewoJZm9yICg7OykgewoJCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtJmd0O3N0cmVhbSk7CgoJCW11dGV4X2xvY2soJmFtcDt6c3RybS0mZ3Q7bG9jayk7CgkJaWYgKGxpa2VseSh6c3RybS0mZ3Q7YnVmZmVyKSkKCQkJcmV0dXJuIHpzdHJtOwoJCW11dGV4X3VubG9jaygmYW1wO3pzdHJtLSZndDtsb2NrKTsKCX0KfQpgYGAKCk9rYXksIHNvIGxvb2tpbmcgYXQgaXQsIGl0IHNlZW1zIGl0IGRpZG4mIzM5O3QgZGlzYWJsZSBwcmVlbXB0aW9uLiBBbmQgdGhhdCBtZWFucyBhIHRhc2sgY291bGQgYmUgcHJlZW1wdGVkIHdoaWxlIGhvbGRpbmcgYHpzdHJtLSZndDtsb2NrYCwgYnV0IGB6c3RybS0mZ3Q7bG9ja2AgaXMgYSBtdXRleCwgYW5kIG11dGV4ZXMgYXJlIHNsZWVwYWJsZS4gQnV0IHdhaXQsIGlmIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsIHlvdSAqY2Fubm90KiBzbGVlcCEgTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGB6Y29tcF9jb21wcmVzc2AgZnVuY3Rpb24gY2FsbHMgYGNvbXAtJmd0O29wcy0mZ3Q7Y29tcHJlc3NgLiBJZiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCBgY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzc2AgY2FuJiMzOTt0IHNsZWVwLgoKSSByZW1lbWJlciBgemNvbXBfY29tcHJlc3NgIHVzZWQgdG8gY2FsbCBgbWlnaHRfc2xlZXAoKWAuIExldCYjMzk7cyBsb29rIGF0IHRoZSBgemNvbXBfY29tcHJlc3NgIGRpZmYgdG8gc2VlIGlmIHRoaXMgY29uZmlybXMgd2hhdCBJIHN1c3BlY3Q6CgpgYGBkaWZmCkBAIC0xNTAsNyAmIzQzOzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIAl9OwogCWludCByZXQ7CiAKLQltaWdodF9zbGVlcCgpOwomIzQzOwlpZiAoY29tcC0mZ3Q7b3BzLSZndDthc3luYykKJiM0MzsJCW1pZ2h0X3NsZWVwKCk7CiAJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtjb21wcmVzcyhjb21wLSZndDtwYXJhbXMsICZhbXA7enN0cm0tJmd0O2N0eCwgJmFtcDtyZXEpOwogYGBgCgpBaCwgeWVzLiBCZWZvcmUgdGhpcyBwYXRjaCwgYHpjb21wX2NvbXByZXNzYCAqY291bGQqIHNsZWVwLCBhbmQgYG1pZ2h0X3NsZWVwKClgIHdhcyBjYWxsZWQuIE5vdywgaWYgYCFhc3luY2AgKHdoaWNoIGl0IGN1cnJlbnRseSBpcyksIGBtaWdodF9zbGVlcCgpYCBpcyAqbm90KiBjYWxsZWQsIGFuZCBwcmVlbXB0aW9uICppcyogZGlzYWJsZWQhIFRoYXQgbWVhbnMgY29tcHJlc3Npb24gYWxnb3JpdGhtcyAobHpvLCBsejQsIHpzdGQsIGV0Yy4pIGFyZSBub3cgZXhlY3V0ZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkISBUaGlzIGlzIGEgbWFzc2l2ZSBmdW5jdGlvbmFsIHNoaWZ0LiBJdCBjaGFuZ2VzIHRoZSBjb250ZXh0IGZyb20gcHJlZW1wdGlibGUgdG8gbm9uLXByZWVtcHRpYmxlLgoKQW5kIHRoZSBjaGFuZ2VzIHRvIGB6cmFtX3pzX21hbGxvY2AgZnVydGhlciByZWluZm9yY2UgdGhpcy4gQmVmb3JlLCBpdCB3YXMgZG9pbmcgYSBzbGVlcGFibGUgYWxsb2NhdGlvbiAoYEdGUF9OT0lPYCkgd2hpbGUgaG9sZGluZyB0aGUgc3RyZWFtLiBOb3csIGlmIGAhYXN5bmNgLCBpdCBmaXJzdCB0cmllcyBhIG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiAoYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCkuIElmIHRoYXQgZmFpbHMsIGl0IGVuYWJsZXMgcHJlZW1wdGlvbiwgZG9lcyB0aGUgc2xlZXBhYmxlIGFsbG9jYXRpb24sIGFuZCBkaXNhYmxlcyBpdCBhZ2FpbiEKClRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgc2VyaW91cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6CgoqICAgYHpyYW1fd3JpdGVfcGFnZWAKKiAgIGB6cmFtX3pzX21hbGxvY2AKKiAgIGB6Y29tcF9jb21wcmVzc2AKKiAgIGB6Y29tcF9kZWNvbXByZXNzYAoqICAgYHpjb21wX3N0cmVhbV9nZXRgCiogICBgemNvbXBfc3RyZWFtX3B1dGAKCkhvbGQgb24sIGB6cmFtX3pzX21hbGxvY2AgaXMgc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3Qgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zOgoKKiAgIGB6Y29tcF9zdHJlYW1fZ2V0YAoqICAgYHpjb21wX3N0cmVhbV9wdXRgCiogICBgemNvbXBfY29tcHJlc3NgCiogICBgemNvbXBfZGVjb21wcmVzc2AKKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB3cml0aW5nLiBUaGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBpcyBsaWtlbHkgYHpyYW1fYnZlY19yd2AsIGB6cmFtX3J3X3BhZ2VgLCBvciBgenJhbV9zdWJtaXRfYmlvYC4gTGV0JiMzOTtzIGNoZWNrIGB6cmFtX2Rydi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV93cml0ZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9OTExPXN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTkzMC1cdCAqIFdlIHJlbGVhc2Ugc2xvdCBsb2NrIGR1cmluZyB3cml0ZWJhY2sgc28gc2xvdCBjYW4gY2hhbmdlIHVuZGVyIHVzOlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTMxOlx0ICogc2xvdF9mcmVlKCkgb3Igc2xvdF9mcmVlKCkgYW5kIHpyYW1fd3JpdGVfcGFnZSgpLiBJbiBib3RoIGNhc2VzXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy05MzItXHQgKiBzbG90IGxvc2VzIFpSQU1fUFBfU0xPVCBmbGFnLiBObyBjb25jdXJyZW50IHBvc3QtcHJvY2Vzc2luZyBjYW5cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI4MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyODI6c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjgzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzQ4PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNTktXHRcdG1lbWNweV9mcm9tX2J2ZWMocGFnZV9hZGRyZXNzKHBhZ2UpICYjNDM7IG9mZnNldCwgYnZlYyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzYwOlx0XHRyZXQgPSB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2MS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY2PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcwLVx0XHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzcxOlx0cmV0dXJuIHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBidmVjLVx1MDAzZWJ2X3BhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIFdyaXRlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgd3JpdGUgcGF0aC4gSSBzZWUgYHpyYW1fYnZlY193cml0ZWAgY2FsbGluZyBgenJhbV93cml0ZV9wYWdlYC4gTmF0dXJhbGx5LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBpcyBgenJhbV9idmVjX3dyaXRlYCBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgbW9zdCBsaWtlbHkgaXMuIEl0JiMzOTtzIGEga2VybmVsIGludGVybmFsIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGEgZmFpciBhc3N1bXB0aW9uLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uLi4uIHdoYXQgaXMgdGhlIGJpbyBzdWJtaXNzaW9uIGZ1bmN0aW9uIGluIHVzZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgdWx0aW1hdGVseSBtYWtlcyBpdHMgd2F5IHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2Ugb3IsIGluIHRoZSBjYXNlIG9mIFpSQU0sIGhvdyBpdCYjMzk7cyBjb21wcmVzc2VkIGFuZCBoYW5kbGVkIGluIG1lbW9yeS4gVW5kZXJzdGFuZGluZyB0aGUgYmlvIHN1Ym1pc3Npb24gaXMgY3JpdGljYWwgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiBpdCYjMzk7cyB0aGUgY2FzZSwgdGhhdCB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgYSBtZW1vcnkgZGV2aWNlIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBhIGNvbnZlbnRpb25hbCBkaXNrLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9idmVjX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjI4Mj1zdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzQ3LSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM0ODpzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNDktXHRcdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2NS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjY6c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2Ny1cdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2OS1cdGlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MDpcdFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS1cdHJldHVybiB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgYnZlYy1cdTAwM2Vidl9wYWdlLCBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjc0Mz1zdGF0aWMgdm9pZCB6cmFtX2Jpb193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NTUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzU2Olx0XHRpZiAoenJhbV9idmVjX3dyaXRlKHpyYW0sIFx1MDAyNmJ2LCBpbmRleCwgb2Zmc2V0KSBcdTAwM2MgMCkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc1Ny1cdFx0XHRhdG9taWM2NF9pbmMoXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5mYWlsZWRfd3JpdGVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKlRoZSBXcml0ZSBGbG93IFdpdGhpbiB6cmFtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgd3JpdGUgcGF0aCB3aXRoaW4genJhbS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgenJhbV9iaW9fd3JpdGVgIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIGRhdGEgZ2V0cyB3cml0dGVuIChvciwgd2VsbCwgKnByZXBhcmVkKiBmb3Igd3JpdGluZywgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHVuZGVybHlpbmcgY29tcHJlc3Npb24gYW5kIGJhY2tpbmcgc3RvcmUpLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBnZXQgY2FsbGVkIGZyb20/IEFoLCB5ZXMg4oCTIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmlvIHJlcXVlc3RzIGRlc3RpbmVkIGZvciB0aGUgenJhbSBkZXZpY2UuIFNvLCB0aGUgc3VibWlzc2lvbiBmdW5jdGlvbiBpcyB3aGF0IG9yY2hlc3RyYXRlcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGJpbyBhbmQsIHVsdGltYXRlbHksIGNhbGxzIGB6cmFtX2Jpb193cml0ZWAgdG8gZGVhbCB3aXRoIHRoZSB3cml0aW5nLiBJIHdvdWxkIHRoZW4gY2hlY2sgdG8gZW5zdXJlIHRoYXQgYWxsIGJpbyByZXF1ZXN0cyBhcmUgYmVpbmcgY29ycmVjdGx5IHN1Ym1pdHRlZCB0aHJvdWdoIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGlzIGFsbG93cyBtZSB0byBrbm93IHRoYXQgZXZlcnkgd3JpdGUgcGF0aCBmbG93cyB0aHJvdWdoIHRoaXMgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBmb3JtIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYmlvJiMzOTtzIHdyaXRlIHBhdGggZ29lcyB0aHJvdWdoIGB6cmFtX2Jpb193cml0ZWAsIHdoaWNoIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IGhhcHBlbnMgd2l0aGluIGB6cmFtX2Jpb193cml0ZWAg4oCTIGNvbXByZXNzaW9uLCBhbGxvY2F0aW9uLCB0aGUgYWN0dWFsIEkvTyB0byB0aGUgYmFja2luZyBkZXZpY2UsIGV0Yy4gQnV0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludCBmb3IgbXkgbWVudGFsIG1hcCBvZiB6cmFtJiMzOTtzIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fYmlvX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjcxMj1zdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc0Mi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NDM6c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NDQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NzY9c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzg0LVx0Y2FzZSBSRVFfT1BfV1JJVEU6XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzg1Olx0XHR6cmFtX2Jpb193cml0ZSh6cmFtLCBiaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzA1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBmbG93IGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipaUkFNIENvbXByZXNzaW9uIEVudHJ5IFBvaW50IGFuZCBEYXRhIEhhbmRsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgd2l0aGluIFpSQU0gaXMgYHpyYW1fc3VibWl0X2Jpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHdvdWxkIGJlIHRoZSBwb2ludCB3aGVyZSBJJiMzOTtkIGV4cGVjdCBibG9jayBJL08gcmVxdWVzdHMgdG8gYmUgaGFuZGxlZCBhbmQgZnVubmVsZWQgaW50byB0aGUgWlJBTSBsYXllciBmb3IgcHJvY2Vzc2luZy4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIG5vdGluZyB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGlzIGhlYXZpbHkgZGVwZW5kZW50IG9uIHRoZSB6bGliIGxpYnJhcnkgd2l0aCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBzcGVjaWZpY2FsbHkgYWxsb2NhdGVzIG1lbW9yeSB0aHJvdWdoIGB6cmFtX3pzX21hbGxvY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWN0dWFsIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gb2YgZGF0YSB3aXRoaW4gYSBzbG90LiBJJiMzOTtkIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiZWluZyB1c2VkLCBidXQgdGhlIGxpbmthZ2UgaXMgY2xlYXIuIEFuZCwgb2YgY291cnNlLCB0aGUgZmFjdCB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3JlY29tcHJlc3NgIGltcGxpZXMgdGhhdCYjMzk7cyBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgbGlrZWx5IG9yY2hlc3RyYXRpbmcgcmUtY29tcHJlc3Npb24gb2YgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGFzIHRoZSByb290IGZ1bmN0aW9uIGZvciB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM5MD1zdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl9yZWNvbXByZXNzKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSwgdTMyIHByaW8sXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQzNC0gKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0MzU6c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDM2LVx0XHRcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjUzMD1zdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjY1MjpcdFx0ZXJyID0gcmVjb21wcmVzc19zbG90KHpyYW0sIHBwcy1cdTAwM2VpbmRleCwgcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI2NTMtXHRcdFx0XHQgICAgICBcdTAwMjZudW1fcmVjb21wX3BhZ2VzLCB0aHJlc2hvbGQsIHByaW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29tcHJlc3Npb24gSW50ZXJmYWNlKioKClJpZ2h0LCBzbyBgcmVjb21wcmVzc19zdG9yZWAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHRoZSBzeXNmcyBpbnRlcmFjdGlvbiwgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9uczogYHpjb21wX2NvbXByZXNzYCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlICpub3QqIHN0YXRpYywgb3IsIGF0IGxlYXN0LCBub3QgZGVjbGFyZWQgYXMgc3VjaCwgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhleSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBvciBpZiB0aGV5JiMzOTtyZSBoaWRkZW4gc29tZWhvdy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlPyBBIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2wgdGFibGUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gVGhlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIGFyZSBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFpSQU0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgWlJBTSBjb2RlLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgdGFyZ2V0czogYHpyYW1fc3VibWl0X2Jpb2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYHpjb21wX2NvbXByZXNzYCwgYHpjb21wX2RlY29tcHJlc3NgLCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBgemNvbXBfc3RyZWFtX3B1dGAuIFRoZXkgYXJlbiYjMzk7dCBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKV2FpdCBhIHNlY29uZCwgYHpyYW1fc3VibWl0X2Jpb2AgaXMganVzdCB0aGUgc3RhbmRhcmQgYmxvY2sgZGV2aWNlIGJpbyBzdWJtaXNzaW9uIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBvcGVyYXRpb24uIERpcmVjdGx5IGZ1enppbmcgdGhhdCBvbmUgbWlnaHQgYmUgdHJpY2t5IGlmIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIGNhbiBmdXp6IGJsb2NrIGRldmljZXMgcHJldHR5IGVmZmVjdGl2ZWx5IHRocm91Z2ggYC9kZXYvenJhbVhgLiBJdCBpbnRlcmFjdHMgd2l0aCBibG9jayBkZXZpY2VzIHZpYSBvcGVuaW5nIGAvZGV2L3pyYW1YYCBhbmQgcGVyZm9ybWluZyByZWFkL3dyaXRlL2lvY3RsIG9wZXJhdGlvbnMuIEl0IGFsc28gaGl0cyB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuCgpTbywgcmVhbGlzdGljYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgIGxvb2tzIGxpa2UgYSBnb29kLCBmb2N1c2VkIHN5bWJvbC4gIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byB0YXJnZXQuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gT2J2aW91c2x5LCBgQ09ORklHX1pSQU1gIGlzIGVzc2VudGlhbC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGludm9sdmVkPyBBaCwgSSBzZWUgYSByZWZlcmVuY2UgdG8gYElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYC4gSWYgYENPTkZJR19QUkVFTVBUX1JUYCBpcyBlbmFibGVkLCBwcmVlbXB0aW9uIGlzbiYjMzk7dCBkaXNhYmxlZC4gU28sIGlmIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGUgbmV3IHByZWVtcHRpb24tZGlzYWJsZWQgY29kZSBwYXRoLCBJICpzaG91bGRuJiMzOTt0KiBlbmFibGUgYENPTkZJR19QUkVFTVBUX1JUYC4gSSB3b24mIzM5O3QgbmVlZCB0byBhZGQgYFBSRUVNUFRfUlRgIHRvIGBFbmFibGVDb25maWdzYC4KCldoYXQgYWJvdXQgb3B0aW9ucyBmb3IgY29tcHJlc3Npb24gYmFja2VuZHMsIGxpa2UgYENPTkZJR19aUkFNX0JBQ0tFTkRfTFpPYD8gTm8sIHdhaXQsIGBDT05GSUdfWlJBTWAgaXMgZW5vdWdoLCBzaW5jZSBpdCBzZWxlY3RzIGF0IGxlYXN0IG9uZSBiYWNrZW5kLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUsIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuICAyMTpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjY6XHRcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuICAyNzpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG4gIDMwOlx0XHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBaUkFNXG4gIDMyOlx0XHRzZWxlY3QgWlNURF9DT01QUkVTU1xuICAzMzpcdFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuICAzNjpcdFx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAzODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICAzOTpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG4gIDQyOlx0XHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDQ6XHRcdHNlbGVjdCA4NDJfQ09NUFJFU1NcbiAgNDU6XHRcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDk6XHRcdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuICA1MDpcdFx0XHQhWlJBTV9CQUNLRU5EX1pTVEQgXHUwMDI2XHUwMDI2ICFaUkFNX0JBQ0tFTkRfREVGTEFURSBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBQYXRjaCBSZXZpZXcgLSBTaWduaWZpY2FudCBGdW5jdGlvbmFsIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFpSQU1gIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYWRkIGBaUkFNYCB0byBgRW5hYmxlQ29uZmlnc2AsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGp1c3RpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHByZWVtcHRpb24gYmVoYXZpb3Igd2l0aGluIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseToKCiogICBgemNvbXBfc3RyZWFtX2dldGAgbm93IGRpc2FibGVzIHByZWVtcHRpb24gaWYgaXQmIzM5O3Mgbm90IGFzeW5jaHJvbm91cyBhbmQgUlQgaXMgKm5vdCogZW5hYmxlZC4KKiAgIGB6Y29tcF9zdHJlYW1fcHV0YCAqZW5hYmxlcyogcHJlZW1wdGlvbi4KKiAgIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBub3cgY29uZGl0aW9uYWxseSBjYWxsIGBtaWdodF9zbGVlcCgpYCBiYXNlZCBvbiB0aGUgYGFzeW5jYCBmbGFnLgoqICAgYHpyYW1fenNfbWFsbG9jYCBhdHRlbXB0cyBhIG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiAoYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCkgZmlyc3QgaWYgbm90IGFzeW5jIGFuZCBubyBSVC4KKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGFuZCBgcmVjb21wcmVzc19zbG90YCBub3cgcGFzcyBgYXN5bmNgIGRvd24gdG8gYHpyYW1fenNfbWFsbG9jYCBhbmQgYHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2VgLgoKVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBgenJhbWAgaGFuZGxlcyBtZW1vcnkgYW5kIHByZWVtcHRpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgY29uc2Npb3VzIGVmZm9ydCB0byBiYWxhbmNlIHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LCBlc3BlY2lhbGx5IGluIFJUIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBpdCB3YW50cyB0byBhdm9pZCBzbGVlcGluZyBpbiBub24tYXN5bmMgbW9kZS4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gLiBJIGtub3cgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0IHByb2JhYmx5IGNhbGxzIGludG8gdGhvc2Ugb3RoZXIgZnVuY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fc3VibWl0X2JpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NDM9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc1LSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc3NjpzdGF0aWMgdm9pZCB6cmFtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc3Ny17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2Mi1cdC5vcGVuID0genJhbV9vcGVuLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk2MzpcdC5zdWJtaXRfYmlvID0genJhbV9zdWJtaXRfYmlvLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2NC1cdC5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSB6cmFtX3Nsb3RfZnJlZV9ub3RpZnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIEhvb2tpbmcgUG9pbnRzIGluIFpSQU0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGhvb2sgaW50byB0aGUgWlJBTSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHJvdXRpbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGB6cmFtX3N1Ym1pdF9iaW9gLCB3aGljaCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHByb2JsZW07IGl0IG1lYW5zIHN5emthbGxlciBsaWtlbHkgY2FuJiMzOTt0IGhvb2sgaXQgZGlyZWN0bHkgYnkgbmFtZS4gSSB3YXMgY29uc2lkZXJpbmcgaWYgaXQgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHdhaXQsIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIGNhc2U7IGl0IHNob3VsZCBiZSBhZGRyZXNzYWJsZS4KClRoZW4gSSBzaGlmdGVkIG15IGZvY3VzIHRvIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYC4gVGhleSYjMzk7cmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgZXhwb3J0ZWQsIG1ha2luZyB0aGVtIGhvb2thYmxlLiBJIHRob3VnaHQsICYjMzQ7R3JlYXQsIHRob3NlIGNvdWxkIGJlIGVhc2llciB0YXJnZXRzISYjMzQ7IEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhleSByZWFsbHkgZXhwb3J0ZWQ/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyB1c2FnZS4gKkhtbSouIE9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIEkgd2FzIHdyb25nLCBgRVhQT1JUX1NZTUJPTGAgaXMgbm90IHVzZWQuIFRoZXkgYXJlIG5vdCBleHBvcnRlZCwgZGVzcGl0ZSBiZWluZyBub24tc3RhdGljLCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBvbiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgaXMgbm90IHByb21pc2luZy4KCkxldCYjMzk7cyByZWZvY3VzIG9uIHRoZSBpbXBvcnRhbnQgdmFyaWFibGUgYW5kIGNoZWNrIHRoYXQgdGhlIHN0YXRpYyBrZXl3b3JkIGlzIG5vdCBhcHBsaWVkIHRvIGB6Y29tcF9jb21wcmVzc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ3LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQ4OmludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0OS1cdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODI1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipGb2N1cyBTeW1ib2wgQ29uZmlybWF0aW9uICZhbXA7IFJlY29tcHJlc3MgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBjb25maXJtZWQuIGB6Y29tcF9jb21wcmVzc2AsIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIOKAkyB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZCwgYW5kIGl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoYXQgY29uZmlybWVkIGV4cGxpY2l0bHkuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaW4gdGhpcyBhcmVhLiBXaXRoIHRoZXNlIGNvbmZpcm1lZCBhcyBteSBmb2N1cywgSSBjYW4gbm93IG1vdmUgZm9yd2FyZCwgSSB3YXMgYWxyZWFkeSBleHBlY3RpbmcgdGhlbSB0byBiZSBkZWZpbmVkIGluIGEgbm9uLXN0YXRpYyB3YXkuIAoKTmV4dCB1cCwgSSYjMzk7bGwgZGlyZWN0IG15IGF0dGVudGlvbiB0byBgcmVjb21wcmVzc19zdG9yZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjUyOS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MzA6c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTMxLVx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjI5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGlzIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaG9zZSBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBBcmUgdGhlcmUgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZT8gTGV0JiMzOTtzIHNlZS4uLiBgenJhbV96c19tYWxsb2NgIGlzIHN0YXRpYywgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHJlY29tcHJlc3Nfc2xvdGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IHRoZSBmb3VyIEkgbGlzdGVkLgoKU28sIEkmIzM5O3ZlIGdvdCBhIGdvb2QgbGlzdDogYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBwYXRjaCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgaGF2ZSBicm9hZGVyIHZpc2liaWxpdHkgYW5kIG1vcmUgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4KClRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSBmdW5kYW1lbnRhbCBwcmVlbXB0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciB3aXRoaW4gdGhlIHpyYW0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZGlzYWJsaW5nIHByZWVtcHRpb24gYW5kIGF2b2lkaW5nIHNsZWVwIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyByZWxhdGVkIHRvIGFuIGBhc3luY2AgZmxhZywgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBuYXN0eSBidWdzLiBJbWFnaW5lIHNsZWVwaW5nIHdoaWxlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQhIE9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgSSYjMzk7bSBvbiBoaWdoIGFsZXJ0LiBZZXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBpcyBkZWZpbmVkIGluIGB6Y29tcC5jYCBhbmQgZGVjbGFyZWQgaW4gYHpjb21wLmhgLCBqdXN0IGFzIGV4cGVjdGVkLiBUaGUgc2FtZSBmb3IgdGhlIG90aGVyIHRocmVlLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY3J1Y2lhbCBjb2RlLgoKVGhlIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaXMgYFpSQU1gLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBhc3luY2AgZmxhZyBmb3IgenJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcywgYW5kIHNpZ25pZmljYW50bHkgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF0dGVtcHQgbm9uLXNsZWVwYWJsZSBtZW1vcnkgYWxsb2NhdGlvbi4gQW55IGNoYW5nZXMgdGhhdCBhZmZlY3QgcHJlZW1wdGlvbiBjb250ZXh0IG9yIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGNhbiBpbnRyb2R1Y2UgY3JpdGljYWwgYnVncy4gVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt6Y29tcF9zdHJlYW1fcHV0JiMzNDssCiAgICAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt6Y29tcF9zdHJlYW1fcHV0JiMzNDssCiAgICAmIzM0O3pjb21wX2NvbXByZXNzJiMzNDssCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTYuMzQxNDU5MDQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDcyMjI0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ6Y29tcF9zdHJlYW1fcHV0XCIsXG4gICAgXCJ6Y29tcF9jb21wcmVzc1wiLFxuICAgIFwiemNvbXBfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGFzeW5jYCBmbGFnIHRvIHpyYW0gY29tcHJlc3Npb24gYmFja2VuZHMgYW5kIG1vZGlmaWVzIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXZvaWQgc2xlZXBpbmcgd2hlbiBgIWFzeW5jYC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYHpyYW1fenNfbWFsbG9jYCB0byB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZpcnN0IHdoZW4gcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gbG9naWMsIGFsdGVyaW5nIHByZWVtcHRpb24gY29udGV4dHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHNsZWVwaW5nIHdoaWxlIGF0b21pYyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTYuMzQxNDYzNjM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTAwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVmYTNiZTVlMTMxNDk5NjYwNzY2MTYyNzk3MmVjMmQ4NWUzZmQ5ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAxOjQ3OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG5pbmRleCA5NzRjNDY5MTg4N2U2Li5kZDRkYjRhOGFmNzM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG5AQCAtMTI4LDE0ICsxMjgsMjAgQEAgc3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbiBcXHRcXHQgKiBzbyB0aGVuIHVubG9jayBhbmQgcmUtdHJ5IG9uIHRoZSBjdXJyZW50IENQVS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIFxcdFxcdGlmIChsaWtlbHkoenN0cm0tXFx1MDAzZWJ1ZmZlcikpXFxuIFxcdFxcdFxcdHJldHVybiB6c3RybTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSlcXG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4ge1xcbitcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVxcdTAwM2VzdHJlYW0pO1xcbitcXG4rXFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuQEAgLTE1MCw3ICsxNTYsOCBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuIFxcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtaWdodF9zbGVlcCgpO1xcbitcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG4rXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gXFx0cmV0ID0gY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XFxuQEAgLTE2Nyw3ICsxNzQsOCBAQCBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gXFx0XFx0LmRzdF9sZW4gPSBQQUdFX1NJWkUsXFxuIFxcdH07XFxuIFxcbi1cXHRtaWdodF9zbGVlcCgpO1xcbitcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG4rXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gXFx0cmV0dXJuIGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLjUyOTNkNjM4ZGE4ZmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xcbiBcXHR2b2lkICgqcmVsZWFzZV9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuIFxcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRib29sIGFzeW5jO1xcbiB9O1xcbiBcXG4gLyogZHluYW1pYyBwZXItZGV2aWNlIGNvbXByZXNzaW9uIGZyb250ZW5kICovXFxuQEAgLTg2LDcgKzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcXG4gXFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuLXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xcbit2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKTtcXG4gXFxuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gXFx0XFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTJiOWZiZTNlMGQxOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuQEAgLTEzNjQsNyArMTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdGlmICghcmV0KVxcbiBcXHRcXHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuIFxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTIwOTgsNyArMjA5OCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7XFxuIFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbiBcXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcXG4tXFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yMTI0LDcgKzIxMjQsNyBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRcXHRcXHRcXHR6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuIFxcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XFxuIFxcdHpzX29ial9yZWFkX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbiBcXG4gXFx0bWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpO1xcbiBcXG5AQCAtMjIxOCwyMCArMjIxOCw0MCBAQCBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxcbisgKiBzbGVlcGFibGUgYWxsb2NhdGlvbjsgZm9yIGFzeW5jIGJhY2tlbmQsIHdlIGFsd2F5cyBiZWdpblxcbisgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB6cmFtX3pzX21hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGNvbXBfbGVuLFxcbitcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbitcXG4rXFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG4rXFx0XFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG4rXFx0XFx0XFx0XFx0X19HRlBfS1NXQVBEX1JFQ0xBSU0gfCBfX0dGUF9OT1dBUk4gfFxcbitcXHRcXHRcXHRcXHRfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4rXFx0XFx0aWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0fVxcbitcXG4rXFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG4rXFx0XFx0XFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxcbitcXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4rXFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbitcXHRyZXR1cm4gaGFuZGxlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBpbmRleClcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgaW5kZXgsIGJvb2wgYXN5bmMpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHZvaWQgKnNyYztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHJlZW1wdGlibGUgY29udGV4dCBzbyB3ZSBkb24ndCBuZWVkXFxuLVxcdCAqIHRvIGRvIG9wdGltaXN0aWMgYW5kIGZhbGxiYWNrIHRvIHBlc3NpbWlzdGljIGhhbmRsZSBhbGxvY2F0aW9uLFxcbi1cXHQgKiBsaWtlIHdlIGRvIGZvciBjb21wcmVzc2libGUgcGFnZXMuXFxuLVxcdCAqL1xcbi1cXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcXG4tXFx0XFx0XFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxcbi1cXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgcGFnZV90b19uaWQocGFnZSkpO1xcbitcXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuIFxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiBcXG5AQCAtMjI2OCw2ICsyMjg4LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbGVtZW50O1xcbiBcXHRib29sIHNhbWVfZmlsbGVkO1xcbitcXHRib29sIGFzeW5jO1xcbiBcXG4gXFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcXHUwMDI2ZWxlbWVudCk7XFxuQEAgLTIyNzUsNiArMjI5Niw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRpZiAoc2FtZV9maWxsZWQpXFxuIFxcdFxcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcXG4gXFxuK1xcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbiBcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0sIHpzdHJtLFxcbkBAIC0yMjgyLDMyICsyMzA0LDMwIEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiBcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuIFxcdFxcdHByX2VycihcXFwiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChjb21wX2xlbiBcXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuLVxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG4rXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbitcXHRcXHRyZXR1cm4gd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCwgYXN5bmMpO1xcbiBcXHR9XFxuIFxcbi1cXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbi1cXHRcXHRcXHQgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XFxuLVxcdFxcdFxcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuK1xcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbiBcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIXpyYW1fY2FuX3N0b3JlX3BhZ2UoenJhbSkpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4gXFx0XFx0enNfZnJlZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdHpzX29ial93cml0ZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cXHUwMDNlYnVmZmVyLCBjb21wX2xlbik7XFxuLVxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuIFxcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbkBAIC0yNDIzLDYgKzI0NDMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X29sZDtcXG4gXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcXG4gXFx0dm9pZCAqc3JjO1xcbitcXHRib29sIGFzeW5jO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGhhbmRsZV9vbGQgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xcbkBAIC0yNDQ3LDYgKzI0NjgsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0ICovXFxuIFxcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTtcXG4gXFxuK1xcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbcHJpb10tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuIFxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0cmV0ID0gemNvbXBfY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIFxcdTAwMjZjb21wX2xlbl9uZXcpO1xcbkBAIC0yNDYyLDcgKzI0ODQsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0Km51bV9yZWNvbXBfcGFnZXMgLT0gMTtcXG4gXFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuK1xcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbkBAIC0yNDcxLDcgKzI0OTMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFxuIFxcdGlmIChjbGFzc19pbmRleF9uZXcgXFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XFxuIFxcdCAgICAodGhyZXNob2xkIFxcdTAwMjZcXHUwMDI2IGNvbXBfbGVuX25ldyBcXHUwMDNlPSB0aHJlc2hvbGQpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNlY29uZGFyeSBhbGdvcml0aG1zIGZhaWxlZCB0byByZS1jb21wcmVzcyB0aGUgcGFnZVxcbkBAIC0yNDg1LDI3ICsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgYXJlIGhvbGRpbmcgcGVyLUNQVSBzdHJlYW0gbXV0ZXggYW5kIGVudHJ5IGxvY2sgc28gYmV0dGVyXFxuLVxcdCAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2VcXG4tXFx0ICogd2Ugc3RpbGwgaGF2ZSB0aGUgb2xkIG9iamVjdCBpbiB0aGUgbWVtX3Bvb2wuXFxuLVxcdCAqXFxuLVxcdCAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdFxcbi1cXHQgKiBob2xkcyB0aGUgb3JpZ2luYWwgY29tcHJlc3NlZCBkYXRhLiBCdXQgdGhhdCB3b3VsZCByZXF1aXJlIHVzIHRvXFxuLVxcdCAqIG1vZGlmeSB6c21hbGxvYyBBUEkgdG8gcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24uIEZvciBub3csIHdlIHdpbGxcXG4tXFx0ICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi5cXG4tXFx0ICovXFxuLVxcdGhhbmRsZV9uZXcgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tXFx0XFx0XFx0ICAgICAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLFxcbi1cXHRcXHRcXHQgICAgICAgcGFnZV90b19uaWQocGFnZSkpO1xcbitcXHRoYW5kbGVfbmV3ID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW5fbmV3LCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbiBcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XFxuLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbitcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGVfbmV3KTtcXG4gXFx0fVxcbiBcXG4gXFx0enNfb2JqX3dyaXRlKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGVfbmV3LCB6c3RybS1cXHUwMDNlYnVmZmVyLCBjb21wX2xlbl9uZXcpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuIFxcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbiBcXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIGhhbmRsZV9uZXcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0Nzo1Ny41MTk4MTczNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA4OTM4NTUyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3N0cmVhbV9nZXRcIixcbiAgICBcInpjb21wX3N0cmVhbV9wdXRcIixcbiAgICBcInpjb21wX2NvbXByZXNzXCIsXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNWZhM2JlNWUxMzE0OTk2NjA3NjYxNjI3OTcyZWMyZDg1ZTNmZDllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMTo0Nzo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLmRkNGRiNGE4YWY3MzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC0xMjgsMTQgKzEyOCwyMCBAQCBzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXG4gXHRcdCAqIHNvIHRoZW4gdW5sb2NrIGFuZCByZS10cnkgb24gdGhlIGN1cnJlbnQgQ1BVLlxuIFx0XHQgKi9cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcbitcdFx0aWYgKCFjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYyBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0XHRpZiAobGlrZWx5KHpzdHJtLVx1MDAzZWJ1ZmZlcikpXG4gXHRcdFx0cmV0dXJuIHpzdHJtO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuLXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcbiB7XG4rXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSByYXdfY3B1X3B0cihjb21wLVx1MDAzZXN0cmVhbSk7XG4rXG4rXHRpZiAoIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4rXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2enN0cm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTE1MCw3ICsxNTYsOCBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gXHR9O1xuIFx0aW50IHJldDtcbiBcbi1cdG1pZ2h0X3NsZWVwKCk7XG4rXHRpZiAoY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMpXG4rXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXHRyZXQgPSBjb21wLVx1MDAzZW9wcy1cdTAwM2Vjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdCpkc3RfbGVuID0gcmVxLmRzdF9sZW47XG5AQCAtMTY3LDcgKzE3NCw4IEBAIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4gXG4tXHRtaWdodF9zbGVlcCgpO1xuK1x0aWYgKGNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jKVxuK1x0XHRtaWdodF9zbGVlcCgpO1xuIFx0cmV0dXJuIGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uNTI5M2Q2MzhkYThmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RydWN0IHpjb21wX29wcyB7XG4gXHR2b2lkICgqcmVsZWFzZV9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG4gXG4gXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0Ym9vbCBhc3luYztcbiB9O1xuIFxuIC8qIGR5bmFtaWMgcGVyLWRldmljZSBjb21wcmVzc2lvbiBmcm9udGVuZCAqL1xuQEAgLTg2LDcgKzg3LDcgQEAgc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuIFxuIHN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4rdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4gXG4gaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggY2ZhOTg4NDZhYzQ4NC4uNTJiOWZiZTNlMGQxOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTEzNjQsNyArMTM2NCw3IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRpZiAoIXJldClcbiBcdFx0Y29weV9wYWdlKHNyYywgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4gXHRrdW5tYXBfbG9jYWwoc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjA5OCw3ICsyMDk4LDcgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuIFx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTIxMjQsNyArMjEyNCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiBcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4gXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4rXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbkBAIC0yMjE4LDIwICsyMjE4LDQwIEBAIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmb3IgIWFzeW5jIGJhY2tlbmQsIHRoZW4gdHJ5XG4rICogc2xlZXBhYmxlIGFsbG9jYXRpb247IGZvciBhc3luYyBiYWNrZW5kLCB3ZSBhbHdheXMgYmVnaW5cbisgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgenJhbV96c19tYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCBjb21wX2xlbixcbitcdFx0Ym9vbCBhc3luYywgY29uc3QgaW50IG5pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbitcbitcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xuK1x0XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4rXHRcdFx0XHRfX0dGUF9LU1dBUERfUkVDTEFJTSB8IF9fR0ZQX05PV0FSTiB8XG4rXHRcdFx0XHRfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbitcdFx0aWYgKCFJU19FUlJfVkFMVUUoaGFuZGxlKSlcbitcdFx0XHRyZXR1cm4gaGFuZGxlO1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuK1x0fVxuK1xuK1x0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxuK1x0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbitcdFx0XHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcbitcdGlmICghYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4rXHRyZXR1cm4gaGFuZGxlO1xuK31cbitcbiBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0ICAgICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHByZWVtcHRpYmxlIGNvbnRleHQgc28gd2UgZG9uJ3QgbmVlZFxuLVx0ICogdG8gZG8gb3B0aW1pc3RpYyBhbmQgZmFsbGJhY2sgdG8gcGVzc2ltaXN0aWMgaGFuZGxlIGFsbG9jYXRpb24sXG4tXHQgKiBsaWtlIHdlIGRvIGZvciBjb21wcmVzc2libGUgcGFnZXMuXG4tXHQgKi9cbi1cdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBQQUdFX1NJWkUsXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4rXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiBcbkBAIC0yMjY4LDYgKzIyODgsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiBcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcbiBcdGJvb2wgc2FtZV9maWxsZWQ7XG4rXHRib29sIGFzeW5jO1xuIFxuIFx0bWVtID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0c2FtZV9maWxsZWQgPSBwYWdlX3NhbWVfZmlsbGVkKG1lbSwgXHUwMDI2ZWxlbWVudCk7XG5AQCAtMjI3NSw2ICsyMjk2LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRpZiAoc2FtZV9maWxsZWQpXG4gXHRcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcbiBcbitcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXHUwMDNlb3BzLVx1MDAzZWFzeW5jO1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbiBcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLCB6c3RybSxcbkBAIC0yMjgyLDMyICsyMzA0LDMwIEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuIFx0a3VubWFwX2xvY2FsKG1lbSk7XG4gXG4gXHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHByX2VycihcIkNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkXFxuXCIsIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoY29tcF9sZW4gXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcbi1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4tXHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4rXHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XG4gXHR9XG4gXG4tXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG4tXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLVx0XHRcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBwYWdlX3RvX25pZChwYWdlKSk7XG4rXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbiwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiBcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiBcdH1cbiBcbiBcdGlmICghenJhbV9jYW5fc3RvcmVfcGFnZSh6cmFtKSkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXHRcdHpzX2ZyZWUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR6c19vYmpfd3JpdGUoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCB6c3RybS1cdTAwM2VidWZmZXIsIGNvbXBfbGVuKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0c2xvdF9mcmVlKHpyYW0sIGluZGV4KTtcbkBAIC0yNDIzLDYgKzI0NDMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9vbGQ7XG4gXHR1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfbmV3O1xuIFx0dm9pZCAqc3JjO1xuK1x0Ym9vbCBhc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0aGFuZGxlX29sZCA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjQ0Nyw2ICsyNDY4LDcgQEAgc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKi9cbiBcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9JRExFKTtcbiBcbitcdGFzeW5jID0genJhbS1cdTAwM2Vjb21wc1twcmlvXS1cdTAwM2VvcHMtXHUwMDNlYXN5bmM7XG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4gXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRyZXQgPSB6Y29tcF9jb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBcdTAwMjZjb21wX2xlbl9uZXcpO1xuQEAgLTI0NjIsNyArMjQ4NCw3IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQqbnVtX3JlY29tcF9wYWdlcyAtPSAxO1xuIFxuIFx0aWYgKHJldCkge1xuLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbitcdFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0yNDcxLDcgKzI0OTMsNyBAQCBzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcbiBcdGlmIChjbGFzc19pbmRleF9uZXcgXHUwMDNlPSBjbGFzc19pbmRleF9vbGQgfHxcbiBcdCAgICAodGhyZXNob2xkIFx1MDAyNlx1MDAyNiBjb21wX2xlbl9uZXcgXHUwMDNlPSB0aHJlc2hvbGQpKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTZWNvbmRhcnkgYWxnb3JpdGhtcyBmYWlsZWQgdG8gcmUtY29tcHJlc3MgdGhlIHBhZ2VcbkBAIC0yNDg1LDI3ICsyNTA3LDE0IEBAIHN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBXZSBhcmUgaG9sZGluZyBwZXItQ1BVIHN0cmVhbSBtdXRleCBhbmQgZW50cnkgbG9jayBzbyBiZXR0ZXJcbi1cdCAqIGF2b2lkIGRpcmVjdCByZWNsYWltLiAgQWxsb2NhdGlvbiBlcnJvciBpcyBub3QgZmF0YWwgc2luY2Vcbi1cdCAqIHdlIHN0aWxsIGhhdmUgdGhlIG9sZCBvYmplY3QgaW4gdGhlIG1lbV9wb29sLlxuLVx0ICpcbi1cdCAqIFhYWDogdGVjaG5pY2FsbHksIHRoZSBub2RlIHdlIHJlYWxseSB3YW50IGhlcmUgaXMgdGhlIG5vZGUgdGhhdFxuLVx0ICogaG9sZHMgdGhlIG9yaWdpbmFsIGNvbXByZXNzZWQgZGF0YS4gQnV0IHRoYXQgd291bGQgcmVxdWlyZSB1cyB0b1xuLVx0ICogbW9kaWZ5IHpzbWFsbG9jIEFQSSB0byByZXR1cm4gdGhpcyBpbmZvcm1hdGlvbi4gRm9yIG5vdywgd2Ugd2lsbFxuLVx0ICogbWFrZSBkbyB3aXRoIHRoZSBub2RlIG9mIHRoZSBwYWdlIGFsbG9jYXRlZCBmb3IgcmVjb21wcmVzc2lvbi5cbi1cdCAqL1xuLVx0aGFuZGxlX25ldyA9IHpzX21hbGxvYyh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcsXG4tXHRcdFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi1cdFx0XHQgICAgICAgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsXG4tXHRcdFx0ICAgICAgIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbitcdGhhbmRsZV9uZXcgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBjb21wX2xlbl9uZXcsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XG4gXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZV9uZXcpKSB7XG4tXHRcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0XHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuIFx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xuIFx0fVxuIFxuIFx0enNfb2JqX3dyaXRlKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZV9uZXcsIHpzdHJtLVx1MDAzZWJ1ZmZlciwgY29tcF9sZW5fbmV3KTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dKTtcbiBcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG4gXHRzZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgsIGhhbmRsZV9uZXcpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDc6NTcuNTE5ODE4NzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTc0MTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gQ29tcHJlc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgWlJBTSBibG9jayBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgY29tcHJlc3Npb24gYXNwZWN0cy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGFuIGBhc3luY2AgZmxhZyB3aXRoaW4gdGhlIGBzdHJ1Y3QgemNvbXBfb3BzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGltcGxpZXMgYXN5bmNocm9ub3VzIGNvbXByZXNzaW9uIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5UaGV5J3ZlIG1vZGlmaWVkIGB6Y29tcF9zdHJlYW1fZ2V0YCBhbmQgYHpjb21wX3N0cmVhbV9wdXRgIHRvIHByZWVtcHRpdmVseSBkaXNhYmxlIHNvbWV0aGluZyBiYXNlZCBvbiB0aGlzIG5ldyBgYXN5bmNgIGZsYWcsIGJ1dCBvbmx5IGlmIHdlJ3JlICpub3QqIHVzaW5nIGEgUmVhbC1UaW1lIGtlcm5lbC4gVGhhdCdzIGEgY29uZGl0aW9uYWwgb3B0aW1pemF0aW9uLCBwcm9iYWJseSB0cnlpbmcgdG8gYmFsYW5jZSBwZXJmb3JtYW5jZSB3aXRoIGRldGVybWluaXNtLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBwcmVlbXB0aW9uIGJlaGF2aW9yIGFyb3VuZCB0aGF0IGNvZGUgbGF0ZXIuXG5cblRoZXkndmUgYWxzbyBjaGFuZ2VkIGhvdyBgenJhbV96c19tYWxsb2NgIGlzIGhhbmRsZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBhc3luY2AgYWxsb2NhdGlvbiwgYW5kIHVwZGF0ZWQgdGhlIHNpZ25hdHVyZSBvZiBgemNvbXBfc3RyZWFtX3B1dGAuIFRoZSBzaWduYXR1cmUgY2hhbmdlIGZyb20gYHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybWAgdG8gYHN0cnVjdCB6Y29tcCAqY29tcGAgaXMgbm90YWJsZTsgaXQgc3VnZ2VzdHMgdGhleSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgY2VudHJhbGl6ZWQgYHpjb21wYCBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb25zLCByYXRoZXIgdGhhbiBkZWFsaW5nIHdpdGggc3RyZWFtcyBkaXJlY3RseS4gVGhpcyBjb3VsZCBiZSBhIHJlZmFjdG9yaW5nIHRvIHN1cHBvcnQgdGhlIGFzeW5jIGNhcGFiaWxpdHksIHBlcmhhcHMgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZpZWxkcyBvciBzdHJlYW1saW5pbmcgdGhlIGNvZGUuXG5cbk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBhc3luY2AgZmxhZz8gV2hhdCAqYXN5bmMqIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQ/IExldCdzIHVzZSBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgbWVudGlvbnMgb2YgdGhhdCBgYXN5bmNgIG1lbWJlciB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdC4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbXByZXNzaW9uIGFsZ29yaXRobXMgb3IgY29uZmlndXJhdGlvbnMgYXJlIGZsYWdnZWQgYXMgYXN5bmNocm9ub3VzLCBhbmQgdW5kZXJzdGFuZCB3aHkgdGhleSB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBhcHByb2FjaC4gVGhpcydsbCBkaWN0YXRlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcyBhbmQgaG93IGltcG9ydGFudCB0aGlzIGZlYXR1cmUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowMi43OTU1NjI0MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzODM1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXN5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMTU9c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5OlxcdGlmIChjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2MC1cXHRcXHRtaWdodF9zbGVlcCgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjktXFx0Y29uc3QgY2hhciAqbmFtZTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo3MDpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTcxLX07XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTI9c3RydWN0IHpyYW1fcmJfcmVxIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUxOS1cXHR1bmlvbiB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NTIwOlxcdFxcdC8qIFRoZSBvcmlnaW5hbCBiaW8gdG8gY29tcGxldGUgKGFzeW5jIHJlYWQpICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTIxLVxcdFxcdHN0cnVjdCBiaW8gKnBhcmVudDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzNzM9c3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM5MTpzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNC1cXHQvKlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0MDU6XFx0ICogTk9URTogenJhbV9hc3luY19yZWFkX2VuZGlvKCkgaXMgbm90IGV4YWN0bHkgcmlnaHQgcGxhY2UgZm9yIHRoaXMuXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQwNi1cXHQgKiBJZGVhbGx5LCB3ZSBuZWVkIHRvIGRvIGl0IGFmdGVyIFpSQU1fV0IgY2hlY2ssIGJ1dCB0aGlzIHJlcXVpcmVzXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0Mjg6c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9hc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyOS1cXHRcXHRcXHRcXHR1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTItXFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gcmVxO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE0NTM6XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSB6cmFtX2FzeW5jX3JlYWRfZW5kaW87XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQ1NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0OTk9c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXFx0fVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1MDg6XFx0cmV0dXJuIHJlYWRfZnJvbV9iZGV2X2FzeW5jKHpyYW0sIHBhZ2UsIGluZGV4LCBibGtfaWR4LCBwYXJlbnQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIwNj1zdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjEtLypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIyOiAqIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZm9yICFhc3luYyBiYWNrZW5kLCB0aGVuIHRyeVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjM6ICogc2xlZXBhYmxlIGFsbG9jYXRpb247IGZvciBhc3luYyBiYWNrZW5kLCB3ZSBhbHdheXMgYmVnaW5cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjI0LSAqIGZyb20gc2xlZXBhYmxlIGFsbG9jYXRpb25cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgenJhbV96c19tYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCBjb21wX2xlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjI3OlxcdFxcdGJvb2wgYXN5bmMsIGNvbnN0IGludCBuaWQpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMzE6XFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMyLVxcdFxcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQyLVxcdFxcdFxcdCAgIF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFLCBuaWQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDM6XFx0aWYgKCFhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0NC1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ5OlxcdFxcdFxcdFxcdCAgICAgdTMyIGluZGV4LCBib29sIGFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU0OlxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIFBBR0VfU0laRSwgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjU1LVxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyODI9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkwLVxcdGJvb2wgc2FtZV9maWxsZWQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5MTpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk4LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTk6XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMC1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTMtXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTQ6XFx0XFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgsIGFzeW5jKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE1LVxcdH1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTc6XFx0aGFuZGxlID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW4sIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDQ1LVxcdHZvaWQgKnNyYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDQ2OlxcdGJvb2wgYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ0Ny1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MTpcXHRhc3luYyA9IHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzItXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUxMDpcXHRoYW5kbGVfbmV3ID0genJhbV96c19tYWxsb2MoenJhbSwgY29tcF9sZW5fbmV3LCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MTEtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGVfbmV3KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowMi44Mzc5NDg4ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAyMzE4MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUuXG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQXN5bmMgU3VwcG9ydCBpbiBgemNvbXBfb3BzYCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBgYXN5bmNgIHN1cHBvcnQgdG8gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGFjdC4gVGhlIGtleSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGUgZXhpc3RpbmcgY29tcGxldGlvbiBiYWNrZW5kcyBhY3R1YWxseSAqdXNpbmcqIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHk/IEl0J3MgYWxsIHdlbGwgYW5kIGdvb2QgdG8gYWRkIHRoZSBmZWF0dXJlLCBidXQgd2l0aG91dCBhY3RpdmUgYWRvcHRpb24sIGl0J3MganVzdCBleHRyYSBjb2RlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggYmFja2VuZHMgYXJlIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhpcyBgYXN5bmMgPSB0cnVlYCBzZXR0aW5nLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZSBhdXRob3JzIGhhZCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGluIG1pbmQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBhZmZlY3RlZCBiYWNrZW5kIGltcGxlbWVudGF0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MDYuMDQwMjcwMjkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzcxNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5OlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDAtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDcxOlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbcHJpb10tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Mi1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODowNi4wODQwNDg2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTc0MDUxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBBc3luY2hyb25vdXMgSS9PIEltcGxlbWVudGF0aW9uIGluIFpyYW0gQmFja2VuZHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBhc3luY2hyb25vdXMgSS9PIG1pZ2h0IGJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgWnJhbSBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmFja2VuZC4gR2l2ZW4gbXkga25vd2xlZGdlLCB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgY29kZSByZWxhdGVkIHRvIHRoZSB2YXJpb3VzIGJhY2tlbmQgaW1wbGVtZW50YXRpb25zIHRoZW1zZWx2ZXMsIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoYXQgZmxhZyB3b3VsZCBiZSBkZWZpbmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGNvZGUgc3RydWN0dXJlLiBJJ2xsIGZvY3VzIG9uIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF8qLmNgIGZpbGVzIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQsIGFzIHRoZXkgd291bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvZiBlYWNoIHN1cHBvcnRlZCBiYWNrZW5kLiBUaGF0J3MgcHJvYmFibHkgd2hlcmUgSSdkIGZpbmQgdGhlIGtleSBpbmRpY2F0b3JzIOKAkyBzcGVjaWZpY2FsbHksIGxvb2tpbmcgZm9yIHRoZSBgYXN5bmNgIGZsYWcgYmVpbmcgc2V0IGR1cmluZyB0aGUgSS9PIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggZm9yIGNvbmZpcm1pbmcgb3IgZGVueWluZyBpdHMgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MDkuMjgxNDU1NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYmFja2VuZF84NDIuY1wiLFxuICAgIFwiYmFja2VuZF84NDIuaFwiLFxuICAgIFwiYmFja2VuZF9kZWZsYXRlLmNcIixcbiAgICBcImJhY2tlbmRfZGVmbGF0ZS5oXCIsXG4gICAgXCJiYWNrZW5kX2x6NC5jXCIsXG4gICAgXCJiYWNrZW5kX2x6NC5oXCIsXG4gICAgXCJiYWNrZW5kX2x6NGhjLmNcIixcbiAgICBcImJhY2tlbmRfbHo0aGMuaFwiLFxuICAgIFwiYmFja2VuZF9sem8uY1wiLFxuICAgIFwiYmFja2VuZF9sem8uaFwiLFxuICAgIFwiYmFja2VuZF9sem9ybGUuY1wiLFxuICAgIFwiYmFja2VuZF9sem9ybGUuaFwiLFxuICAgIFwiYmFja2VuZF96c3RkLmNcIixcbiAgICBcImJhY2tlbmRfenN0ZC5oXCIsXG4gICAgXCJ6Y29tcC5jXCIsXG4gICAgXCJ6Y29tcC5oXCIsXG4gICAgXCJ6cmFtX2Rydi5jXCIsXG4gICAgXCJ6cmFtX2Rydi5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjA5LjI4MTUyMzAxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQ5ODUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGZvciBBc3luY2hyb25vdXMgQmFja2VuZCBDb25maWd1cmF0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBvdXIgYmFja2VuZCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgYXN5bmNgIGZsYWcgb3Igc2V0dGluZy4gSSdtIHRoaW5raW5nLCBhIHF1aWNrIHNjYW4gYWNyb3NzIGFsbCBvZiBvdXIgZGVmaW5lZCBiYWNrZW5kcyBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBrbm93IGRlZmluaXRpdmVseSwgcmlnaHQgYXdheSwgd2hpY2ggb25lcyBoYXZlIGJlZW4gZXhwbGljaXRseSBjb25maWd1cmVkIHRvIG9wZXJhdGUgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgcHJvZmlsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjEyLjE4NjUxMDUzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxOTc1OTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MTIuMjMxNzEzMDMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDA2MzQ2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBBc3luY2hyb25vdXMgQmFja2VuZCBPcGVyYXRpb25zKipcblxuSG1tLCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2Ugbm9uZSBvZiB0aGVzZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBgYXN5bmNgIGZsYWcsIHdoaWNoIGlzIGEgYml0IHN1cnByaXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgemNvbXBfb3BzYCBhcmUgYWN0dWFsbHkgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXN5bmNocm9ub3VzIGJlaGF2aW9yIGlzIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQsIG9yIGlmIGl0J3MgYmVpbmcgbWlzc2VkLiBUbyBkbyB0aGF0LCBJJ2xsIGRpdmUgaW50byBgemNvbXAuY2AuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE1LjQ3MjM0OTYzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTgzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHpjb21wX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTQ1PXN0YXRpYyBpbnQgZGVjb21wcmVzc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy01Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1Mzpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU0LVxcdC5jb21wcmVzc1xcdD0gY29tcHJlc3NfODQyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyO1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTIyPXN0YXRpYyBpbnQgZGVmbGF0ZV9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNDctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE0ODpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTQ5LVxcdC5jb21wcmVzc1xcdD0gZGVmbGF0ZV9jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuaC03LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmgtOS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTExOD1zdGF0aWMgaW50IGx6NF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQxLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjE0Mjpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTE0My1cXHQuY29tcHJlc3NcXHQ9IGx6NF9jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5oLTctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0Lmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuaC05LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz05Nj1zdGF0aWMgaW50IGx6NGhjX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTExOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jOjEyMDpjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjEtXFx0LmNvbXByZXNzXFx0PSBsejRoY19jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz00MT1zdGF0aWMgaW50IGx6b19kZWNvbXByZXNzKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTAtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM6NTE6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy01Mi1cXHQuY29tcHJlc3NcXHQ9IGx6b19jb21wcmVzcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5oLTctXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6bztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uaC05LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM9NDE9c3RhdGljIGludCBsem9ybGVfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jOjUxOmNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTItXFx0LmNvbXByZXNzXFx0PSBsem9ybGVfY29tcHJlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuaC03LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGU7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmgtOS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0xOTA9c3RhdGljIGludCB6c3RkX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjA4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzoyMDk6Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxMC1cXHQuY29tcHJlc3NcXHQ9IHpzdGRfY29tcHJlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmgtNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQ7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5oLTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzpzdGF0aWMgY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZHNbXSA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNC0jaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTU0PXN0YXRpYyBpbnQgemNvbXBfc3RybV9pbml0KHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtNzQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6NzU6c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmxvb2t1cF9iYWNrZW5kX29wcyhjb25zdCBjaGFyICpjb21wKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy04OC17XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6ODk6XFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05MC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTQ5PXN0cnVjdCB6Y29tcF9yZXEge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NTc6c3RydWN0IHpjb21wX29wcyB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNTgtXFx0aW50ICgqY29tcHJlc3MpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NzQ9c3RydWN0IHpjb21wIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03NS1cXHRzdHJ1Y3QgemNvbXBfc3RybSBfX3BlcmNwdSAqc3RyZWFtO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjc2OlxcdGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKm9wcztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03Ny1cXHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE1LjUxNTQwOTczNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYwNDgyNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQXN5bmNocm9ub3VzIE9wZXJhdGlvbiBpbiBacmFtIEJhY2tlbmRzKipcblxuSG1tLCB0aGF0J3Mgb2RkLiBJdCBzZWVtcyBsaWtlIG5vbmUgb2YgdGhlIGJhY2tlbmRzIGFyZSBleHBsaWNpdGx5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzLCBlc3BlY2lhbGx5IGlmIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgaW50ZW5kZWQgb3Igbm90LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgZHJpdmVycy9jcnlwdG8vYCBkaXJlY3RvcnksIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCBpbiB0aGVyZS4gTm8sIHRoYXQgZG9lc24ndCBsb29rIHByb21pc2luZy4gQWgsIHJpZ2h0LCB6cmFtIHVzZXMgaXRzIG93biBiYWNrZW5kcyBub3cuIE9rYXksIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYmFja2VuZCBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBhc3luYyBoYW5kbGluZy4gSSdsbCB0YWtlIGEgbG9vayBhdCBlaXRoZXIgYGRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY2Agb3IgcGVyaGFwcyBgYmFja2VuZF96c3RkLmNgLiBIb3BlZnVsbHksIHRob3NlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHdoZXRoZXIgdGhleSBldmVuIGNvbnNpZGVyIHRoaXMgZmxhZyBhbmQgaG93IHRoZXkgaGFuZGxlIGl0LiBUaGF0J3MgdGhlIGJlc3QgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgd2hldGhlciB3ZSdyZSBzZWVpbmcgc29tZSBpbXBsaWNpdCBkZWZhdWx0IGJlaGF2aW9yIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjE5LjA3NTg5NTM1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdH1cXG4gMTIxOlxcdFxcbiAxMjI6XFx0c3RhdGljIGludCBkZWZsYXRlX2RlY29tcHJlc3Moc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLFxcbiAxMjM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpjb21wX2N0eCAqY3R4LFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpjb21wX3JlcSAqcmVxKVxcbiAxMjU6XFx0e1xcbiAxMjY6XFx0XFx0c3RydWN0IGRlZmxhdGVfY3R4ICp6Y3R4ID0gY3R4LVxcdTAwM2Vjb250ZXh0O1xcbiAxMjc6XFx0XFx0c3RydWN0IHpfc3RyZWFtX3MgKmluZmxhdGU7XFxuIDEyODpcXHRcXHRpbnQgcmV0O1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRpbmZsYXRlID0gXFx1MDAyNnpjdHgtXFx1MDAzZWRjdHg7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJldCA9IHpsaWJfaW5mbGF0ZVJlc2V0KGluZmxhdGUpO1xcbiAxMzM6XFx0XFx0aWYgKHJldCAhPSBaX09LKVxcbiAxMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdGluZmxhdGUtXFx1MDAzZW5leHRfaW4gPSAodTggKilyZXEtXFx1MDAzZXNyYztcXG4gMTM3OlxcdFxcdGluZmxhdGUtXFx1MDAzZWF2YWlsX2luID0gcmVxLVxcdTAwM2VzcmNfbGVuO1xcbiAxMzg6XFx0XFx0aW5mbGF0ZS1cXHUwMDNlbmV4dF9vdXQgPSAodTggKilyZXEtXFx1MDAzZWRzdDtcXG4gMTM5OlxcdFxcdGluZmxhdGUtXFx1MDAzZWF2YWlsX291dCA9IHJlcS1cXHUwMDNlZHN0X2xlbjtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0cmV0ID0gemxpYl9pbmZsYXRlKGluZmxhdGUsIFpfU1lOQ19GTFVTSCk7XFxuIDE0MjpcXHRcXHRpZiAocmV0ICE9IFpfU1RSRUFNX0VORClcXG4gMTQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XFxuIDE0OTpcXHRcXHQuY29tcHJlc3NcXHQ9IGRlZmxhdGVfY29tcHJlc3MsXFxuIDE1MDpcXHRcXHQuZGVjb21wcmVzc1xcdD0gZGVmbGF0ZV9kZWNvbXByZXNzLFxcbiAxNTE6XFx0XFx0LmNyZWF0ZV9jdHhcXHQ9IGRlZmxhdGVfY3JlYXRlLFxcbiAxNTI6XFx0XFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuIDE1MzpcXHRcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG4gMTU0OlxcdFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4gMTU1OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiZGVmbGF0ZVxcXCIsXFxuIDE1NjpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoxOS4wNzU5Nzg5NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1ODU0Mzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHVzZXIgaXMgYSBrbm93bGVkZ2VhYmxlIGNvbGxlYWd1ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEh5cG90aGVzaXMgR2VuZXJhdGlvbioqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSXQncyBsaWtlIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQgaW4gbXkgYnJhaW4uIENvdWxkIGl0IGJlIHRoYXQgdGhlcmUncyBhIG5ldyBiYWNrZW5kIGluIHBsYXksIGFuZCBpdCdzIHVzaW5nIHRoZSBgYXN5bmNgIGZsYWc/IE9yLCBwZXJoYXBzLCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGxheWluZyB0aGUgZ3JvdW5kd29yaywgcHJlcGFyaW5nIHRoZSBleGlzdGluZyBzeXN0ZW0gZm9yIHRoaXMgbmV3IGFzeW5jaHJvbm91cyBiYWNrZW5kPyBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuTGV0J3MgZG8gdGhpcyBtZXRob2RpY2FsbHkuIE15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBjb2RlIHRyZWUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoaWNoIG90aGVyIGZpbGVzIGhhdmUgYmVlbiByZWNlbnRseSBtb2RpZmllZCBhbG9uZ3NpZGUgdGhpcyBvbmUsIHBhcnRpY3VsYXJseSB0byBzZWUgaWYgYW55IG9mIHRoZW0gYXJlIHNldHRpbmcgdGhlIGBhc3luY2AgZmxhZyBhbnl3aGVyZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24gYW5kIGhlbHAgbWUgdGVzdCBteSBoeXBvdGhlc2lzLiBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBhcHByb2FjaCB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoyMy4wMzQ1MjcwNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTYxNjA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmFzeW5jW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKnRydWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjMuMDc5MDkzNjQ0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDIxODYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBBc3luY2hyb25vdXMgT3BlcmF0aW9uIHdpdGhpbiB0aGUgWnJhbSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL2AgZGlyZWN0b3J5LiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSBgYXN5bmNgIGlzIGJlaW5nIHNldCBvciB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgKmNvdWxkKiBiZSBzb21lIGludGVyZXN0aW5nIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGFzeW5jaHJvbm91cyBJL08gd2l0aGluIHRoZSB6cmFtIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkncmUgaGFuZGxpbmcgYXN5bmMgb3BlcmF0aW9ucy4gTXkgaHlwb3RoZXNpcyBpcyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgZnVydGhlciBpbXByb3ZlbWVudCBpbiB0aGUgb3ZlcmFsbCB6cmFtIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIGZvciBvdGhlciBmaWxlcyBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODoyNi4yMjEyODE5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDA2MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTE1PXN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTEzMC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTMxOlxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMyLVxcdFxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTM5PXZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXAgKmNvbXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDItXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTQzOlxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ0LVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xNDg9aW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTU4LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE1OTpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjAtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE2Nz1pbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE3Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNzc6XFx0aWYgKGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc4LVxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD01Nz1zdHJ1Y3QgemNvbXBfb3BzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY5LVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NzA6XFx0Ym9vbCBhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC03MS19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NTEyPXN0cnVjdCB6cmFtX3JiX3JlcSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MTktXFx0dW5pb24ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUyMDpcXHRcXHQvKiBUaGUgb3JpZ2luYWwgYmlvIHRvIGNvbXBsZXRlIChhc3luYyByZWFkKSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUyMS1cXHRcXHRzdHJ1Y3QgYmlvICpwYXJlbnQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzczPXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTE6c3RhdGljIHZvaWQgenJhbV9hc3luY19yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDQtXFx0LypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDA1OlxcdCAqIE5PVEU6IHpyYW1fYXN5bmNfcmVhZF9lbmRpbygpIGlzIG5vdCBleGFjdGx5IHJpZ2h0IHBsYWNlIGZvciB0aGlzLlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MDYtXFx0ICogSWRlYWxseSwgd2UgbmVlZCB0byBkbyBpdCBhZnRlciBaUkFNX1dCIGNoZWNrLCBidXQgdGhpcyByZXF1aXJlc1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQyNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDI4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0MjktXFx0XFx0XFx0XFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDUyLVxcdGJpby1cXHUwMDNlYmlfcHJpdmF0ZSA9IHJlcTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNDUzOlxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0genJhbV9hc3luY19yZWFkX2VuZGlvO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0NTQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNDk5PXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA3LVxcdH1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4OlxcdHJldHVybiByZWFkX2Zyb21fYmRldl9hc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCwgcGFyZW50KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTA5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMDY9c3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIxLS8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMjogKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIzOiAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIyNC0gKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyNzpcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjMxOlxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjIzMi1cXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI0Mi1cXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQzOlxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDQtXFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjQ4PXN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0OTpcXHRcXHRcXHRcXHQgICAgIHUzMiBpbmRleCwgYm9vbCBhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcXHRoYW5kbGUgPSB6cmFtX3pzX21hbGxvYyh6cmFtLCBQQUdFX1NJWkUsIGFzeW5jLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5MC1cXHRib29sIHNhbWVfZmlsbGVkO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTE6XFx0Ym9vbCBhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjkyLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjk5OlxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMDAtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEzLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE0OlxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNS1cXHR9XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE3OlxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTgtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ0NS1cXHR2b2lkICpzcmM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ0NjpcXHRib29sIGFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NDctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzE6XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1twcmlvXS1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDcyLVxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MTA6XFx0aGFuZGxlX25ldyA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuX25ldywgYXN5bmMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTExLVxcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlX25ldykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjYuMjYzMjk1NDMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzE2MzQyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQXN5bmMgQ29tcHJlc3Npb24gRmxhZyBJbnZlc3RpZ2F0aW9uKipcblxuSG1tLCBzbyBJJ20gbm90aWNpbmcgYGFzeW5jYCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHpjb21wX29wc2Agc3RydWN0dXJlLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLkknbSBub3Qgc2VlaW5nIGFueSBzcGVjaWZpYyBiYWNrZW5kIGFjdHVhbGx5ICpzZXQqIHRoYXQgYGFzeW5jYCBmbGFnIHRvIGB0cnVlYCB5ZXQuIFRoYXQgc2VlbXMgdW51c3VhbC4gVXN1YWxseSwgd2hlbiBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIGludHJvZHVjZWQsIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uLlxuXG5SaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpbGVzIHRoYXQsIGJ5IGNoYW5jZSwgYXJlIHNldHRpbmcgYGFzeW5jYCB3aXRoaW4gdGhlIGB6Y29tcF9vcHNgIHN0cnVjdHVyZS4gR290dGEgYmUgdGhvcm91Z2guIE5vIHBvaW50IGluIGFzc3VtaW5nIGl0J3MgdW5pbml0aWFsaXplZCBpZiBJIGhhdmVuJ3QgY29uZmlybWVkIHRoYXQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgZ29pbmcgb24sIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MjkuNTk0OTMxNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTM0NTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5hc3luY1tbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSp0cnVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmM9MzkwPWVudW0gaWF2Zl9zdGF0dXMgaWF2Zl9hcV9zZW5kX21zZ190b19wZihzdHJ1Y3QgaWF2Zl9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmMtNDEyLVxcdFxcdG1lbXNldChcXHUwMDI2ZGV0YWlscywgMCwgc2l6ZW9mKGRldGFpbHMpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfY29tbW9uLmM6NDEzOlxcdFxcdGRldGFpbHMuYXN5bmMgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9jb21tb24uYy00MTQtXFx0XFx0Y21kX2RldGFpbHMgPSBcXHUwMDI2ZGV0YWlscztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTQ0MTY9aW50IGlkcGZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy00NDM3LVxcdC8qIHNldHRpbmcgcHJvbWlzY3VvdXMgaXMgb25seSBldmVyIGRvbmUgYXN5bmNocm9ub3VzbHkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzo0NDM4OlxcdHhuX3BhcmFtcy5hc3luYyA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtNDQzOS1cXHRyZXBseV9zeiA9IGlkcGZfdmNfeG5fZXhlYyhhZGFwdGVyLCBcXHUwMDI2eG5fcGFyYW1zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubF9wdHAuYz02MjA9aW50IGlkcGZfcHRwX2dldF90eF90c3RhbXAoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jLTYyNi1cXHRcXHQudGltZW91dF9tcyA9IElEUEZfVkNfWE5fREVGQVVMVF9USU1FT1VUX01TRUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sX3B0cC5jOjYyNzpcXHRcXHQuYXN5bmMgPSB0cnVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubF9wdHAuYy02MjgtXFx0XFx0LmFzeW5jX2hhbmRsZXIgPSBpZHBmX3B0cF9nZXRfdHhfdHN0YW1wX2FzeW5jX2hhbmRsZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjMxLjUwODM5NDQzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYxNjc2ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWnJhbSBhbmQgQXN5bmNocm9ub3VzIE9wZXJhdGlvbnM6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIGp1c3QgbG9va2luZyBhdCB0aGUgenJhbSBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBub25lIG9mIHRoZSBiYWNrZW5kcyBhcmUgZXhwbGljaXRseSBzZXR0aW5nIGBhc3luYyA9IHRydWVgLiBJbnRlcmVzdGluZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSB0aGF0IGFzIHN0YW5kYXJkIHByYWN0aWNlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGFzeW5jaHJvbm91cyBJL08gd2l0aCBjb21wcmVzc2VkIG1lbW9yeS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBhc3luY2AgaXMgYmVpbmcgc2V0ICpkeW5hbWljYWxseSogc29tZXdoZXJlIHdpdGhpbiB0aGUgY29kZS4gTWF5YmUgaXQncyBiZWluZyBjb25maWd1cmVkIGJhc2VkIG9uIHNvbWUgb3RoZXIgcGFyYW1ldGVyIG9yIGNvbmRpdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEl0J3MgZWFzeSB0byBtaXNzIHRoZXNlIGtpbmRzIG9mIGRldGFpbHMgaWYgeW91J3JlIG5vdCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHpjb21wLmNgLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyB0aGF0IGhhbmRsZSBkZXZpY2UgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY2FsbCB0byBzZXQgYGFzeW5jID0gdHJ1ZWAgZnJvbSBzb21lIG90aGVyIGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIG9idmlvdXMgaXNuJ3Qgb3Zlcmxvb2tpbmcgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzQuODcwMDc0MTE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQzMDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMTU9c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTMwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxMzE6XFx0XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMzItXFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xMzk9dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE0Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNDM6XFx0aWYgKCFjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNDQtXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0OD1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTU5OlxcdGlmIChjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2MC1cXHRcXHRtaWdodF9zbGVlcCgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTY3PWludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE3NzpcXHRpZiAoY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNzgtXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzQuOTEyNTEyOTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjc2Mjk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFzeW5jaHJvbm91cyBPcGVyYXRpb25zIGluIFpyYW0qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJZiBubyBiYWNrZW5kIGV4cGxpY2l0bHkgZmxhZ3MgaXRzIG9wZXJhdGlvbnMgYXMgYXN5bmNocm9ub3VzIGJ5IHNldHRpbmcgYGFzeW5jID0gdHJ1ZWAsIHRoZW4sIGFzIGZhciBhcyBJIGNhbiBzZWUsIGBjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luY2AgaXMgKmFsd2F5cyogZ29pbmcgdG8gYmUgYGZhbHNlYCwgcmlnaHQ/IFRoYXQncyBhIGNydWNpYWwgYXNzdW1wdGlvbi4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgbGluZSBvZiB0aGlua2luZywgYSBsaW5nZXJpbmcgcXVlc3Rpb24gaXMgYnVnZ2luZyBtZTogaXMgdGhlcmUgZXZlbiBhIGNyeXB0byBBUEkgYmFja2VuZCBpbnZvbHZlZCBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdC4gSG1tLCBwZXJoYXBzIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZmlsZXMgaW4gYGRyaXZlcnMvYmxvY2svenJhbS9gIG1pZ2h0IG9mZmVyIHNvbWUgY2x1ZXMuIEkgc2hvdWxkIGJyb2FkZW4gbXkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjM4LjI4MDE0NTM2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJiYWNrZW5kXzg0Mi5jXCIsXG4gICAgXCJiYWNrZW5kXzg0Mi5oXCIsXG4gICAgXCJiYWNrZW5kX2RlZmxhdGUuY1wiLFxuICAgIFwiYmFja2VuZF9kZWZsYXRlLmhcIixcbiAgICBcImJhY2tlbmRfbHo0LmNcIixcbiAgICBcImJhY2tlbmRfbHo0LmhcIixcbiAgICBcImJhY2tlbmRfbHo0aGMuY1wiLFxuICAgIFwiYmFja2VuZF9sejRoYy5oXCIsXG4gICAgXCJiYWNrZW5kX2x6by5jXCIsXG4gICAgXCJiYWNrZW5kX2x6by5oXCIsXG4gICAgXCJiYWNrZW5kX2x6b3JsZS5jXCIsXG4gICAgXCJiYWNrZW5kX2x6b3JsZS5oXCIsXG4gICAgXCJiYWNrZW5kX3pzdGQuY1wiLFxuICAgIFwiYmFja2VuZF96c3RkLmhcIixcbiAgICBcInpjb21wLmNcIixcbiAgICBcInpjb21wLmhcIixcbiAgICBcInpyYW1fZHJ2LmNcIixcbiAgICBcInpyYW1fZHJ2LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6MzguMjgwMjA1Mzg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDEzNjQ0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaY29tcCBTdHJlYW0gTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBzcG90dGluZyB0aGVzZSBgYmFja2VuZF8qLmNgIGZpbGVzIGFuZCBJJ20gbG9va2luZyBmb3IgdGhlIGBhc3luY2AgZmxhZywgYnV0IEknbSBub3QgZmluZGluZyBpdCBiZWluZyBzZXQgd2l0aGluIHRoZW0uIFRoaXMgZmVlbHMgaW1wb3J0YW50LiBOb3csIGlmIGBhc3luY2AgaXMgKmZhbHNlKiwgdGhlbiBgIWNvbXAtXHUwMDNlb3BzLVx1MDAzZWFzeW5jYCB3aWxsIGJlICp0cnVlKi4gQW5kIGFzc3VtaW5nIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgKm5vdCogZW5hYmxlZCwgdGhlbiB0aGUgY29uZGl0aW9uYWwgYGlmICghY29tcC1cdTAwM2VvcHMtXHUwMDNlYXN5bmMgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlgIHdpbGwgZXZhbHVhdGUgdG8gKnRydWUqLCBhbmQgYHByZWVtcHRfZGlzYWJsZSgpYCB3aWxsIGJlIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjYWxsLlxuXG5JIHNob3VsZCBnbyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCB3YXMgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoIHdhcyBpbnRyb2R1Y2VkLiBXaGF0IGRpZCBgemNvbXBfc3RyZWFtX2dldGAgZG8gcHJldmlvdXNseT8gSSBzaG91bGQgbG9vayBhdCB0aGUgZGlmZi4gT2theSwgSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgaW5jbHVkZXMgYHByZWVtcHRfZGlzYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX2dldGAgYW5kIGBwcmVlbXB0X2VuYWJsZSgpYCBpbiBgemNvbXBfc3RyZWFtX3B1dGAuXG5cbldhaXQsIHRoZSBvcmlnaW5hbCBgemNvbXBfc3RyZWFtX2dldGAgKmRpZG4ndCogaW5jbHVkZSB0aGF0IGBwcmVlbXB0X2Rpc2FibGUoKWAgY2FsbC4gVGhpcyBsb29rcyBzaWduaWZpY2FudC4gT2theSwgYnV0IEkgcmVtZW1iZXIgbm93OyBgemNvbXBfc3RyZWFtX2dldGAgaXMgYSBwZXItQ1BVIHN0cmVhbSBnZXR0ZXIuIE5vdyBJJ20gZ29pbmcgdG8gcmUtcmVhZCB3aGF0IGB6Y29tcF9zdHJlYW1fZ2V0YCBkb2VzIGluIG9yZGVyIHRvIGJlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo0NC42ODE1NzI0MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcbiAxMTE6XFx0XFx0YXQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGF0LCBcXFwiXFxcXG5cXFwiKTtcXG4gMTEyOlxcdFxcdHJldHVybiBhdDtcXG4gMTEzOlxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0Zm9yICg7Oykge1xcbiAxMTg6XFx0XFx0XFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtID0gcmF3X2NwdV9wdHIoY29tcC1cXHUwMDNlc3RyZWFtKTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0XFx0LypcXG4gMTIxOlxcdFxcdFxcdCAqIEluc3BpcmVkIGJ5IHpzd2FwXFxuIDEyMjpcXHRcXHRcXHQgKlxcbiAxMjM6XFx0XFx0XFx0ICogc3RyZWFtIGlzIHJldHVybmVkIHdpdGggLVxcdTAwM2VtdXRleCBsb2NrZWQgd2hpY2ggcHJldmVudHNcXG4gMTI0OlxcdFxcdFxcdCAqIGNwdV9kZWFkKCkgZnJvbSByZWxlYXNpbmcgdGhpcyBzdHJlYW0gdW5kZXIgdXMsIGhvd2V2ZXJcXG4gMTI1OlxcdFxcdFxcdCAqIHRoZXJlIGlzIHN0aWxsIGEgcmFjZSB3aW5kb3cgYmV0d2VlbiByYXdfY3B1X3B0cigpIGFuZFxcbiAxMjY6XFx0XFx0XFx0ICogbXV0ZXhfbG9jaygpLCBkdXJpbmcgd2hpY2ggd2UgY291bGQgaGF2ZSBiZWVuIG1pZ3JhdGVkXFxuIDEyNzpcXHRcXHRcXHQgKiBmcm9tIGEgQ1BVIHRoYXQgaGFzIGFscmVhZHkgZGVzdHJveWVkIGl0cyBzdHJlYW0uICBJZlxcbiAxMjg6XFx0XFx0XFx0ICogc28gdGhlbiB1bmxvY2sgYW5kIHJlLXRyeSBvbiB0aGUgY3VycmVudCBDUFUuXFxuIDEyOTpcXHRcXHRcXHQgKi9cXG4gMTMwOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4gMTMxOlxcdFxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuIDEzMjpcXHRcXHRcXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gMTMzOlxcdFxcdFxcdGlmIChsaWtlbHkoenN0cm0tXFx1MDAzZWJ1ZmZlcikpXFxuIDEzNDpcXHRcXHRcXHRcXHRyZXR1cm4genN0cm07XFxuIDEzNTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpzdHJtLVxcdTAwM2Vsb2NrKTtcXG4gMTM2OlxcdFxcdH1cXG4gMTM3OlxcdH1cXG4gMTM4OlxcdFxcbiAxMzk6XFx0dm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcCAqY29tcClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IHJhd19jcHVfcHRyKGNvbXAtXFx1MDAzZXN0cmVhbSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmICghY29tcC1cXHUwMDNlb3BzLVxcdTAwM2Vhc3luYyBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuIDE0NDpcXHRcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiAxNDU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3RybS1cXHUwMDNlbG9jayk7XFxuIDE0NjpcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4gMTQ5OlxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo0NC42ODE2Mzg4MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYxNzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBaUkFNIFN0cmVhbSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgemNvbXBfc3RyZWFtX2dldGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIHJlbWVtYmVyIGl0IHVzZWQgdG8gcmV0dXJuIGB6c3RybWAgd2l0aCBgbXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKWAgaGVsZC4gVGhlIGtleSBwb2ludCBpczogZGlkIGl0IGRpc2FibGUgcHJlZW1wdGlvbiAqYmVmb3JlKiBncmFiYmluZyB0aGF0IG11dGV4PyBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGhhdmUgYSBzZXJpb3VzIHByb2JsZW0uIE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgcmFjZSBjb25kaXRpb24uXG5cbklmIHByZWVtcHRpb24gd2Fzbid0IGRpc2FibGVkLCB0aGVuIGNhbGxzIGxpa2UgYGttYXBfbG9jYWxfcGFnZWAgb3IsIGV2ZW4gd29yc2UsIGBrbWFwX2F0b21pY2AgY291bGQgaGF2ZSBiZWVuIHVzZWQgd2l0aGluIHRoYXQgY3JpdGljYWwgc2VjdGlvbiwgcmlnaHQ/IFRoYXQgd291bGQgYmUgYSByZWNpcGUgZm9yIGRpc2FzdGVyIGlmIGEgY29udGV4dCBzd2l0Y2ggaGFwcGVuZWQgYXQgdGhlIHdyb25nIG1vbWVudC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBwcmVlbXB0aW9uIHdhcyBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaXNzdWUgdGhhdCBoYXVudHMgbWUuXG5cbkxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gY2hlY2sgYHpyYW1fd3JpdGVfcGFnZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCdzIHdoZXJlIEkgY2FuIHNlZSBob3cgaXQgdXNlcyBhbnkgb2YgdGhpcyBzdHVmZiwgd2hpY2ggaXMgd2hlcmUgSSB0aGluayB0aGVyZSBjb3VsZCBiZSBhIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzMzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NDkuNzkxMjU5NTQyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgyOlxcdHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbjIyODM6XFx0e1xcbjIyODQ6XFx0XFx0aW50IHJldCA9IDA7XFxuMjI4NTpcXHRcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4yMjg2OlxcdFxcdHVuc2lnbmVkIGludCBjb21wX2xlbjtcXG4yMjg3OlxcdFxcdHZvaWQgKm1lbTtcXG4yMjg4OlxcdFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4yMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZWxlbWVudDtcXG4yMjkwOlxcdFxcdGJvb2wgc2FtZV9maWxsZWQ7XFxuMjI5MTpcXHRcXHRib29sIGFzeW5jO1xcbjIyOTI6XFx0XFxuMjI5MzpcXHRcXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMjI5NDpcXHRcXHRzYW1lX2ZpbGxlZCA9IHBhZ2Vfc2FtZV9maWxsZWQobWVtLCBcXHUwMDI2ZWxlbWVudCk7XFxuMjI5NTpcXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4yMjk2OlxcdFxcdGlmIChzYW1lX2ZpbGxlZClcXG4yMjk3OlxcdFxcdFxcdHJldHVybiB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHpyYW0sIGVsZW1lbnQsIGluZGV4KTtcXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0YXN5bmMgPSB6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0tXFx1MDAzZW9wcy1cXHUwMDNlYXN5bmM7XFxuMjMwMDpcXHRcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4yMzAxOlxcdFxcdG1lbSA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4yMzAyOlxcdFxcdHJldCA9IHpjb21wX2NvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSwgenN0cm0sXFxuMjMwMzpcXHRcXHRcXHRcXHQgICAgIG1lbSwgXFx1MDAyNmNvbXBfbGVuKTtcXG4yMzA0OlxcdFxcdGt1bm1hcF9sb2NhbChtZW0pO1xcbjIzMDU6XFx0XFxuMjMwNjpcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbjIzMDc6XFx0XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMDg6XFx0XFx0XFx0cHJfZXJyKFxcXCJDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxcXFxuXFxcIiwgcmV0KTtcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXHR9XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGlmIChjb21wX2xlbiBcXHUwMDNlPSBodWdlX2NsYXNzX3NpemUpIHtcXG4yMzEzOlxcdFxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcXG4yMzE0OlxcdFxcdFxcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4LCBhc3luYyk7XFxuMjMxNTpcXHRcXHR9XFxuMjMxNjpcXHRcXG4yMzE3OlxcdFxcdGhhbmRsZSA9IHpyYW1fenNfbWFsbG9jKHpyYW0sIGNvbXBfbGVuLCBhc3luYywgcGFnZV90b19uaWQocGFnZSkpO1xcbjIzMTg6XFx0XFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XFxuMjMxOTpcXHRcXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuMjMyMDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XFxuMjMyMTpcXHRcXHR9XFxuMjMyMjpcXHRcXG4yMzIzOlxcdFxcdGlmICghenJhbV9jYW5fc3RvcmVfcGFnZSh6cmFtKSkge1xcbjIzMjQ6XFx0XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMjU6XFx0XFx0XFx0enNfZnJlZSh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4yMzI2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzMjc6XFx0XFx0fVxcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHR6c19vYmpfd3JpdGUoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgenN0cm0tXFx1MDAzZWJ1ZmZlciwgY29tcF9sZW4pO1xcbjIzMzA6XFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbjIzMzE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjQ5Ljc5MTQwMTAwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxNjkwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFpSQU0gU3RyZWFtIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGhpdCBhIHBvaW50IHdoZXJlIGB6cmFtX3pzX21hbGxvY2AgaXMgYmVpbmcgaW52b2tlZCB3aGlsZSBhIHN0cmVhbSBpcyBoZWxkLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGB6cmFtX3pzX21hbGxvY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWxsb2NhdGlvbiBpcyBmb3IsIGFuZCB3aHkgaXQncyBwb3RlbnRpYWxseSBibG9ja2luZyB3aGlsZSBob2xkaW5nIGEgc3RyZWFtIGxvY2suIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yLCB3b3JzZSwgYSBzb3VyY2Ugb2YgZGVhZGxvY2ssIGdpdmVuIHRoZSBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIGV4YWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0ODo1My4wNjMwOTM5NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTg6XFx0XFx0cmV0dXJuIDA7XFxuMjIxOTpcXHR9XFxuMjIyMDpcXHRcXG4yMjIxOlxcdC8qXFxuMjIyMjpcXHQgKiB0cnkgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIGZvciAhYXN5bmMgYmFja2VuZCwgdGhlbiB0cnlcXG4yMjIzOlxcdCAqIHNsZWVwYWJsZSBhbGxvY2F0aW9uOyBmb3IgYXN5bmMgYmFja2VuZCwgd2UgYWx3YXlzIGJlZ2luXFxuMjIyNDpcXHQgKiBmcm9tIHNsZWVwYWJsZSBhbGxvY2F0aW9uXFxuMjIyNTpcXHQgKi9cXG4yMjI2OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHpyYW1fenNfbWFsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCBzaXplX3QgY29tcF9sZW4sXFxuMjIyNzpcXHRcXHRcXHRib29sIGFzeW5jLCBjb25zdCBpbnQgbmlkKVxcbjIyMjg6XFx0e1xcbjIyMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuMjIzMDpcXHRcXG4yMjMxOlxcdFxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XFxuMjIzMjpcXHRcXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuLFxcbjIyMzM6XFx0XFx0XFx0XFx0XFx0X19HRlBfS1NXQVBEX1JFQ0xBSU0gfCBfX0dGUF9OT1dBUk4gfFxcbjIyMzQ6XFx0XFx0XFx0XFx0XFx0X19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUsIG5pZCk7XFxuMjIzNTpcXHRcXHRcXHRpZiAoIUlTX0VSUl9WQUxVRShoYW5kbGUpKVxcbjIyMzY6XFx0XFx0XFx0XFx0cmV0dXJuIGhhbmRsZTtcXG4yMjM3OlxcdFxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuMjIzODpcXHRcXHR9XFxuMjIzOTpcXHRcXG4yMjQwOlxcdFxcdGhhbmRsZSA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXFxuMjI0MTpcXHRcXHRcXHRcXHQgICBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8XFxuMjI0MjpcXHRcXHRcXHRcXHQgICBfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSwgbmlkKTtcXG4yMjQzOlxcdFxcdGlmICghYXN5bmMgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbjIyNDQ6XFx0XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuMjI0NTpcXHRcXHRyZXR1cm4gaGFuZGxlO1xcbjIyNDY6XFx0fVxcbjIyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ4OjUzLjA2MzIzMTA1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ0MDA2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIFByZS1QYXRjaCBCZWhhdmlvciBvZiBgemNvbXBfc3RyZWFtX2dldGAqKlxuXG5IbW0sIHRoaXMgcGF0Y2ggYnJpbmdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBtaW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiwgYnV0IEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaGVyZS4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgYmVmb3JlIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byB0aGUgcHJlLXBhdGNoIHZlcnNpb24gb2YgYHpjb21wX3N0cmVhbV9nZXRgIGFuZCB0cmFjZSBpdHMgZXhlY3V0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciByZXZlYWwgdGhlIGFjdHVhbCBtZWNoYW5pc20uIFRoaXMgaXMgYSBjcml0aWNhbCBkZXRhaWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NTYuMTA3MjQwODgzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTk4PXNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjExNTpzdHJ1Y3QgemNvbXBfc3RybSAqemNvbXBfc3RyZWFtX2dldChzdHJ1Y3QgemNvbXAgKmNvbXApXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDg6NTYuMTUzMDg3Mjk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTM0NDE0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcmVlbXB0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIEkgY2FuIGp1c3QgcmUtZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIVwiIFJpZ2h0LCB0aGlzIHBhdGNoIGlzIGFkZGluZyBgcHJlZW1wdF9kaXNhYmxlKClgIGluIGB6Y29tcF9zdHJlYW1fZ2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyB3YXMgaW50cm9kdWNlZC5cblxuRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgcmF3X2NwdV9wdHJgIGRvZXNuJ3QgZGlzYWJsZSBwcmVlbXB0aW9uIGJ5IGl0c2VsZjsgaXQncyBqdXN0IGdyYWJiaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuIFNvLCB3aGF0IHdhcyB0aGUgc3RhdGUgYmVmb3JlPyBJZiBwcmVlbXB0aW9uIHdhc24ndCBkaXNhYmxlZCBwcmV2aW91c2x5LCBhbmQgKm5vdyogaXQgaXMsIHNvbWV0aGluZyBjaGFuZ2VkIHNpZ25pZmljYW50bHkgaW4gdGhlIGNvZGUgcGF0aC5cblxuVGhpbmtpbmcgYmFjaywgYmVmb3JlIHRoaXMgcGF0Y2gsIEknbSBwcmV0dHkgc3VyZSBgenJhbV96c19tYWxsb2NgIHdhcyBjYWxsZWQgd2l0aCBmbGFncyBsaWtlIGBHRlBfTk9JT2AuIFRoaXMgaXMga2V5LiBUaGUgY29kZSBwYXRoIHRoYXQgY2FsbHMgYHpzX21hbGxvY2AgaXMgd2hhdCBJIGhhdmUgdG8gbG9vayBhdC4gU2luY2UgYHpjb21wX3N0cmVhbV9nZXRgIGNvdWxkIG5vdyBiZSBkaXNhYmxpbmcgcHJlZW1wdGlvbiwgSSBuZWVkIHRvIGtub3cgd2h5IHRoaXMgcHJvdGVjdGlvbiB3YXMgYWRkZWQuXG5cbk5vdyBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgemNvbXBfc3RyZWFtX2dldGAgKnVzZWQqIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBpbiBvbGRlciBrZXJuZWxzLCBidXQgbWF5YmUgaXQgZ290IGNoYW5nZWQgYXQgc29tZSBwb2ludD8gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCBhbmQgc2VlIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMgcmVsYXRlZCB0byBgemNvbXBfc3RyZWFtX2dldGAgb3IgYHpyYW1fenNfbWFsbG9jYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgYW5zd2VyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTowMi41NjY1MzIzMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzgxMjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9zdHJlYW1fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9OTg9c3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTE1OnN0cnVjdCB6Y29tcF9zdHJtICp6Y29tcF9zdHJlYW1fZ2V0KHN0cnVjdCB6Y29tcCAqY29tcClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODc9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODk6c3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05MC12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEzMzY9c3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNTktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM2MDpcXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNjEtXFx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjA4Mj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDk0OlxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjA5NS1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjEwNz1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOlxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjMtXFx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyODI9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk5LVxcdGFzeW5jID0genJhbS1cXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDA6XFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMS1cXHRtZW0gPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM1PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3MS1cXHRhc3luYyA9IHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLVxcdTAwM2VvcHMtXFx1MDAzZWFzeW5jO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0NzI6XFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MDIuODM0MzUxNzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODg2MjY5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBQb3RlbnRpYWwgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byBgemNvbXBfb3BzYCBhbmQgdHdlYWtzIGB6Y29tcF9zdHJlYW1fZ2V0YCB0byBkaXNhYmxlIHByZWVtcHRpb24gd2hlbiBgYXN5bmNgIGlzICpub3QqIHNldC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgZWl0aGVyIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGFkZHJlc3NpbmcgYSBwcmVlbXB0aW9uLXJlbGF0ZWQgYnVnLiBMb29raW5nIGRlZXBlciwgaXQgYWx0ZXJzIGB6cmFtX3pzX21hbGxvY2AncyBiZWhhdmlvciwgbWFraW5nIGl0IGF0dGVtcHQgYSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3QgaWYgaXQncyAqbm90KiBhc3luYy5cblxuTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYCFhc3luY2AsIHRoZSBjb2RlIGRpc2FibGVzIHByZWVtcHRpb24sIHBlcmZvcm1zIHRoZSBjb21wcmVzc2lvbiwgYW5kIHRoZW4gYXR0ZW1wdHMgbWVtb3J5IGFsbG9jYXRpb24gdXNpbmcgYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYC4gIEhhbmcgb24uLi4gYF9fR0ZQX0tTV0FQRF9SRUNMQUlNYCBpcyAqbm90KiBhIHNsZWVwaW5nIGFsbG9jYXRpb24sIHJpZ2h0PyAgSXQgd2FrZXMgdXAga3N3YXBkLCBidXQgZG9lc24ndCBzbGVlcCBpdHNlbGYuICBJZiB0aGF0IG5vbi1zbGVlcGluZyBhbGxvY2F0aW9uIGZhaWxzLCBpdCByZS1lbmFibGVzIHByZWVtcHRpb24sIGRvZXMgYSBzbGVlcGFibGUgYWxsb2NhdGlvbiAoYEdGUF9OT0lPYCksIGFuZCB0aGVuIGRpc2FibGVzIHByZWVtcHRpb24gKmFnYWluKi4gU28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGFjdHVhbGx5LCBpbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgcHJlZW1wdGlvbiBpcyBoYW5kbGVkIGR1cmluZyB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cblxuR2l2ZW4gdGhpcyBsZXZlbCBvZiBjb3JlIGxvZ2ljIG1hbmlwdWxhdGlvbiB3aXRoaW4gWlJBTSwgdGhpcyAqZGVmaW5pdGVseSogd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcHJlZW1wdGlvbiwgcHJpbWUgYXJlYXMgZm9yIHN1YnRsZSBidWdzIHRvIGNyZWVwIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgYmFja2VuZCBhY3R1YWxseSBzZXRzIHRoaXMgYGFzeW5jYCBmbGFnLlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIEkgc2VhcmNoZWQgZm9yIFwiYXN5bmNcIiB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYCBkaXJlY3RvcnksIGFuZCBJIGRpZG4ndCBzZWUgYW55IGRpcmVjdCBzZXR0aW5nIG9mIGBhc3luY2AuIFBlcmhhcHMgaXQncyBzZXQgYnkgYSBjcnlwdG8gQVBJIHdyYXBwZXI/IEknbGwgY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCB0byBiZSBzdXJlLiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTowOS42MjI5ODE2OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjaW5jbHVkZSBcXFwiYmFja2VuZF9kZWZsYXRlLmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwiYmFja2VuZF84NDIuaFxcXCJcXG4gIDIyOlxcdFxcbiAgMjM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgKmJhY2tlbmRzW10gPSB7XFxuICAyNDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfWlJBTV9CQUNLRU5EX0xaTylcXG4gIDI1OlxcdFxcdFxcdTAwMjZiYWNrZW5kX2x6b3JsZSxcXG4gIDI2OlxcdFxcdFxcdTAwMjZiYWNrZW5kX2x6byxcXG4gIDI3OlxcdCNlbmRpZlxcbiAgMjg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXFxuICAyOTpcXHRcXHRcXHUwMDI2YmFja2VuZF9sejQsXFxuICAzMDpcXHQjZW5kaWZcXG4gIDMxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXFxuICAzMjpcXHRcXHRcXHUwMDI2YmFja2VuZF9sejRoYyxcXG4gIDMzOlxcdCNlbmRpZlxcbiAgMzQ6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9aU1REKVxcbiAgMzU6XFx0XFx0XFx1MDAyNmJhY2tlbmRfenN0ZCxcXG4gIDM2OlxcdCNlbmRpZlxcbiAgMzc6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxcbiAgMzg6XFx0XFx0XFx1MDAyNmJhY2tlbmRfZGVmbGF0ZSxcXG4gIDM5OlxcdCNlbmRpZlxcbiAgNDA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXFxuICA0MTpcXHRcXHRcXHUwMDI2YmFja2VuZF84NDIsXFxuICA0MjpcXHQjZW5kaWZcXG4gIDQzOlxcdFxcdE5VTExcXG4gIDQ0OlxcdH07XFxuICA0NTpcXHRcXG4gIDQ2OlxcdHN0YXRpYyB2b2lkIHpjb21wX3N0cm1fZnJlZShzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV9jdHgoXFx1MDAyNnpzdHJtLVxcdTAwM2VjdHgpO1xcbiAgNDk6XFx0XFx0dmZyZWUoenN0cm0tXFx1MDAzZWxvY2FsX2NvcHkpO1xcbiAgNTA6XFx0XFx0dmZyZWUoenN0cm0tXFx1MDAzZWJ1ZmZlcik7XFxuICA1MTpcXHRcXHR6c3RybS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIGludCB6Y29tcF9zdHJtX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRpbnQgcmV0O1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV9jdHgoY29tcC1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2enN0cm0tXFx1MDAzZWN0eCk7XFxuICA1OTpcXHRcXHRpZiAocmV0KVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0enN0cm0tXFx1MDAzZWxvY2FsX2NvcHkgPSB2emFsbG9jKFBBR0VfU0laRSk7XFxuICA2MzpcXHRcXHQvKlxcbiAgNjQ6XFx0XFx0ICogYWxsb2NhdGUgMiBwYWdlcy4gMSBmb3IgY29tcHJlc3NlZCBkYXRhLCBwbHVzIDEgZXh0cmEgZm9yIHRoZVxcbiAgNjU6XFx0XFx0ICogY2FzZSB3aGVuIGNvbXByZXNzZWQgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgb25lXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHpzdHJtLVxcdTAwM2VidWZmZXIgPSB2emFsbG9jKDIgKiBQQUdFX1NJWkUpO1xcbiAgNjg6XFx0XFx0aWYgKCF6c3RybS1cXHUwMDNlYnVmZmVyIHx8ICF6c3RybS1cXHUwMDNlbG9jYWxfY29weSkge1xcbiAgNjk6XFx0XFx0XFx0emNvbXBfc3RybV9mcmVlKGNvbXAsIHpzdHJtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MDkuNjIzMDU5NDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNTI1Mzg2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21wcmVzc2lvbiBQYXRjaDogQSBEZWVwIERpdmUgaW50byBQcmVlbXB0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiBvciBwcmVwYXJhdGlvbi4gVGhlcmUgYXJlIG5vIG90aGVyIGJhY2tlbmRzIHNwZWNpZmllZCwgd2hpY2ggbWVhbnMgYGFzeW5jYCBkZWZhdWx0cyB0byBgZmFsc2VgLiBCdXQgd2FpdCwgY291bGQgYSBmdXR1cmUgcGF0Y2ggaW50cm9kdWNlIGFuIGFzeW5jIGJhY2tlbmQ/IE9yIGlzIHRoaXMganVzdCBzZXR0aW5nIHRoZSBzdGFnZT9cblxuRXZlbiBpZiBpdCdzIGFsd2F5cyBgZmFsc2VgIGN1cnJlbnRseSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2luZy4gQmVmb3JlIHRoaXMsIGB6Y29tcF9zdHJlYW1fZ2V0YCBkaWRuJ3QgZXhwbGljaXRseSBkaXNhYmxlIHByZWVtcHRpb24uIE5vdyBpdCAqZG9lcyogZGlzYWJsZSBwcmVlbXB0aW9uIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQhIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIExldCBtZSBjaGVjayB0aGUgY29kZS5cblxuYGBgY1xuc3RydWN0IHpjb21wX3N0cm0gKnpjb21wX3N0cmVhbV9nZXQoc3RydWN0IHpjb21wICpjb21wKVxue1xuXHRmb3IgKDs7KSB7XG5cdFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtID0gcmF3X2NwdV9wdHIoY29tcC1cdTAwM2VzdHJlYW0pO1xuXG5cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3RybS1cdTAwM2Vsb2NrKTtcblx0XHRpZiAobGlrZWx5KHpzdHJtLVx1MDAzZWJ1ZmZlcikpXG5cdFx0XHRyZXR1cm4genN0cm07XG5cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpzdHJtLVx1MDAzZWxvY2spO1xuXHR9XG59XG5gYGBcblxuT2theSwgc28gbG9va2luZyBhdCBpdCwgaXQgc2VlbXMgaXQgZGlkbid0IGRpc2FibGUgcHJlZW1wdGlvbi4gQW5kIHRoYXQgbWVhbnMgYSB0YXNrIGNvdWxkIGJlIHByZWVtcHRlZCB3aGlsZSBob2xkaW5nIGB6c3RybS1cdTAwM2Vsb2NrYCwgYnV0IGB6c3RybS1cdTAwM2Vsb2NrYCBpcyBhIG11dGV4LCBhbmQgbXV0ZXhlcyBhcmUgc2xlZXBhYmxlLiBCdXQgd2FpdCwgaWYgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCwgeW91ICpjYW5ub3QqIHNsZWVwISBMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgYHpjb21wX2NvbXByZXNzYCBmdW5jdGlvbiBjYWxscyBgY29tcC1cdTAwM2VvcHMtXHUwMDNlY29tcHJlc3NgLiBJZiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCBgY29tcC1cdTAwM2VvcHMtXHUwMDNlY29tcHJlc3NgIGNhbid0IHNsZWVwLlxuXG5JIHJlbWVtYmVyIGB6Y29tcF9jb21wcmVzc2AgdXNlZCB0byBjYWxsIGBtaWdodF9zbGVlcCgpYC4gTGV0J3MgbG9vayBhdCB0aGUgYHpjb21wX2NvbXByZXNzYCBkaWZmIHRvIHNlZSBpZiB0aGlzIGNvbmZpcm1zIHdoYXQgSSBzdXNwZWN0OlxuXG5gYGBkaWZmXG5AQCAtMTUwLDcgKzE1Niw4IEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0bWlnaHRfc2xlZXAoKTtcbitcdGlmIChjb21wLVx1MDAzZW9wcy1cdTAwM2Vhc3luYylcbitcdFx0bWlnaHRfc2xlZXAoKTtcbiBcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4gYGBgXG5cbkFoLCB5ZXMuIEJlZm9yZSB0aGlzIHBhdGNoLCBgemNvbXBfY29tcHJlc3NgICpjb3VsZCogc2xlZXAsIGFuZCBgbWlnaHRfc2xlZXAoKWAgd2FzIGNhbGxlZC4gTm93LCBpZiBgIWFzeW5jYCAod2hpY2ggaXQgY3VycmVudGx5IGlzKSwgYG1pZ2h0X3NsZWVwKClgIGlzICpub3QqIGNhbGxlZCwgYW5kIHByZWVtcHRpb24gKmlzKiBkaXNhYmxlZCEgVGhhdCBtZWFucyBjb21wcmVzc2lvbiBhbGdvcml0aG1zIChsem8sIGx6NCwgenN0ZCwgZXRjLikgYXJlIG5vdyBleGVjdXRlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQhIFRoaXMgaXMgYSBtYXNzaXZlIGZ1bmN0aW9uYWwgc2hpZnQuIEl0IGNoYW5nZXMgdGhlIGNvbnRleHQgZnJvbSBwcmVlbXB0aWJsZSB0byBub24tcHJlZW1wdGlibGUuXG5cbkFuZCB0aGUgY2hhbmdlcyB0byBgenJhbV96c19tYWxsb2NgIGZ1cnRoZXIgcmVpbmZvcmNlIHRoaXMuIEJlZm9yZSwgaXQgd2FzIGRvaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBHRlBfTk9JT2ApIHdoaWxlIGhvbGRpbmcgdGhlIHN0cmVhbS4gTm93LCBpZiBgIWFzeW5jYCwgaXQgZmlyc3QgdHJpZXMgYSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gKGBfX0dGUF9LU1dBUERfUkVDTEFJTWApLiBJZiB0aGF0IGZhaWxzLCBpdCBlbmFibGVzIHByZWVtcHRpb24sIGRvZXMgdGhlIHNsZWVwYWJsZSBhbGxvY2F0aW9uLCBhbmQgZGlzYWJsZXMgaXQgYWdhaW4hXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgc2VyaW91cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6XG5cbiogICBgenJhbV93cml0ZV9wYWdlYFxuKiAgIGB6cmFtX3pzX21hbGxvY2BcbiogICBgemNvbXBfY29tcHJlc3NgXG4qICAgYHpjb21wX2RlY29tcHJlc3NgXG4qICAgYHpjb21wX3N0cmVhbV9nZXRgXG4qICAgYHpjb21wX3N0cmVhbV9wdXRgXG5cbkhvbGQgb24sIGB6cmFtX3pzX21hbGxvY2AgaXMgc3RhdGljLiBMZXQncyBtYWtlIGEgbGlzdCBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnM6XG5cbiogICBgemNvbXBfc3RyZWFtX2dldGBcbiogICBgemNvbXBfc3RyZWFtX3B1dGBcbiogICBgemNvbXBfY29tcHJlc3NgXG4qICAgYHpjb21wX2RlY29tcHJlc3NgXG4qICAgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBidXQgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igd3JpdGluZy4gVGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaXMgbGlrZWx5IGB6cmFtX2J2ZWNfcndgLCBgenJhbV9yd19wYWdlYCwgb3IgYHpyYW1fc3VibWl0X2Jpb2AuIExldCdzIGNoZWNrIGB6cmFtX2Rydi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyMS45NzU2MDA0NDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODMyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fd3JpdGVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz05MTE9c3RhdGljIGludCB6cmFtX3dyaXRlYmFja19jb21wbGV0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fd2JfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy05MzAtXFx0ICogV2UgcmVsZWFzZSBzbG90IGxvY2sgZHVyaW5nIHdyaXRlYmFjayBzbyBzbG90IGNhbiBjaGFuZ2UgdW5kZXIgdXM6XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6OTMxOlxcdCAqIHNsb3RfZnJlZSgpIG9yIHNsb3RfZnJlZSgpIGFuZCB6cmFtX3dyaXRlX3BhZ2UoKS4gSW4gYm90aCBjYXNlc1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTkzMi1cXHQgKiBzbG90IGxvc2VzIFpSQU1fUFBfU0xPVCBmbGFnLiBObyBjb25jdXJyZW50IHBvc3QtcHJvY2Vzc2luZyBjYW5cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNDg9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI4MjpzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjgzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNDg9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzU5LVxcdFxcdG1lbWNweV9mcm9tX2J2ZWMocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBidmVjKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzYwOlxcdFxcdHJldCA9IHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2MS1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY2PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzAtXFx0XFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzE6XFx0cmV0dXJuIHpyYW1fd3JpdGVfcGFnZSh6cmFtLCBidmVjLVxcdTAwM2Vidl9wYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjIyLjAyMDQ0MTgyOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI0NDA3ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIFdyaXRlIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIHdyaXRlIHBhdGguIEkgc2VlIGB6cmFtX2J2ZWNfd3JpdGVgIGNhbGxpbmcgYHpyYW1fd3JpdGVfcGFnZWAuIE5hdHVyYWxseSwgbXkgZmlyc3QgdGhvdWdodCBpcywgaXMgYHpyYW1fYnZlY193cml0ZWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0IG1vc3QgbGlrZWx5IGlzLiBJdCdzIGEga2VybmVsIGludGVybmFsIGZ1bmN0aW9uLCBzbyB0aGF0J3MgYSBmYWlyIGFzc3VtcHRpb24uIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24uLi4gd2hhdCBpcyB0aGUgYmlvIHN1Ym1pc3Npb24gZnVuY3Rpb24gaW4gdXNlIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSB1bHRpbWF0ZWx5IG1ha2VzIGl0cyB3YXkgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBvciwgaW4gdGhlIGNhc2Ugb2YgWlJBTSwgaG93IGl0J3MgY29tcHJlc3NlZCBhbmQgaGFuZGxlZCBpbiBtZW1vcnkuIFVuZGVyc3RhbmRpbmcgdGhlIGJpbyBzdWJtaXNzaW9uIGlzIGNyaXRpY2FsIHRvIHRoaXMgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaXQncyB0aGUgY2FzZSwgdGhhdCB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgYSBtZW1vcnkgZGV2aWNlIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBhIGNvbnZlbnRpb25hbCBkaXNrLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyNi4wNDQ4NTMxMTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTcxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fYnZlY193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgyPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM0Ny0gKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzQ4OnN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNDktXFx0XFx0XFx0XFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzY2OnN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzY3LVxcdFxcdFxcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjktXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MDpcXHRcXHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS1cXHRyZXR1cm4genJhbV93cml0ZV9wYWdlKHpyYW0sIGJ2ZWMtXFx1MDAzZWJ2X3BhZ2UsIGluZGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NDM9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3NTUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc1NjpcXHRcXHRpZiAoenJhbV9idmVjX3dyaXRlKHpyYW0sIFxcdTAwMjZidiwgaW5kZXgsIG9mZnNldCkgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjc1Ny1cXHRcXHRcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnpyYW0tXFx1MDAzZXN0YXRzLmZhaWxlZF93cml0ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OToyNi4wODkwMjkzMDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMjY3NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKlRoZSBXcml0ZSBGbG93IFdpdGhpbiB6cmFtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHdyaXRlIHBhdGggd2l0aGluIHpyYW0uIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIGdldHMgd3JpdHRlbiAob3IsIHdlbGwsICpwcmVwYXJlZCogZm9yIHdyaXRpbmcsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXByZXNzaW9uIGFuZCBiYWNraW5nIHN0b3JlKS4gTm93LCB3aGVyZSBkb2VzIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gZ2V0IGNhbGxlZCBmcm9tPyBBaCwgeWVzIOKAkyBpdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmlvIHJlcXVlc3RzIGRlc3RpbmVkIGZvciB0aGUgenJhbSBkZXZpY2UuIFNvLCB0aGUgc3VibWlzc2lvbiBmdW5jdGlvbiBpcyB3aGF0IG9yY2hlc3RyYXRlcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGJpbyBhbmQsIHVsdGltYXRlbHksIGNhbGxzIGB6cmFtX2Jpb193cml0ZWAgdG8gZGVhbCB3aXRoIHRoZSB3cml0aW5nLiBJIHdvdWxkIHRoZW4gY2hlY2sgdG8gZW5zdXJlIHRoYXQgYWxsIGJpbyByZXF1ZXN0cyBhcmUgYmVpbmcgY29ycmVjdGx5IHN1Ym1pdHRlZCB0aHJvdWdoIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGlzIGFsbG93cyBtZSB0byBrbm93IHRoYXQgZXZlcnkgd3JpdGUgcGF0aCBmbG93cyB0aHJvdWdoIHRoaXMgYHpyYW1fYmlvX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBmb3JtIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYmlvJ3Mgd3JpdGUgcGF0aCBnb2VzIHRocm91Z2ggYHpyYW1fYmlvX3dyaXRlYCwgd2hpY2ggc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24uIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgaGFwcGVucyB3aXRoaW4gYHpyYW1fYmlvX3dyaXRlYCDigJMgY29tcHJlc3Npb24sIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgSS9PIHRvIHRoZSBiYWNraW5nIGRldmljZSwgZXRjLiBCdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBteSBtZW50YWwgbWFwIG9mIHpyYW0ncyB3cml0ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjI5LjkyMTcwNzc4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9iaW9fd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjcxMj1zdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzQyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NDM6c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzQ0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NzY9c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODQtXFx0Y2FzZSBSRVFfT1BfV1JJVEU6XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc4NTpcXHRcXHR6cmFtX2Jpb193cml0ZSh6cmFtLCBiaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjI5Ljk2NzIxNjU1MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjczMDYyODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBmbG93IGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOlxuXG4qKlpSQU0gQ29tcHJlc3Npb24gRW50cnkgUG9pbnQgYW5kIERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgd2l0aGluIFpSQU0gaXMgYHpyYW1fc3VibWl0X2Jpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHdvdWxkIGJlIHRoZSBwb2ludCB3aGVyZSBJJ2QgZXhwZWN0IGJsb2NrIEkvTyByZXF1ZXN0cyB0byBiZSBoYW5kbGVkIGFuZCBmdW5uZWxlZCBpbnRvIHRoZSBaUkFNIGxheWVyIGZvciBwcm9jZXNzaW5nLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGF0IGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGlzIGhlYXZpbHkgZGVwZW5kZW50IG9uIHRoZSB6bGliIGxpYnJhcnkgd2l0aCBgemNvbXBfc3RyZWFtX2dldGAsIGFuZCBzcGVjaWZpY2FsbHkgYWxsb2NhdGVzIG1lbW9yeSB0aHJvdWdoIGB6cmFtX3pzX21hbGxvY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBhY3R1YWwgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBvZiBkYXRhIHdpdGhpbiBhIHNsb3QuIEknZCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhvc2UgZnVuY3Rpb25zIHRvIHNlZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmVpbmcgdXNlZCwgYnV0IHRoZSBsaW5rYWdlIGlzIGNsZWFyLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGZhY3QgdGhhdCBgcmVjb21wcmVzc19zbG90YCBpcyBjYWxsZWQgZnJvbSBgenJhbV9yZWNvbXByZXNzYCBpbXBsaWVzIHRoYXQncyBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgbGlrZWx5IG9yY2hlc3RyYXRpbmcgcmUtY29tcHJlc3Npb24gb2YgZGF0YS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYXMgdGhlIHJvb3QgZnVuY3Rpb24gZm9yIHRoZSB3aG9sZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjMzLjY0MDI4MjkyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4Njk3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wcmVzc19zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzOTA9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQzNC0gKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDM1OnN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzYtXFx0XFx0XFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI1MzA9c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI2NTI6XFx0XFx0ZXJyID0gcmVjb21wcmVzc19zbG90KHpyYW0sIHBwcy1cXHUwMDNlaW5kZXgsIHBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1My1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bnVtX3JlY29tcF9wYWdlcywgdGhyZXNob2xkLCBwcmlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzMuNjg2MTYxNzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDExOTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb21wcmVzc2lvbiBJbnRlcmZhY2UqKlxuXG5SaWdodCwgc28gYHJlY29tcHJlc3Nfc3RvcmVgIGlzIHRoZSBkZXNpZ25hdGVkIGVudHJ5IHBvaW50IGZvciB0aGUgc3lzZnMgaW50ZXJhY3Rpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zOiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSAqbm90KiBzdGF0aWMsIG9yLCBhdCBsZWFzdCwgbm90IGRlY2xhcmVkIGFzIHN1Y2gsIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGV4cG9ydGVkIHN5bWJvbHMgb3IgaWYgdGhleSdyZSBoaWRkZW4gc29tZWhvdy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlPyBBIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2wgdGFibGUgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBvciBpbnRlZ3JhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzcuMDQwMjgzMjc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1Nzc4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6MzcuMDg2NzQ0ODUzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjg5NDM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgWlJBTSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgWlJBTSBjb2RlLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBsaWtlIHBvdGVudGlhbCB0YXJnZXRzOiBgenJhbV9zdWJtaXRfYmlvYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGB6Y29tcF9zdHJlYW1fZ2V0YCwgYW5kIGB6Y29tcF9zdHJlYW1fcHV0YC4gVGhleSBhcmVuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbldhaXQgYSBzZWNvbmQsIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIGp1c3QgdGhlIHN0YW5kYXJkIGJsb2NrIGRldmljZSBiaW8gc3VibWlzc2lvbiBmdW5jdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGJsb2NrIGRldmljZSBvcGVyYXRpb24uIERpcmVjdGx5IGZ1enppbmcgdGhhdCBvbmUgbWlnaHQgYmUgdHJpY2t5IGlmIGl0J3Mgc3RhdGljLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgY2FuIGZ1enogYmxvY2sgZGV2aWNlcyBwcmV0dHkgZWZmZWN0aXZlbHkgdGhyb3VnaCBgL2Rldi96cmFtWGAuIEl0IGludGVyYWN0cyB3aXRoIGJsb2NrIGRldmljZXMgdmlhIG9wZW5pbmcgYC9kZXYvenJhbVhgIGFuZCBwZXJmb3JtaW5nIHJlYWQvd3JpdGUvaW9jdGwgb3BlcmF0aW9ucy4gSXQgYWxzbyBoaXRzIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNvIHRoYXQncyBjb3ZlcmVkLlxuXG5TbywgcmVhbGlzdGljYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgIGxvb2tzIGxpa2UgYSBnb29kLCBmb2N1c2VkIHN5bWJvbC4gIGB6Y29tcF9jb21wcmVzc2AgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byB0YXJnZXQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBPYnZpb3VzbHksIGBDT05GSUdfWlJBTWAgaXMgZXNzZW50aWFsLiBXaGF0IGVsc2UgbWlnaHQgYmUgaW52b2x2ZWQ/IEFoLCBJIHNlZSBhIHJlZmVyZW5jZSB0byBgSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgLiBJZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIGVuYWJsZWQsIHByZWVtcHRpb24gaXNuJ3QgZGlzYWJsZWQuIFNvLCBpZiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRlc3QgdGhlIG5ldyBwcmVlbXB0aW9uLWRpc2FibGVkIGNvZGUgcGF0aCwgSSAqc2hvdWxkbid0KiBlbmFibGUgYENPTkZJR19QUkVFTVBUX1JUYC4gSSB3b24ndCBuZWVkIHRvIGFkZCBgUFJFRU1QVF9SVGAgdG8gYEVuYWJsZUNvbmZpZ3NgLlxuXG5XaGF0IGFib3V0IG9wdGlvbnMgZm9yIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBsaWtlIGBDT05GSUdfWlJBTV9CQUNLRU5EX0xaT2A/IE5vLCB3YWl0LCBgQ09ORklHX1pSQU1gIGlzIGVub3VnaCwgc2luY2UgaXQgc2VsZWN0cyBhdCBsZWFzdCBvbmUgYmFja2VuZC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AganVzdCB0byBiZSBzdXJlLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjQ5OjQ0LjM1NTY5MjA2NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBaUkFNXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgIDU6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIGNhbGxlZCAvZGV2L3pyYW1YIChYID0gMCwgMSwgLi4uKS5cXG4gICA4OlxcdFxcdCAgUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeVxcbiAgIDk6XFx0XFx0ICBpdHNlbGYuIFRoZXNlIGRpc2tzIGFsbG93IHZlcnkgZmFzdCBJL08gYW5kIGNvbXByZXNzaW9uIHByb3ZpZGVzXFxuICAxMDpcXHRcXHQgIGdvb2QgYW1vdW50cyBvZiBtZW1vcnkgc2F2aW5ncy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXFxuICAxMzpcXHRcXHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuICAxODpcXHRcXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMjA6XFx0XFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbiAgMjE6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcXG4gIDI0OlxcdFxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDI2OlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xcbiAgMjc6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwienN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAzMjpcXHRcXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbiAgMzM6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG4gIDM2OlxcdFxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMzg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgMzk6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDQ0OlxcdFxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4gIDQ1OlxcdFxcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICA0OTpcXHRcXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDUwOlxcdFxcdFxcdCFaUkFNX0JBQ0tFTkRfWlNURCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0RFRkxBVEUgXFx1MDAyNlxcdTAwMjYgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo0NC4zNTU3Njg2OTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MjIyNTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipaUkFNIFBhdGNoIFJldmlldyAtIFNpZ25pZmljYW50IEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFpSQU1gIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYWRkIGBaUkFNYCB0byBgRW5hYmxlQ29uZmlnc2AsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYWRqdXN0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwcmVlbXB0aW9uIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgemNvbXBfc3RyZWFtX2dldGAgbm93IGRpc2FibGVzIHByZWVtcHRpb24gaWYgaXQncyBub3QgYXN5bmNocm9ub3VzIGFuZCBSVCBpcyAqbm90KiBlbmFibGVkLlxuKiAgIGB6Y29tcF9zdHJlYW1fcHV0YCAqZW5hYmxlcyogcHJlZW1wdGlvbi5cbiogICBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2Agbm93IGNvbmRpdGlvbmFsbHkgY2FsbCBgbWlnaHRfc2xlZXAoKWAgYmFzZWQgb24gdGhlIGBhc3luY2AgZmxhZy5cbiogICBgenJhbV96c19tYWxsb2NgIGF0dGVtcHRzIGEgbm9uLXNsZWVwYWJsZSBhbGxvY2F0aW9uIChgX19HRlBfS1NXQVBEX1JFQ0xBSU1gKSBmaXJzdCBpZiBub3QgYXN5bmMgYW5kIG5vIFJULlxuKiAgIGB6cmFtX3dyaXRlX3BhZ2VgIGFuZCBgcmVjb21wcmVzc19zbG90YCBub3cgcGFzcyBgYXN5bmNgIGRvd24gdG8gYHpyYW1fenNfbWFsbG9jYCBhbmQgYHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2VgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IGB6cmFtYCBoYW5kbGVzIG1lbW9yeSBhbmQgcHJlZW1wdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gYmFsYW5jZSBwZXJmb3JtYW5jZSBhbmQgbGF0ZW5jeSwgZXNwZWNpYWxseSBpbiBSVCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQgd2FudHMgdG8gYXZvaWQgc2xlZXBpbmcgaW4gbm9uLWFzeW5jIG1vZGUuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gSSdsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb246IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBgemNvbXBfZGVjb21wcmVzc2AsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gLiBJIGtub3cgdGhhdCdzIHN0YXRpYywgc28gaXQgcHJvYmFibHkgY2FsbHMgaW50byB0aG9zZSBvdGhlciBmdW5jcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1MC44Mzc5OTcxMDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYyNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNzQzPXN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc1LSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI3NzY6c3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzc3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTYyLVxcdC5vcGVuID0genJhbV9vcGVuLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5NjM6XFx0LnN1Ym1pdF9iaW8gPSB6cmFtX3N1Ym1pdF9iaW8sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk2NC1cXHQuc3dhcF9zbG90X2ZyZWVfbm90aWZ5ID0genJhbV9zbG90X2ZyZWVfbm90aWZ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1MC44ODE1NjU4OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk4NTI5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIEhvb2tpbmcgUG9pbnRzIGluIFpSQU0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBob29rIGludG8gdGhlIFpSQU0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgenJhbV9zdWJtaXRfYmlvYCwgd2hpY2ggaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBjbGFzc2ljIHByb2JsZW07IGl0IG1lYW5zIHN5emthbGxlciBsaWtlbHkgY2FuJ3QgaG9vayBpdCBkaXJlY3RseSBieSBuYW1lLiBJIHdhcyBjb25zaWRlcmluZyBpZiBpdCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgd2FpdCwgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdGhlIGNhc2U7IGl0IHNob3VsZCBiZSBhZGRyZXNzYWJsZS5cblxuVGhlbiBJIHNoaWZ0ZWQgbXkgZm9jdXMgdG8gYHpjb21wX2NvbXByZXNzYCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGV5J3JlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGV4cG9ydGVkLCBtYWtpbmcgdGhlbSBob29rYWJsZS4gSSB0aG91Z2h0LCBcIkdyZWF0LCB0aG9zZSBjb3VsZCBiZSBlYXNpZXIgdGFyZ2V0cyFcIiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHRoZXkgcmVhbGx5IGV4cG9ydGVkPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gdXNhZ2UuICpIbW0qLiBPa2F5LCBJJ3ZlIGNoZWNrZWQgYW5kIEkgd2FzIHdyb25nLCBgRVhQT1JUX1NZTUJPTGAgaXMgbm90IHVzZWQuIFRoZXkgYXJlIG5vdCBleHBvcnRlZCwgZGVzcGl0ZSBiZWluZyBub24tc3RhdGljLCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBvbiBgemNvbXBfY29tcHJlc3NgIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgaXMgbm90IHByb21pc2luZy5cblxuTGV0J3MgcmVmb2N1cyBvbiB0aGUgaW1wb3J0YW50IHZhcmlhYmxlIGFuZCBjaGVjayB0aGF0IHRoZSBzdGF0aWMga2V5d29yZCBpcyBub3QgYXBwbGllZCB0byBgemNvbXBfY29tcHJlc3NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1NS40ODAwOTgyMDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjkxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NvbXByZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTEzOT12b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE0ODppbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMTQ5LVxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMTo0OTo1NS41NTQ3OTI2NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkzNDk0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzIFN5bWJvbCBDb25maXJtYXRpb24gXHUwMDI2IFJlY29tcHJlc3MgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gYHpjb21wX2NvbXByZXNzYCwgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGFuZCBgemNvbXBfZGVjb21wcmVzc2Ag4oCTIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuIFRoYXQncyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZCwgYW5kIGl0J3MgZ29vZCB0byBzZWUgdGhhdCBjb25maXJtZWQgZXhwbGljaXRseS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBpbiB0aGlzIGFyZWEuIFdpdGggdGhlc2UgY29uZmlybWVkIGFzIG15IGZvY3VzLCBJIGNhbiBub3cgbW92ZSBmb3J3YXJkLCBJIHdhcyBhbHJlYWR5IGV4cGVjdGluZyB0aGVtIHRvIGJlIGRlZmluZWQgaW4gYSBub24tc3RhdGljIHdheS4gXG5cbk5leHQgdXAsIEknbGwgZGlyZWN0IG15IGF0dGVudGlvbiB0byBgcmVjb21wcmVzc19zdG9yZWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6NTkuMDQ4Mjg5NzY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYzNzYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MzU9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTI5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MzA6c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjUzMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDE6NDk6NTkuMDkxOTMwNjUzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNDUwNjY2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBaUkFNIENvbXByZXNzaW9uIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGByZWNvbXByZXNzX3N0b3JlYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aGF0LiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaG9zZSBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmUuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IGNhbGxpbmcgdGhlIG1vZGlmaWVkIGNvZGU/IExldCdzIHNlZS4uLiBgenJhbV96c19tYWxsb2NgIGlzIHN0YXRpYywgYHpyYW1fd3JpdGVfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHJlY29tcHJlc3Nfc2xvdGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IHRoZSBmb3VyIEkgbGlzdGVkLlxuXG5TbywgSSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGB6Y29tcF9zdHJlYW1fZ2V0YCwgYHpjb21wX3N0cmVhbV9wdXRgLCBgemNvbXBfY29tcHJlc3NgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggYW5kIGNydWNpYWxseSwgdGhleSBhcmUgKm5vbi1zdGF0aWMqLCB3aGljaCBtZWFucyB0aGV5IGhhdmUgYnJvYWRlciB2aXNpYmlsaXR5IGFuZCBtb3JlIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uXG5cblRoZSBwYXRjaCdzIGltcGFjdCBpcyBzaWduaWZpY2FudC4gSXQncyBjaGFuZ2luZyB0aGUgZnVuZGFtZW50YWwgcHJlZW1wdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3Igd2l0aGluIHRoZSB6cmFtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZGlzYWJsaW5nIHByZWVtcHRpb24gYW5kIGF2b2lkaW5nIHNsZWVwIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyByZWxhdGVkIHRvIGFuIGBhc3luY2AgZmxhZywgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBuYXN0eSBidWdzLiBJbWFnaW5lIHNsZWVwaW5nIHdoaWxlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQhIE9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJJ20gb24gaGlnaCBhbGVydC4gWWVzLCBgemNvbXBfc3RyZWFtX2dldGAgaXMgZGVmaW5lZCBpbiBgemNvbXAuY2AgYW5kIGRlY2xhcmVkIGluIGB6Y29tcC5oYCwganVzdCBhcyBleHBlY3RlZC4gVGhlIHNhbWUgZm9yIHRoZSBvdGhlciB0aHJlZS4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwgY29kZS5cblxuVGhlIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaXMgYFpSQU1gLlxuXG5NeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgYGFzeW5jYCBmbGFnIGZvciB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzLCBhbmQgc2lnbmlmaWNhbnRseSBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBhbmQgYXR0ZW1wdCBub24tc2xlZXBhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLiBBbnkgY2hhbmdlcyB0aGF0IGFmZmVjdCBwcmVlbXB0aW9uIGNvbnRleHQgb3IgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgY2FuIGludHJvZHVjZSBjcml0aWNhbCBidWdzLiBUaGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMjksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAxOjUwOjA4LjMzNjk5OTgwMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjY4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfc3RyZWFtX2dldFwiLFxuICAgIFwiemNvbXBfc3RyZWFtX3B1dFwiLFxuICAgIFwiemNvbXBfY29tcHJlc3NcIixcbiAgICBcInpjb21wX2RlY29tcHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGBhc3luY2AgZmxhZyB0byB6cmFtIGNvbXByZXNzaW9uIGJhY2tlbmRzIGFuZCBtb2RpZmllcyBgemNvbXBfc3RyZWFtX2dldGAsIGB6Y29tcF9zdHJlYW1fcHV0YCwgYHpjb21wX2NvbXByZXNzYCwgYW5kIGB6Y29tcF9kZWNvbXByZXNzYCB0byBkaXNhYmxlIHByZWVtcHRpb24gYW5kIGF2b2lkIHNsZWVwaW5nIHdoZW4gYCFhc3luY2AuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGluIGB6cmFtX3pzX21hbGxvY2AgdG8gdHJ5IG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbiBmaXJzdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGxvZ2ljLCBhbHRlcmluZyBwcmVlbXB0aW9uIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgbGlrZSBzbGVlcGluZyB3aGlsZSBhdG9taWMgb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3N0cmVhbV9nZXRcIixcbiAgICBcInpjb21wX3N0cmVhbV9wdXRcIixcbiAgICBcInpjb21wX2NvbXByZXNzXCIsXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBgYXN5bmNgIGZsYWcgdG8genJhbSBjb21wcmVzc2lvbiBiYWNrZW5kcyBhbmQgbW9kaWZpZXMgYHpjb21wX3N0cmVhbV9nZXRgLCBgemNvbXBfc3RyZWFtX3B1dGAsIGB6Y29tcF9jb21wcmVzc2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFuZCBhdm9pZCBzbGVlcGluZyB3aGVuIGAhYXN5bmNgLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgenJhbV96c19tYWxsb2NgIHRvIHRyeSBub24tc2xlZXBhYmxlIGFsbG9jYXRpb24gZmlyc3Qgd2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBsb2dpYywgYWx0ZXJpbmcgcHJlZW1wdGlvbiBjb250ZXh0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2Ugc2xlZXBpbmcgd2hpbGUgYXRvbWljIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp8jxf[1] Phase: Succeeded StartedAt: 2026-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 01:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 01:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2] Phase: Succeeded StartedAt: 2026-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 01:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:20 +0000 UTC FinishedAt: 2026-08-05 01:50:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"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-workflowp8jxf/series-workflowp8jxf-convert-artifact-3114694341/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:30 +0000 UTC FinishedAt: 2026-08-05 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:30 +0000 UTC FinishedAt: 2026-08-05 02:07:07 +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:*b95263ad-11fd-4ba9-998b-318d837cc680,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-workflowp8jxf/series-workflowp8jxf-convert-artifact-3114694341/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": "86d70019-a1c1-45de-bd86-b5b2098797db", "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-workflowp8jxf/series-workflowp8jxf-build-action-1621564779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 01:50:30 +0000 UTC FinishedAt: 2026-08-05 02:06:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b95263ad-11fd-4ba9-998b-318d837cc680,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-workflowp8jxf/series-workflowp8jxf-convert-artifact-3114694341/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": "86d70019-a1c1-45de-bd86-b5b2098797db", "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-workflowp8jxf/series-workflowp8jxf-build-action-1621564779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:07 +0000 UTC FinishedAt: 2026-08-05 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:07 +0000 UTC FinishedAt: 2026-08-05 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:07 +0000 UTC FinishedAt: 2026-08-05 02:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:07 +0000 UTC FinishedAt: 2026-08-05 02:07:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-workflowp8jxf/series-workflowp8jxf-convert-artifact-1976799136/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:17 +0000 UTC FinishedAt: 2026-08-05 02:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:07:17 +0000 UTC FinishedAt: 2026-08-05 02:09:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86d70019-a1c1-45de-bd86-b5b2098797db,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-workflowp8jxf/series-workflowp8jxf-build-action-1621564779/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-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:09:15 +0000 UTC FinishedAt: 2026-08-05 02:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:09:15 +0000 UTC FinishedAt: 2026-08-05 02:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:09:15 +0000 UTC FinishedAt: 2026-08-05 02:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:09:15 +0000 UTC FinishedAt: 2026-08-05 02:25:15 +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:*b95263ad-11fd-4ba9-998b-318d837cc680,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-workflowp8jxf/series-workflowp8jxf-convert-artifact-1976799136/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": "63e05e74-c273-4446-b2ff-8959da6cd3a1", "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-workflowp8jxf/series-workflowp8jxf-build-action-2650047836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:09:15 +0000 UTC FinishedAt: 2026-08-05 02:25:06 +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:*b95263ad-11fd-4ba9-998b-318d837cc680,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-workflowp8jxf/series-workflowp8jxf-convert-artifact-1976799136/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": "63e05e74-c273-4446-b2ff-8959da6cd3a1", "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-workflowp8jxf/series-workflowp8jxf-build-action-2650047836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:25:15 +0000 UTC FinishedAt: 2026-08-05 02:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:25:15 +0000 UTC FinishedAt: 2026-08-05 02:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:25:15 +0000 UTC FinishedAt: 2026-08-05 02:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:25:15 +0000 UTC FinishedAt: 2026-08-05 02:27:01 +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:*63e05e74-c273-4446-b2ff-8959da6cd3a1,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-workflowp8jxf/series-workflowp8jxf-build-action-2650047836/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-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*86d70019-a1c1-45de-bd86-b5b2098797db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*63e05e74-c273-4446-b2ff-8959da6cd3a1,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-workflowp8jxf/series-workflowp8jxf-build-action-1621564779/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-workflowp8jxf/series-workflowp8jxf-build-action-2650047836/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 02:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 02:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8jxf/series-workflowp8jxf-convert-artifact-76836089/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 02:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 02:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:11 +0000 UTC FinishedAt: 2026-08-05 02:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:21 +0000 UTC FinishedAt: 2026-08-05 05:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8jxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_stream_get","zcomp_stream_put","zcomp_compress","zcomp_decompress"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM"],"series_id":"7316970b-c9e2-4dad-9fb9-63b596ed70e9","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-08-05 02:27:21 +0000 UTC FinishedAt: 2026-08-05 05:30:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86d70019-a1c1-45de-bd86-b5b2098797db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*63e05e74-c273-4446-b2ff-8959da6cd3a1,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-workflowp8jxf/series-workflowp8jxf-build-action-1621564779/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-workflowp8jxf/series-workflowp8jxf-build-action-2650047836/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-workflowp8jxf/series-workflowp8jxf-convert-artifact-76836089/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,}