Name: series-workflown6prd Phase: Succeeded StartedAt: 2026-08-01 21:41:54 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[0] Phase: Succeeded StartedAt: 2026-08-01 21:41:54 +0000 UTC FinishedAt: 2026-08-01 22:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 21:41:54 +0000 UTC FinishedAt: 2026-08-01 22:03:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "790a2ceb-2881-48e0-97b5-b8a1c7ff62a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_alloc_userspi" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fYWxsb2NfdXNlcnNwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4OGM3YTExZmEyYmZkYmI2ZTY0Y2VhNzU1ODkyODQ4NTBlODhiN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjAyOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLmE3ZjM1YTEyMzY0OGQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgYWxsb2NfY29tcGF0YCBpbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHNlYyBYRlJNIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODhjN2ExMWZhMmJmZGJiNmU2NGNlYTc1NTg5Mjg0ODUwZTg4YjdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMjowMjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggZDZkYjYzMzA0YmE2Yi4uYTdmMzVhMTIzNjQ4ZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTE4NzcsNyAmIzQzOzE4NzcsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7Ci0Jc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyOwogCXN0cnVjdCBza19idWZmICpyZXNwX3NrYjsKIAl4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7CiAJaW50IGZhbWlseTsKQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gb3V0OwogCX0KIAotCXh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTsKLQlpZiAoeHRyKSB7Ci0JCWVyciA9IHh0ci0mZ3Q7YWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpOwotCi0JCXhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWVfc2tiKHJlc3Bfc2tiKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOwogCiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgYSBYRlJNIFVzZXJzcGFjZSBTUEkgQWxsb2NhdGlvbiBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBYRlJNIHVzZXJzcGFjZSBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJdCYjMzk7cyB0YXJnZXRpbmcgdGhlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGZ1bmN0aW9uLCB3aGljaCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgU2VjdXJpdHkgUGFyYW1ldGVyIEluZGljZXMgKFNQSXMpIGZyb20gdXNlciBzcGFjZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBjYWxsIHRvIGB4dHItJmd0O2FsbG9jX2NvbXBhdCgpYC4gSG1tLCBpbnRlcmVzdGluZy4gVGhpcyBzb3VuZHMgbGlrZSBpdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIElQc2VjIChYRlJNKSBuZXRsaW5rIGludGVyYWN0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGlzLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYHhmcm1fYWxsb2NfdXNlcnNwaWAgYW5kIHdoYXQgdGhvc2UgY2FsbHMgYWN0dWFsbHkgZGlkLiBUaW1lIHRvIGJyZWFrIG91dCBgZ2l0IGdyZXBgIGFuZCBsb29rIGZvciBhbGwgaW5zdGFuY2VzIG9mIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIHdpdGhpbiB0aGUgcmVsZXZhbnQga2VybmVsIHRyZWUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGVsc2UgaXMgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIGFuZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzJiMzOTsgaW1wYWN0LiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTg0OT1zdGF0aWMgaW50IHhmcm1fZ2V0X3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4NzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODczOnN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTg3NC1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0Ny1cdFx0XHRcdFx0XHQgICAuZG9uZSA9IHhmcm1fZHVtcF9wb2xpY3lfZG9uZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0ODpcdFtYRlJNX01TR19BTExPQ1NQSSAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWxsb2NfdXNlcnNwaSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbmFsaXR5KioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIFNvLCBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyB0aGUgd29ya2hvcnNlIGZvciBoYW5kbGluZyB0aGUgYFhGUk1fTVNHX0FMTE9DU1BJYCBuZXRsaW5rIG1lc3NhZ2UuIFRoYXQmIzM5O3MgZ29vZC4gSXQgbWVhbnMgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb21wb25lbnQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYFhGUk1fVVNFUmAgdG8gYmUgb3BlcmF0aW9uYWwuIEdvdHRhIGVuc3VyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBhbGxvY2F0aW9uIHRvIGV2ZW4gd29yayBhcyBpbnRlbmRlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyBhbGwgaW4gcGxhY2UuIEdvdHRhIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9VU0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFhGUk1fVVNFUmAsIGFuZCBteSBmb2N1cyBpcyBvbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGFueSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gR290IGl0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBgWEZSTV9VU0VSYCB0byBFbmFibGVDb25maWdzLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBzdGF0aWMuIEhtbSwgYnV0IHdhaXQgYSBtaW51dGUuLi4gdGhvc2UgZ3VpZGVsaW5lcyBhcmUgc3VnZ2VzdGluZyBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEl04oCZcyBhIGJpdCB0cmlja3kgaGVyZSBiZWNhdXNlIHRoaXMgaXMgYSBuZXRsaW5rIGhhbmRsZXIuIEJlY2F1c2UgaXQmIzM5O3MgcmVmZXJlbmNlZCBpbiB0aGUgYHhmcm1fbGlua2AgYXJyYXksIEkgc3VzcGVjdCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdC4gQnV0IG1heWJlLCBqdXN0IG1heWJlLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgbmV0bGluayBkaXNwYXRjaCBmdW5jdGlvbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBob3cgdGhlIGB4ZnJtX2xpbmtgIGFycmF5IGlzIHVzZWQuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2xpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTU0PUVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk1NS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6Mzk1NjpzdGF0aWMgdm9pZCB4ZnJtX2xpbmtfZmFpbHVyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTU3LXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTMzLVx0XHRpZiAobGlrZWx5KGRzdF9vcHMtXHUwMDNlbGlua19mYWlsdXJlID09IE5VTEwpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTM0Olx0XHRcdGRzdF9vcHMtXHUwMDNlbGlua19mYWlsdXJlID0geGZybV9saW5rX2ZhaWx1cmU7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMzUtXHRcdGlmIChsaWtlbHkoZHN0X29wcy1cdTAwM2VuZWlnaF9sb29rdXAgPT0gTlVMTCkpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzcyODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI5LVx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MjktXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgmIzQzOzFdO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcdGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsgKmxpbms7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODMxLVx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBEaXNwYXRjaCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV0bGluayBzZXR1cCwgc3BlY2lmaWNhbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIGB4ZnJtX3VzZXJfcmN2X21zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGRlY2VudCBlbnRyeSBwb2ludCB0byBleGFtaW5lLCBhbHRob3VnaCBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgeGZybV91c2VyX3Jjdl9tc2dgIGV2ZW4gc3RhdGljPyBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5Li4uIFllcywgaXQgYXBwZWFycyBpdCBpcy4gVGhhdCBzbGlnaHRseSBsaW1pdHMgd2hlcmUgaXQmIzM5O3MgdXNlZCBkaXJlY3RseS4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZSBjb3JlIGxvZ2ljIGlzIGhpZGRlbiB3aXRoaW4gdGhpcyBzdGF0aWMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIHRoYXQmIzM5O3Mgbm90IHN0YXRpYyBpcyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB4ZnJtXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogUmUtZXZhbHVhdGluZyB0aGUgQXBwcm9hY2gqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcHJvYmxlbSBhZ2Fpbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gcmVhY2ggZm9yIGBeaW50YCwgYnV0IHNvbWV0aGluZyYjMzk7cyB0ZWxsaW5nIG1lIHRvIHBhdXNlLiBUaGVyZSYjMzk7cyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IHdlIG1pZ2h0IGJlIG92ZXItY29tcGxpY2F0aW5nIHRoaW5ncyBvciBwZXJoYXBzIGp1bXBpbmcgdG8gYSBzcGVjaWZpYyBzb2x1dGlvbiBwcmVtYXR1cmVseS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lIHdpdGggYSBzaW1wbGVyIGFwcHJvYWNoIGZpcnN0LCBiZWZvcmUgZ2V0dGluZyBib2dnZWQgZG93biBpbiBtb3JlIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyBvciBjb25zdHJ1Y3RzLiBUaGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcmVhZGFiaWxpdHkgYmVuZWZpdHMgb2YgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLiBJJiMzOTtsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgZXhwbG9yaW5nIGEgbW9yZSBmdW5kYW1lbnRhbCBzb2x1dGlvbiBiZWZvcmUgcmVzb3J0aW5nIHRvIGEgcG90ZW50aWFsbHkgbW9yZSByZXNvdXJjZS1pbnRlbnNpdmUgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X10mIzQzOyB4ZnJtXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhpcyBmaWxlLiBNeSBndXQgZmVlbGluZyBpcyB3ZSYjMzk7dmUgZ290IGEgbG90IG9mIHN0YXRpYyBtZXRob2RzIHNjYXR0ZXJlZCBhcm91bmQsIGJ1dCBqdXN0IGluIGNhc2UsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYWJvdXQuIFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGRlc2lnbiBwcmluY2lwbGVzIHdlJiMzOTtyZSB1c2luZyBsZWFuIGhlYXZpbHkgb24gc3RhdGljIHV0aWxpdHkgbWV0aG9kcyB0byBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQgYW5kIGZvY3VzZWQuIElmIGEgbm9uLXN0YXRpYyBtZXRob2QgaGFzIGNyZXB0IGluLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoeS4gV2FzIGl0IGFjY2lkZW50YWw/IE9yIGlzIGl0IGluZGljYXRpdmUgb2YgYSB2aW9sYXRpb24gb2YgdGhlIGNob3NlbiBhcmNoaXRlY3R1cmFsIHN0eWxlPyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB3ZSBtYXkgbmVlZCB0byByZWRlc2lnbi4gQSBxdWljayByZXZpZXcgbGlrZSB0aGlzIHNhdmVzIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW14gXFx0XS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM5MjIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg6c3RhdGljIHN0cnVjdCBzb2NrICp4ZnJtX25ldF9ubHNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwLVx0LyogZ2V0IHRoZSBzb3VyY2Ugb2YgdGhpcyByZXF1ZXN0LCBzZWUgbmV0bGlua191bmljYXN0X2tlcm5lbCAqL1xubmV0L3hmcm0veGZybV91c2VyLmM6NDE6XHRjb25zdCBzdHJ1Y3Qgc29jayAqc2sgPSBORVRMSU5LX0NCKHNrYikuc2s7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzLVx0Lyogc2sgaXMgcmVmY291bnRlZCwgdGhlIG5ldG5zIHN0YXlzIGFsaXZlIGFuZCBubHNrIHdpdGggaXQgKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Olx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZXhmcm0ubmxzaywgc2stXHUwMDNlc2tfbmV0X3JlZmNudCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NS19XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3OnN0YXRpYyBpbnQgdmVyaWZ5X29uZV9hbGcoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ4LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTM6XHRpZiAoIXJ0KVxubmV0L3hmcm0veGZybV91c2VyLmMtNTQtXHRcdHJldHVybiAwO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjpcdGFsZ3AgPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NzpcdGlmIChubGFfbGVuKHJ0KSBcdTAwM2MgKGludCl4ZnJtX2FsZ19sZW4oYWxncCkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgQVVUSC9DUllQVC9DT01QIGF0dHJpYnV0ZSBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxLVxubmV0L3hmcm0veGZybV91c2VyLmM6NjI6XHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzLVx0Y2FzZSBYRlJNQV9BTEdfQVVUSDpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02OC1cdGRlZmF1bHQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo2OTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGFsZ29yaXRobSBhdHRyaWJ1dGUgdHlwZVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy03MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo3MzpcdGFsZ3AtXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xubmV0L3hmcm0veGZybV91c2VyLmMtNzQtXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy03Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjc3OnN0YXRpYyBpbnQgdmVyaWZ5X2F1dGhfdHJ1bmMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxubmV0L3hmcm0veGZybV91c2VyLmMtNzgtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtODItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo4MzpcdGlmICghcnQpXG5uZXQveGZybS94ZnJtX3VzZXIuYy04NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy04NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg2Olx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg3Olx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KXhmcm1fYWxnX2F1dGhfbGVuKGFsZ3ApKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo4ODpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIEFVVEhfVFJVTkMgYXR0cmlidXRlIGxlbmd0aFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy04OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MjpcdGFsZ3AtXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xubmV0L3hmcm0veGZybV91c2VyLmMtOTMtXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk2OnN0YXRpYyBpbnQgdmVyaWZ5X2FlYWQoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5uZXQveGZybS94ZnJtX3VzZXIuYy05Ny17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTAwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAxOlx0aWYgKCFydClcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMi1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDQ6XHRhbGdwID0gbmxhX2RhdGEocnQpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MTA1Olx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KWFlYWRfbGVuKGFsZ3ApKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDY6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBBRUFEIGF0dHJpYnV0ZSBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDktXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMTA6XHRhbGdwLVx1MDAzZWFsZ19uYW1lW3NpemVvZihhbGdwLVx1MDAzZWFsZ19uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5Oztcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExMS1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExNDpzdGF0aWMgdm9pZCB2ZXJpZnlfb25lX2FkZHIoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExNS1cdFx0XHQgICB4ZnJtX2FkZHJlc3NfdCAqKmFkZHJwKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExOTpcdGlmIChydCBcdTAwMjZcdTAwMjYgYWRkcnApXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjA6XHRcdCphZGRycCA9IG5sYV9kYXRhKHJ0KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMS19XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjM6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3NlY19jdHhfbGVuKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMTI0LXtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjg6XHRpZiAoIXJ0KVxubmV0L3hmcm0veGZybV91c2VyLmMtMTI5LVx0XHRyZXR1cm4gMDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEzMTpcdHVjdHggPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzI6XHRpZiAodWN0eC1cdTAwM2VsZW4gXHUwMDNlIG5sYV9sZW4ocnQpIHx8XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzM6XHQgICAgdWN0eC1cdTAwM2VsZW4gIT0gKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpICYjNDM7IHVjdHgtXHUwMDNlY3R4X2xlbikpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEzNDpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNlY3VyaXR5IGNvbnRleHQgbGVuZ3RoXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTQwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTQxOnN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9yZXBsYXkoc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gKnAsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDItXHRcdFx0XHRzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHU4IHNhX2Rpcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDg6XHRpZiAoIXJ0KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDk6XHRcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX0VTTikge1xubmV0L3hmcm0veGZybV91c2VyLmM6MTUwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTTlwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU1LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTU2Olx0cnMgPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTg6XHRpZiAocnMtXHUwMDNlYm1wX2xlbiBcdTAwM2UgWEZSTUFfUkVQTEFZX0VTTl9NQVggLyBzaXplb2YocnMtXHUwMDNlYm1wWzBdKSAvIDgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtFU04gYml0bWFwIGxlbmd0aCBtdXN0IGJlIFx1MDAzYz0gMTI4XCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTYzOlx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KXhmcm1fcmVwbGF5X3N0YXRlX2Vzbl9sZW4ocnMpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV91c2VyLmM6MTY0Olx0ICAgIG5sYV9sZW4ocnQpICE9IHNpemVvZigqcnMpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjU6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIGF0dHJpYnV0ZSBpcyB0b28gc2hvcnQgdG8gZml0IHRoZSBmdWxsIGJpdG1hcCBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTY2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjktXHQvKiBBcyBvbmx5IEVTUCBhbmQgQUggc3VwcG9ydCBFU04gZmVhdHVyZS4gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3MDpcdGlmICgocC1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCkgXHUwMDI2XHUwMDI2IChwLVx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fQUgpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIG9ubHkgc3VwcG9ydGVkIGZvciBFU1AgYW5kIEFIXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTc0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTc1Olx0aWYgKHAtXHUwMDNlcmVwbGF5X3dpbmRvdyAhPSAwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzY6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIG5vdCBjb21wYXRpYmxlIHdpdGggbGVnYWN5IHJlcGxheV93aW5kb3dcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTc3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODA6XHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkgIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MTpcdFx0aWYgKHJzLVx1MDAzZXJlcGxheV93aW5kb3cpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODQtXHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NTpcdFx0aWYgKHJzLVx1MDAzZXNlcSB8fCBycy1cdTAwM2VzZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODctXHRcdFx0XHQgICAgICAgXCYjMzQ7UmVwbGF5IHNlcSBhbmQgc2VxX2hpIHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MTpcdFx0aWYgKCEocC1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTI6XHRcdFx0aWYgKHJzLVx1MDAzZW9zZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MzpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk0LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTk3LVx0XHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODpcdFx0XHRpZiAocnMtXHUwMDNlb3NlcSA9PSBVMzJfTUFYKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwMC1cdFx0XHRcdFx0ZXh0YWNrLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNC1cdFx0fSBlbHNlIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNTpcdFx0XHRpZiAocnMtXHUwMDNlb3NlcSA9PSBVMzJfTUFYIFx1MDAyNlx1MDAyNiBycy1cdTAwM2Vvc2VxX2hpID09IFUzMl9NQVgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMjA3LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjExLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTI6XHRcdGlmIChycy1cdTAwM2VibXBfbGVuKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYXkgYm1wX2xlbiBzaG91bGQgMCBmb3Igb3V0cHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIxNC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTg6XHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX0lOKSAge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjE5Olx0XHRpZiAocnMtXHUwMDNlb3NlcSB8fCBycy1cdTAwM2Vvc2VxX2hpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMjA6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjIxLVx0XHRcdFx0ICAgICAgIFwmIzM0O1JlcGxheSBvc2VxIGFuZCBvc2VxX2hpIHNob3VsZCBiZSAwIGZvciBpbnB1dCBTQVwmIzM0Oyk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjIzLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMjQ6XHRcdGlmICghKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjI1Olx0XHRcdGlmIChycy1cdTAwM2VzZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMjI3LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjMxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MjMyOlx0XHRcdGlmIChycy1cdTAwM2VzZXEgPT0gVTMyX01BWCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjMzOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzQtXHRcdFx0XHRcdGV4dGFjayxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgtXHRcdH0gZWxzZSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk6XHRcdFx0aWYgKHJzLVx1MDAzZXNlcSA9PSBVMzJfTUFYIFx1MDAyNlx1MDAyNiBycy1cdTAwM2VzZXFfaGkgPT0gVTMyX01BWCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjQwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNDEtXHRcdFx0XHRcdGV4dGFjayxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTE6c3RhdGljIGludCB2ZXJpZnlfbXRpbWVyX3RocmVzaChib29sIGhhc19lbmNhcCwgdTggZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUyLVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjUzLXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDpcdGlmICghaGFzX2VuY2FwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTU6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Ni1cdFx0XHQgICAgICAgXCYjMzQ7TVRJTUVSX1RIUkVTSCByZXF1aXJlcyBlbmNhcHN1bGF0aW9uXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTgtXHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTk6XHRpZiAoZGlyID09IFhGUk1fU0FfRElSX09VVCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjYwOlx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjEtXHRcdFx0ICAgICAgIFwmIzM0O01USU1FUl9USFJFU0ggc2hvdWxkIG5vdCBiZSBzZXQgb24gb3V0cHV0IFNBXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNjc6c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjY4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI2OTpcdHN3aXRjaCAoZmFtaWx5KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzAtXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjcyLVx0Y2FzZSBBRl9JTkVUNjpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzUtI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHN1cHBvcnQgZGlzYWJsZWRcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjc3LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzktXHRkZWZhdWx0OlxubmV0L3hmcm0veGZybV91c2VyLmM6MjgwOlx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYWRkcmVzcyBmYW1pbHlcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjgxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODU6c3RhdGljIGludCB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKHUxNiBmYW1pbHksXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODYtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjg4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI4OTpcdHN3aXRjaCAoZmFtaWx5KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTAtXHRjYXNlIEFGX1VOU1BFQzpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTItXHRjYXNlIEFGX0lORVQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTM6XHRcdGlmIChzZWwtXHUwMDNlcHJlZml4bGVuX2QgXHUwMDNlIDMyIHx8IHNlbC1cdTAwM2VwcmVmaXhsZW5fcyBcdTAwM2UgMzIpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBwcmVmaXggbGVuZ3RoIGluIHNlbGVjdG9yIChtdXN0IGJlIFx1MDAzYz0gMzIgZm9yIElQdjQpXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTktXHRjYXNlIEFGX0lORVQ2OlxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV91c2VyLmM6MzAxOlx0XHRpZiAoc2VsLVx1MDAzZXByZWZpeGxlbl9kIFx1MDAzZSAxMjggfHwgc2VsLVx1MDAzZXByZWZpeGxlbl9zIFx1MDAzZSAxMjgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDM6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBwcmVmaXggbGVuZ3RoIGluIHNlbGVjdG9yIChtdXN0IGJlIFx1MDAzYz0gMTI4IGZvciBJUHY2KVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzA3LSNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDg6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwOS1cdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExLVx0ZGVmYXVsdDpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGFkZHJlc3MgZmFtaWx5IGluIHNlbGVjdG9yXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzE2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzE3OnN0YXRpYyBpbnQgdmVyaWZ5X25ld3NhX2luZm8oc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gKnAsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTgtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzIxLVx0aW50IGVycjtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyMjpcdHU4IHNhX2RpciA9IG5sYV9nZXRfdThfZGVmYXVsdChhdHRyc1tYRlJNQV9TQV9ESVJdLCAwKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyMy1cdHUxNiBmYW1pbHkgPSBwLVx1MDAzZXNlbC5mYW1pbHk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjU6XHRlcnIgPSB2ZXJpZnlfeGZybV9mYW1pbHkocC1cdTAwM2VmYW1pbHksIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjY6XHRpZiAoZXJyKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzI3LVx0XHRnb3RvIG91dDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTpcdGlmICghZmFtaWx5IFx1MDAyNlx1MDAyNiAhKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfQUZfVU5TUEVDKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMC1cdFx0ZmFtaWx5ID0gcC1cdTAwM2VmYW1pbHk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI6XHRlcnIgPSB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKGZhbWlseSwgXHUwMDI2cC1cdTAwM2VzZWwsIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzM6XHRpZiAoZXJyKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzYtXHRlcnIgPSAtRUlOVkFMO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzM3Olx0c3dpdGNoIChwLVx1MDAzZWlkLnByb3RvKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzgtXHRjYXNlIElQUFJPVE9fQUg6XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzk6XHRcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdXHRcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MC1cdFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O01pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlIGZvciBBSDogQVVUSF9UUlVOQyBvciBBVVRIXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0Mi1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDU6XHRcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cdHx8XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDYtXHRcdCAgICBhdHRyc1tYRlJNQV9BTEdfQ1JZUFRdXHR8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0OC1cdFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlcyBmb3IgQUg6IEFFQUQsIENSWVBULCBDT01QLCBURkNQQURcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzUwLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NC1cdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTU6XHRcdGlmIChhdHRyc1tYRlJNQV9BTEdfQ09NUF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlIGZvciBFU1A6IENPTVBcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzU3LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2MDpcdFx0aWYgKCFhdHRyc1tYRlJNQV9BTEdfQVVUSF0gXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjEtXHRcdCAgICAhYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2My1cdFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O01pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlIGZvciBFU1A6IGF0IGxlYXN0IG9uZSBvZiBBVVRILCBBVVRIX1RSVU5DLCBDUllQVCwgQUVBRFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4Olx0XHRpZiAoKGF0dHJzW1hGUk1BX0FMR19BVVRIXSB8fFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY5LVx0XHQgICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIX1RSVU5DXSB8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MS1cdFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BRUFEXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MzcyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBhdHRyaWJ1dGUgY29tYmluYXRpb24gZm9yIEVTUDogQUVBRCBjYW4mIzM5O3QgYmUgdXNlZCB3aXRoIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBUXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3My1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY6XHRcdGlmIChhdHRyc1tYRlJNQV9URkNQQURdIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3LVx0XHQgICAgcC1cdTAwM2Vtb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1RGQyBwYWRkaW5nIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHVubmVsIG1vZGVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzc5LVx0XHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmMtMzgwLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzozODE6XHRcdGlmICgoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSB8fFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgyLVx0XHQgICAgIGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSB8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4Ny1cdFx0ICAgIHAtXHUwMDNlbW9kZSAhPSBYRlJNX01PREVfSVBURlMpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0lQLVRGUyBvcHRpb25zIGNhbiBvbmx5IGJlIHVzZWQgaW4gSVAtVEZTIG1vZGVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzg5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5My1cdGNhc2UgSVBQUk9UT19DT01QOlxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk0Olx0XHRpZiAoIWF0dHJzW1hGUk1BX0FMR19DT01QXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzk1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIENPTVA6IENPTVBcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzk2LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5OTpcdFx0aWYgKGF0dHJzW1hGUk1BX0FMR19BRUFEXVx0fHxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMC1cdFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIXVx0fHxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDMtXHRcdCAgICBhdHRyc1tYRlJNQV9URkNQQURdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGF0dHJpYnV0ZXMgZm9yIENPTVA6IEFFQUQsIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBURkNQQURcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA1LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwODpcdFx0aWYgKG50b2hsKHAtXHUwMDNlaWQuc3BpKSBcdTAwM2U9IDB4MTAwMDApIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwOTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NQSSBpcyB0b28gbGFyZ2UgZm9yIENPTVAgKG11c3QgYmUgXHUwMDNjIDB4MTAwMDApXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxMC1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUtXHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNi1cdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L3hmcm0veGZybV91c2VyLmM6NDE3Olx0XHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdXHR8fFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE4LVx0XHQgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdXHR8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNC1cdFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlcyBmb3IgRFNUT1BUUy9ST1VUSU5HXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNi1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mjk6XHRcdGlmICghYXR0cnNbWEZSTUFfQ09BRERSXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NDMwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBDT0FERFIgYXR0cmlidXRlIGZvciBEU1RPUFRTL1JPVVRJTkdcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDMxLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNi1cdGRlZmF1bHQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mzc6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgcHJvdG9jb2xcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDM4LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDE6XHRpZiAoKGVyciA9IHZlcmlmeV9hZWFkKGF0dHJzLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0Mi1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDM6XHRpZiAoKGVyciA9IHZlcmlmeV9hdXRoX3RydW5jKGF0dHJzLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NC1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDU6XHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQVVUSCwgZXh0YWNrKSkpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDYtXHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmM6NDQ3Olx0aWYgKChlcnIgPSB2ZXJpZnlfb25lX2FsZyhhdHRycywgWEZSTUFfQUxHX0NSWVBULCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0OC1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDk6XHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQ09NUCwgZXh0YWNrKSkpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTAtXHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmM6NDUxOlx0aWYgKChlcnIgPSB2ZXJpZnlfc2VjX2N0eF9sZW4oYXR0cnMsIGV4dGFjaykpKVxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyLVx0XHRnb3RvIG91dDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MzpcdGlmICgoZXJyID0gdmVyaWZ5X3JlcGxheShwLCBhdHRycywgc2FfZGlyLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDU2LVx0ZXJyID0gLUVJTlZBTDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1NzpcdHN3aXRjaCAocC1cdTAwM2Vtb2RlKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTgtXHRjYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzLVx0Y2FzZSBYRlJNX01PREVfSVBURlM6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjQ6XHRcdGlmIChwLVx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fRVNQKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgbW9kZSBvbmx5IHN1cHBvcnRlZCB3aXRoIEVTUFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjYtXHRcdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjctXHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2ODpcdFx0aWYgKHNhX2RpciA9PSAwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Njk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgbW9kZSByZXF1aXJlcyBpbiBvciBvdXQgZGlyZWN0aW9uIGF0dHJpYnV0ZVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzAtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDc0LVx0ZGVmYXVsdDpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3NTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtb2RlXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ3Ni1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDgwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDgxOlx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODI6XHRcdGVyciA9IHZlcmlmeV9tdGltZXJfdGhyZXNoKCEhYXR0cnNbWEZSTUFfRU5DQVBdLCBzYV9kaXIsIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODM6XHRcdGlmIChlcnIpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00ODQtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDg2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDg3Olx0aWYgKHNhX2RpciA9PSBYRlJNX1NBX0RJUl9PVVQpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4ODpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfREVDQVBfRFNDUCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NDg5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmxhZyBERUNBUF9EU0NQIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDkwLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDkzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDk0Olx0XHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9TVEFURV9JQ01QKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0OTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIElDTVAgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIG91dHB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTYtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDA6XHRcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX1dJTERSRUNWKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIFdJTERSRUNWIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTAyLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTA1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NTA2Olx0XHRpZiAocC1cdTAwM2VyZXBsYXlfd2luZG93KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYXkgd2luZG93IHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTA4LVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTExLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTEyOlx0XHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTEzOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIGRyb3AgdGltZSBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxODpcdFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTE5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIHJlb3JkZXIgd2luZG93IHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTIwLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTIzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTI0Olx0XHRpZiAoYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyNS1cdFx0XHRzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgKnJlcGxheTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNzpcdFx0XHRyZXBsYXkgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01MjgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Mjk6XHRcdFx0aWYgKHJlcGxheS1cdTAwM2VzZXEgfHwgcmVwbGF5LVx1MDAzZWJpdG1hcCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTMwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxubmV0L3hmcm0veGZybV91c2VyLmMtNTMxLVx0XHRcdFx0XHQgICAgICAgXCYjMzQ7UmVwbGF5IHNlcSBhbmQgYml0bWFwIHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUzNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzODpcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzOTpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfTk9QTVRVRElTQykge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTQwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmxhZyBOT1BNVFVESVNDIHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDEtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NDU6XHRcdGlmIChhdHRyc1tYRlJNQV9TQV9FWFRSQV9GTEFHU10pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0NjpcdFx0XHR1MzIgeGZsYWdzID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfU0FfRVhUUkFfRkxBR1NdKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU0Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0ODpcdFx0XHRpZiAoeGZsYWdzIFx1MDAyNiBYRlJNX1NBX1hGTEFHX0RPTlRfRU5DQVBfRFNDUCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTQ5Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIERPTlRfRU5DQVBfRFNDUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTUwLVx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTQ6XHRcdFx0aWYgKHhmbGFncyBcdTAwMjYgWEZSTV9TQV9YRkxBR19PU0VRX01BWV9XUkFQKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTU6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZsYWcgT1NFUV9NQVlfV1JBUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTU2LVx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjI6XHRcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19ET05UX0ZSQUddKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgZG9uJiMzOTt0IGZyYWdtZW50IHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjQtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Njg6XHRcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19JTklUX0RFTEFZXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIGluaXRpYWwgZGVsYXkgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3MC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3My1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NDpcdFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX01BWF9RU0laRV0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0lQLVRGUyBtYXggcXVldWUgc2l6ZSBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTc2LVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTc5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NTgwOlx0XHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfUEtUX1NJWkVdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1ODE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgcGFja2V0IHNpemUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Mi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4NzpcdGlmICghc2FfZGlyIFx1MDAyNlx1MDAyNiBhdHRyc1tYRlJNQV9TQV9QQ1BVXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTg4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NBX1BDUFUgb25seSBzdXBwb3J0ZWQgd2l0aCBTQV9ESVJcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTg5LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU5Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5NzpzdGF0aWMgaW50IGF0dGFjaF9vbmVfYWxnbyhzdHJ1Y3QgeGZybV9hbGdvICoqYWxncHAsIHU4ICpwcm9wcyxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5ODpcdFx0XHQgICBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKigqZ2V0X2J5bmFtZSkoY29uc3QgY2hhciAqLCBpbnQpLFxubmV0L3hmcm0veGZybV91c2VyLmMtNTk5LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKnJ0YSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwNDpcdGlmICghcnRhKVxubmV0L3hmcm0veGZybV91c2VyLmMtNjA1LVx0XHRyZXR1cm4gMDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwNzpcdHVhbGcgPSBubGFfZGF0YShydGEpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNjA4LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjA5Olx0YWxnbyA9IGdldF9ieW5hbWUodWFsZy1cdTAwM2VhbGdfbmFtZSwgMSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MTA6XHRpZiAoIWFsZ28pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxMTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXF1ZXN0ZWQgQ09NUCBhbGdvcml0aG0gbm90IGZvdW5kXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNjE1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjE2Olx0cCA9IGttZW1kdXAodWFsZywgeGZybV9hbGdfbGVuKHVhbGcpLCBHRlBfS0VSTkVMKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNzpcdGlmICghcClcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxOC1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQveGZybS94ZnJtX3VzZXIuYy02MTktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjA6XHRzdHJzY3B5KHAtXHUwMDNlYWxnX25hbWUsIGFsZ28tXHUwMDNlbmFtZSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjEtXHQqYWxncHAgPSBwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYyNC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYyNTpzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MzAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzE6XHRpZiAoIXJ0YSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU1BJIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgcmlnaHQsIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0JiMzOTtzIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBYRlJNX01TR19BTExPQ1NQSWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMsIHRoZSBjb3JlIG9mIHRoaXMgdGhpbmcuIFRoZSBwYXRjaCYjMzk7cyByZW1vdmluZyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kIGB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKWAgZnJvbSB0aGVyZSwgc28gZnVuY3Rpb25hbGx5LCBpdCBzZWVtcyBzb3VuZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGFzIHRoZSBrZXkgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBJIG1lYW4sIGl0JiMzOTtzIHRoZSBmb2NhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9uLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbS4gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCBJIGNhbiYjMzk7dCBsb29rIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCBhIGJyb2FkZXIgc2NvcGUuCgpPa2F5LCBzbyBpZiBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyBzdGF0aWMsIHdoYXQmIzM5O3MgY2FsbGluZyBpdD8gSXMgaXQgdGhlIG9ubHkgZnVuY3Rpb24gaGFuZGxpbmcgdGhpcz8gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIG5vbi1zdGF0aWMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgeGZybV91c2VyX3Jjdl9tc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBBbmQsIHNpbmNlIGl0IGhhbmRsZXMgbmV0bGluayBtZXNzYWdlcywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYHhmcm1fbmV0bGlua19yY3ZgIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIG1lc3NhZ2UgZmxvdyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmV0bGlua19yY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTEyOnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MTMte1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDA9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNC1cdFx0Lmdyb3Vwc1x0PSBYRlJNTkxHUlBfTUFYLFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcdFx0LmlucHV0XHQ9IHhmcm1fbmV0bGlua19yY3YsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgWEZSTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGB4ZnJtX25ldGxpbmtfcmN2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgbWUgY3VyaW91cyBhYm91dCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIGNoZWNrIGB4ZnJtX3VzZXJfbmV0X2luaXRgIG5leHQuIEFscmlnaHQsIGl0JiMzOTtzIHN0YXRpYyB0b28uIFRoYXTigJlzIGludGVyZXN0aW5nLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzZXR1cCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYHhmcm1fdXNlcl9pbml0YCBmdW5jdGlvbiwgc2VlIGhvdyBldmVyeXRoaW5nIHRpZXMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlcl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTQ2Mjk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4ZnJtX3VzZXJfbmV0X29wcyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjM0LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDYzNTpzdGF0aWMgaW50IF9faW5pdCB4ZnJtX3VzZXJfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNi17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDY0OD1zdGF0aWMgdm9pZCBfX2V4aXQgeGZybV91c2VyX2V4aXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjUzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDY1NDptb2R1bGVfaW5pdCh4ZnJtX3VzZXJfaW5pdCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjU1LW1vZHVsZV9leGl0KHhmcm1fdXNlcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZSBhYm91dCBgeGZybV91c2VyLmNgOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgeGZybV91c2VyLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGB4ZnJtX3VzZXIuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGEgZ29vZCBjaHVuayBvZiBpdHMgY29tcG9uZW50cyBhcmUgcHJvYmFibHkgc3RhdGljYWxseSBkZWNsYXJlZCwgd2hpY2ggaXNuJiMzOTt0IHVudXN1YWwgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzLCBzbyBteSBtYWluIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgYW55ICpkeW5hbWljYWxseSogYXZhaWxhYmxlIGVsZW1lbnRzIGluIHRoaXMgZmlsZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBhc3N1bXB0aW9uIGF0IHRoZSBtb21lbnQgaXMgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBtb3N0bHkgc3RhdGljIGVsZW1lbnRzLCBleGNlcHQgZm9yIGEgZmV3IHNwZWNpZmljIGV4cG9ydGVkIGZ1bmN0aW9ucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEVYUE9SVF9TWU1CT0xgIHdpdGhpbiB0aGUgc291cmNlIGZpbGUuIFRoaXMgbWFjcm8gd2lsbCBpbW1lZGlhdGVseSBpZGVudGlmeSBhbnkgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIG1vZHVsZSBpdHNlbGYuIFRoYXQgc2VhcmNoIHdpbGwgcXVpY2tseSBjb25maXJtIG9yIGRpc3Byb3ZlIG15IGluaXRpYWwgaHlwb3RoZXNpcyBhYm91dCB0aGUgc2NvcGUgb2YgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzY0Nz1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NzMtfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NzQ6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NzUtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzY3OD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIwLX07XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzIxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGUmIzM5O3MgU3RydWN0dXJlKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlYWRpbHkgYXZhaWxhYmxlIHRvIHVzZSBhcyBhIHByaW1hcnkgZm9jdXMgcG9pbnQuIE5vIHByb2JsZW0sIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgdGFyZ2V0IGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGluc3RlYWQuIEV2ZW4gaWYgaXQmIzM5O3MgdGVjaG5pY2FsbHkgYSBzdGF0aWMgZnVuY3Rpb24sIGl0cyBwcmVzZW5jZSBpbiB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXkgbWFrZXMgaXQgYSBkZWNlbnQgdGFyZ2V0LiBJdCB3b24mIzM5O3QgYmUgaW5saW5lZCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4KCkhhbmcgb24gYSBtb21lbnQgdGhvdWdoLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYHhmcm1fcHV0X3RyYW5zbGF0b3JgLiBUaG9zZSBtaWdodCBvZmZlciBhIGJldHRlciwgbW9yZSBhcHByb3ByaWF0ZSBhbmdsZSBvbiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSBmb3IgYW5hbHlzaXMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHBpY2tpbmcgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY2FsIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2dldF90cmFuc2xhdG9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0yMzE3PWV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3RyYW5zbGF0b3Ioc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyKTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzE4OmV4dGVybiBzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4ZnJtX2dldF90cmFuc2xhdG9yKHZvaWQpO1xuaW5jbHVkZS9uZXQveGZybS5oLTIzMTktZXh0ZXJuIHZvaWQgeGZybV9wdXRfdHJhbnNsYXRvcihzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIpO1xuaW5jbHVkZS9uZXQveGZybS5oLTIzMjAtI2Vsc2VcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzIxOnN0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeGZybV9nZXRfdHJhbnNsYXRvcih2b2lkKVxuaW5jbHVkZS9uZXQveGZybS5oLTIzMjIte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTQ5PXN0YXRpYyBzdHJ1Y3QgeGZybV90cmFuc2xhdG9yIF9fcmN1ICp4ZnJtX3RyYW5zbGF0b3I7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk1MC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTUxOnN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTUyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2dldF90cmFuc2xhdG9yKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY2LVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMDA3PWludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjgtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMwMjk6XHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDMwLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE0OTc9c3RhdGljIGludCBkdW1wX29uZV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTUyMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1MjE6XHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTIyLVx0aWYgKHh0cikge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE2Mjc9c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MzctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjM4Olx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTYzOS1cdGlmICh4dHIpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzkzPXN0YXRpYyBpbnQgZHVtcF9vbmVfcG9saWN5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI0MjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNDI3Olx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjQyOC1cdGlmICh4dHIpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zODI1PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzg0NS1cdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFx1MDAyNlx1MDAyNiBpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQ2Olx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipGb2N1c2luZyBvbiBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgd2FzIGp1c3QgcmVtb3ZlZCBmcm9tIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBBbHJpZ2h0LCB0aGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZCwgdGhlIHN5bWJvbCB0aGF0IEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGlzIGdvaW5nIHRvIGJlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBUaGF04oCZcyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLCB3aGljaCBzaG91bGQgYmUgYFhGUk1fVVNFUmAuIEhvbGQgb24gYSBzZWNvbmTigKYgSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBYRlJNX1VTRVJgIGRlZmluaXRpb24gYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgY29ycmVjdGx5LiBHb3R0YSBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9VU0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMAoJCQkJCQkJb3V0cHV0OiA5OAoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFhGUk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBYRlJNX1VTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgYmVpbmcgYWZmZWN0ZWQuIEtub3dpbmcgdGhhdCwgSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgKldvcnRoRnV6emluZyouIFRoaXMgY2hhbmdlIHRvIHRoZSBJUHNlYyBYRlJNIHVzZXIgaW50ZXJmYWNlIGlzIGEgZnVuY3Rpb25hbCBvbmUuCgpUaGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGlzIG5ldGxpbmsgaGFuZGxlci4gU2luY2UgYFhGUk1fVVNFUmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBhbHNvIGVuYWJsZWQgZm9yIHRoYXQuIFRoZSBwYXRjaCByZW1vdmVzIGNhbGxzIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgc28gdGhpcyB3aWxsIG5lZWQgc3BlY2lmaWMgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fYWxsb2NfdXNlcnNwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjYWxsIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgaW4gdGhlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIG5ldGxpbmsgaGFuZGxlciwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBzZWMgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzIuMTMyMjEwODc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzNTcxNTkxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9hbGxvY191c2Vyc3BpXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgYWxsb2NfY29tcGF0YCBpbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHNlYyBYRlJNIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjMyLjEzMjIxODM3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNTU4MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDg4YzdhMTFmYTJiZmRiYjZlNjRjZWE3NTU4OTI4NDg1MGU4OGI3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjAyOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi5hN2YzNWExMjM2NDhkIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xcbi1cXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcXG4gXFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xcbiBcXHRpbnQgZmFtaWx5O1xcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuLVxcdGlmICh4dHIpIHtcXG4tXFx0XFx0ZXJyID0geHRyLVxcdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XFxuLVxcbi1cXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuLVxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gXFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjozMi42NTY4MjI3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzgzMjUzMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4YzdhMTFmYTJiZmRiYjZlNjRjZWE3NTU4OTI4NDg1MGU4OGI3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMjI6MDI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi5hN2YzNWExMjM2NDhkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgKzE5NDIsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4tXHRpZiAoeHRyKSB7XG4tXHRcdGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4tXG4tXHRcdHhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGtmcmVlX3NrYihyZXNwX3NrYik7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGVyciA9IG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJlc3Bfc2tiLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjozMi42NTY4MjUzNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMzOTMwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQW5hbHl6aW5nIGEgWEZSTSBVc2Vyc3BhY2UgU1BJIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBYRlJNIHVzZXJzcGFjZSBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJdCdzIHRhcmdldGluZyB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgZnVuY3Rpb24sIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kaWNlcyAoU1BJcykgZnJvbSB1c2VyIHNwYWNlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcigpYCBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIGNhbGwgdG8gYHh0ci1cdTAwM2VhbGxvY19jb21wYXQoKWAuIEhtbSwgaW50ZXJlc3RpbmcuIFRoaXMgc291bmRzIGxpa2UgaXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIElQc2VjIChYRlJNKSBuZXRsaW5rIGludGVyYWN0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGlzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGFuZCB3aGF0IHRob3NlIGNhbGxzIGFjdHVhbGx5IGRpZC4gVGltZSB0byBicmVhayBvdXQgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgYWxsIGluc3RhbmNlcyBvZiBgeGZybV9hbGxvY191c2Vyc3BpYCB3aXRoaW4gdGhlIHJlbGV2YW50IGtlcm5lbCB0cmVlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbiBhbmQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcycgaW1wYWN0LiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzYuNjkwNzU5MjcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzg2MzgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9hbGxvY191c2Vyc3BpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE4NDk9c3RhdGljIGludCB4ZnJtX2dldF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4NzItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTg3MzpzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODc0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAuZG9uZSA9IHhmcm1fZHVtcF9wb2xpY3lfZG9uZSB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDg6XFx0W1hGUk1fTVNHX0FMTE9DU1BJICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hbGxvY191c2Vyc3BpIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OS1cXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzkuMzI5NDM5NTEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNzQzNTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbmFsaXR5KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBTbywgYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgdGhlIHdvcmtob3JzZSBmb3IgaGFuZGxpbmcgdGhlIGBYRlJNX01TR19BTExPQ1NQSWAgbmV0bGluayBtZXNzYWdlLiBUaGF0J3MgZ29vZC4gSXQgbWVhbnMgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb21wb25lbnQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoYXQncyByZXF1aXJlZCBmb3IgYFhGUk1fVVNFUmAgdG8gYmUgb3BlcmF0aW9uYWwuIEdvdHRhIGVuc3VyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBhbGxvY2F0aW9uIHRvIGV2ZW4gd29yayBhcyBpbnRlbmRlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgYWxsIGluIHBsYWNlLiBHb3R0YSBsb29rIGF0IHRoZSBidWlsZCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo0Mi4yNjY4Nzc5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNjk0NTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9VU0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo0NS4wNzM4MzA2MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAyMzAwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgWEZSTV9VU0VSYCwgYW5kIG15IGZvY3VzIGlzIG9uIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYW55IGRlcGVuZGVuY2llcy4gUmlnaHQsIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgLiBHb3QgaXQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgWEZSTV9VU0VSYCB0byBFbmFibGVDb25maWdzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYHhmcm1fYWxsb2NfdXNlcnNwaWAgcmV2ZWFscyB0aGF0IGl0J3Mgc3RhdGljLiBIbW0sIGJ1dCB3YWl0IGEgbWludXRlLi4uIHRob3NlIGd1aWRlbGluZXMgYXJlIHN1Z2dlc3RpbmcgSSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJdOKAmXMgYSBiaXQgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGEgbmV0bGluayBoYW5kbGVyLiBCZWNhdXNlIGl0J3MgcmVmZXJlbmNlZCBpbiB0aGUgYHhmcm1fbGlua2AgYXJyYXksIEkgc3VzcGVjdCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBCdXQgbWF5YmUsIGp1c3QgbWF5YmUsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaW5jbHVkaW5nIHRoZSBuZXRsaW5rIGRpc3BhdGNoIGZ1bmN0aW9uLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2guIEknbGwgdGFrZSBhIGxvb2sgYXQgaG93IHRoZSBgeGZybV9saW5rYCBhcnJheSBpcyB1c2VkLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6NDkuNDc2MTM0NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTg3MDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTU0PUVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5NTUtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozOTU2OnN0YXRpYyB2b2lkIHhmcm1fbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTU3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDExMT1pbnQgeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbywgaW50IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEzMy1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZWxpbmtfZmFpbHVyZSA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMzQ6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlbGlua19mYWlsdXJlID0geGZybV9saW5rX2ZhaWx1cmU7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTM1LVxcdFxcdGlmIChsaWtlbHkoZHN0X29wcy1cXHUwMDNlbmVpZ2hfbG9va3VwID09IE5VTEwpKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcyNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI5LVxcdGludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgyOS1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgrMV07XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcXHRjb25zdCBzdHJ1Y3QgeGZybV9saW5rICpsaW5rO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzEtXFx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjUxLjkzMjAwOTk4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDAyMzc0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIERpc3BhdGNoIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0bGluayBzZXR1cCwgc3BlY2lmaWNhbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIGB4ZnJtX3VzZXJfcmN2X21zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGRlY2VudCBlbnRyeSBwb2ludCB0byBleGFtaW5lLCBhbHRob3VnaCBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgeGZybV91c2VyX3Jjdl9tc2dgIGV2ZW4gc3RhdGljPyBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5Li4uIFllcywgaXQgYXBwZWFycyBpdCBpcy4gVGhhdCBzbGlnaHRseSBsaW1pdHMgd2hlcmUgaXQncyB1c2VkIGRpcmVjdGx5LiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgbG9naWMgaXMgaGlkZGVuIHdpdGhpbiB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCB0aGF0J3Mgbm90IHN0YXRpYyBpcyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo1NS41MzIyNDk4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc0MzQ1MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB4ZnJtXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjU1LjY0MTAwMTA2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI1MTk5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogUmUtZXZhbHVhdGluZyB0aGUgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHByb2JsZW0gYWdhaW4uIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHJlYWNoIGZvciBgXmludGAsIGJ1dCBzb21ldGhpbmcncyB0ZWxsaW5nIG1lIHRvIHBhdXNlLiBUaGVyZSdzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgd2UgbWlnaHQgYmUgb3Zlci1jb21wbGljYXRpbmcgdGhpbmdzIG9yIHBlcmhhcHMganVtcGluZyB0byBhIHNwZWNpZmljIHNvbHV0aW9uIHByZW1hdHVyZWx5LiBMZXQncyBzZWUgaWYgd2UgY2FuIGFjaGlldmUgdGhlIGRlc2lyZWQgb3V0Y29tZSB3aXRoIGEgc2ltcGxlciBhcHByb2FjaCBmaXJzdCwgYmVmb3JlIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gbW9yZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMgb3IgY29uc3RydWN0cy4gVGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHJlYWRhYmlsaXR5IGJlbmVmaXRzIG9mIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgZXhwbG9yaW5nIGEgbW9yZSBmdW5kYW1lbnRhbCBzb2x1dGlvbiBiZWZvcmUgcmVzb3J0aW5nIHRvIGEgcG90ZW50aWFsbHkgbW9yZSByZXNvdXJjZS1pbnRlbnNpdmUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzowMS43NjYyMDQwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODU4ODE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9dKyB4ZnJtXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjAxLjg0MjA2OTc3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExODQwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhpcyBmaWxlLiBNeSBndXQgZmVlbGluZyBpcyB3ZSd2ZSBnb3QgYSBsb3Qgb2Ygc3RhdGljIG1ldGhvZHMgc2NhdHRlcmVkIGFyb3VuZCwgYnV0IGp1c3QgaW4gY2FzZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFib3V0LiBUaGUgY29udGV4dCBoZXJlIGlzIGtleS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGRlc2lnbiBwcmluY2lwbGVzIHdlJ3JlIHVzaW5nIGxlYW4gaGVhdmlseSBvbiBzdGF0aWMgdXRpbGl0eSBtZXRob2RzIHRvIGtlZXAgdGhpbmdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZm9jdXNlZC4gSWYgYSBub24tc3RhdGljIG1ldGhvZCBoYXMgY3JlcHQgaW4sIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aHkuIFdhcyBpdCBhY2NpZGVudGFsPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgdmlvbGF0aW9uIG9mIHRoZSBjaG9zZW4gYXJjaGl0ZWN0dXJhbCBzdHlsZT8gSWYgaXQncyB0aGUgbGF0dGVyLCB3ZSBtYXkgbmVlZCB0byByZWRlc2lnbi4gQSBxdWljayByZXZpZXcgbGlrZSB0aGlzIHNhdmVzIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MDQuODUzOTEzMDk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzEyMjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW14gXFxcXHRdLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM5MjIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg6c3RhdGljIHN0cnVjdCBzb2NrICp4ZnJtX25ldF9ubHNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOS17XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAtXFx0LyogZ2V0IHRoZSBzb3VyY2Ugb2YgdGhpcyByZXF1ZXN0LCBzZWUgbmV0bGlua191bmljYXN0X2tlcm5lbCAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxOlxcdGNvbnN0IHN0cnVjdCBzb2NrICpzayA9IE5FVExJTktfQ0Ioc2tiKS5zaztcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00My1cXHQvKiBzayBpcyByZWZjb3VudGVkLCB0aGUgbmV0bnMgc3RheXMgYWxpdmUgYW5kIG5sc2sgd2l0aCBpdCAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0OlxcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC1cXHUwMDNleGZybS5ubHNrLCBzay1cXHUwMDNlc2tfbmV0X3JlZmNudCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3OnN0YXRpYyBpbnQgdmVyaWZ5X29uZV9hbGcoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OC1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzOlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTQtXFx0XFx0cmV0dXJuIDA7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTY6XFx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NzpcXHRpZiAobmxhX2xlbihydCkgXFx1MDAzYyAoaW50KXhmcm1fYWxnX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgQVVUSC9DUllQVC9DT01QIGF0dHJpYnV0ZSBsZW5ndGhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYyOlxcdHN3aXRjaCAodHlwZSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzLVxcdGNhc2UgWEZSTUFfQUxHX0FVVEg6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02OC1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjY5OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgYWxnb3JpdGhtIGF0dHJpYnV0ZSB0eXBlXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy03Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo3MzpcXHRhbGdwLVxcdTAwM2VhbGdfbmFtZVtzaXplb2YoYWxncC1cXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTc0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Nzc6c3RhdGljIGludCB2ZXJpZnlfYXV0aF90cnVuYyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy04Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo4MzpcXHRpZiAoIXJ0KVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTg0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTg1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg2OlxcdGFsZ3AgPSBubGFfZGF0YShydCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6ODc6XFx0aWYgKG5sYV9sZW4ocnQpIFxcdTAwM2MgKGludCl4ZnJtX2FsZ19hdXRoX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgQVVUSF9UUlVOQyBhdHRyaWJ1dGUgbGVuZ3RoXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtODktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MjpcXHRhbGdwLVxcdTAwM2VhbGdfbmFtZVtzaXplb2YoYWxncC1cXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTkzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6OTY6c3RhdGljIGludCB2ZXJpZnlfYWVhZChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQveGZybS94ZnJtX3VzZXIuYy05Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTAxOlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTAyLVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDQ6XFx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDU6XFx0aWYgKG5sYV9sZW4ocnQpIFxcdTAwM2MgKGludClhZWFkX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwNjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIEFFQUQgYXR0cmlidXRlIGxlbmd0aFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMTA6XFx0YWxncC1cXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXFx1MDAzZWFsZ19uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTE0OnN0YXRpYyB2b2lkIHZlcmlmeV9vbmVfYWRkcihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIGVudW0geGZybV9hdHRyX3R5cGVfdCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExNS1cXHRcXHRcXHQgICB4ZnJtX2FkZHJlc3NfdCAqKmFkZHJwKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTE4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExOTpcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgYWRkcnApXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIwOlxcdFxcdCphZGRycCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjM6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3NlY19jdHhfbGVuKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTI4OlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTI5LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzE6XFx0dWN0eCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzI6XFx0aWYgKHVjdHgtXFx1MDAzZWxlbiBcXHUwMDNlIG5sYV9sZW4ocnQpIHx8XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTMzOlxcdCAgICB1Y3R4LVxcdTAwM2VsZW4gIT0gKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpICsgdWN0eC1cXHUwMDNlY3R4X2xlbikpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzQ6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzZWN1cml0eSBjb250ZXh0IGxlbmd0aFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDE6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3JlcGxheShzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDItXFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqKmF0dHJzLCB1OCBzYV9kaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4OlxcdGlmICghcnQpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDk6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9FU04pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTTlxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTY6XFx0cnMgPSBubGFfZGF0YShydCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1ODpcXHRpZiAocnMtXFx1MDAzZWJtcF9sZW4gXFx1MDAzZSBYRlJNQV9SRVBMQVlfRVNOX01BWCAvIHNpemVvZihycy1cXHUwMDNlYm1wWzBdKSAvIDgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTk6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRVNOIGJpdG1hcCBsZW5ndGggbXVzdCBiZSBcXHUwMDNjPSAxMjhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTYzOlxcdGlmIChubGFfbGVuKHJ0KSBcXHUwMDNjIChpbnQpeGZybV9yZXBsYXlfc3RhdGVfZXNuX2xlbihycykgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjQ6XFx0ICAgIG5sYV9sZW4ocnQpICE9IHNpemVvZigqcnMpKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTY1OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkVTTiBhdHRyaWJ1dGUgaXMgdG9vIHNob3J0IHRvIGZpdCB0aGUgZnVsbCBiaXRtYXAgbGVuZ3RoXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTY2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTY5LVxcdC8qIEFzIG9ubHkgRVNQIGFuZCBBSCBzdXBwb3J0IEVTTiBmZWF0dXJlLiAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3MDpcXHRpZiAoKHAtXFx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fRVNQKSBcXHUwMDI2XFx1MDAyNiAocC1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzE6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRVNOIG9ubHkgc3VwcG9ydGVkIGZvciBFU1AgYW5kIEFIXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3NTpcXHRpZiAocC1cXHUwMDNlcmVwbGF5X3dpbmRvdyAhPSAwKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTc2OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkVTTiBub3QgY29tcGF0aWJsZSB3aXRoIGxlZ2FjeSByZXBsYXlfd2luZG93XFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MDpcXHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkgIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODE6XFx0XFx0aWYgKHJzLVxcdTAwM2VyZXBsYXlfd2luZG93KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTgyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4My1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODQtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NTpcXHRcXHRpZiAocnMtXFx1MDAzZXNlcSB8fCBycy1cXHUwMDNlc2VxX2hpKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTg2OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODctXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJSZXBsYXkgc2VxIGFuZCBzZXFfaGkgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTkwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MTpcXHRcXHRpZiAoIShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MjpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZW9zZXFfaGkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTM6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk0LVxcdFxcdFxcdFxcdFxcdGV4dGFjayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5Ny1cXHRcXHRcXHR9XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTk4OlxcdFxcdFxcdGlmIChycy1cXHUwMDNlb3NlcSA9PSBVMzJfTUFYKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTk5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwMC1cXHRcXHRcXHRcXHRcXHRleHRhY2ssXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDQtXFx0XFx0fSBlbHNlIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMDU6XFx0XFx0XFx0aWYgKHJzLVxcdTAwM2Vvc2VxID09IFUzMl9NQVggXFx1MDAyNlxcdTAwMjYgcnMtXFx1MDAzZW9zZXFfaGkgPT0gVTMyX01BWCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDctXFx0XFx0XFx0XFx0XFx0ZXh0YWNrLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjExLVxcdFxcdH1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTI6XFx0XFx0aWYgKHJzLVxcdTAwM2VibXBfbGVuKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjEzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSBibXBfbGVuIHNob3VsZCAwIGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjE4OlxcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pICB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjE5OlxcdFxcdGlmIChycy1cXHUwMDNlb3NlcSB8fCBycy1cXHUwMDNlb3NlcV9oaSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjIxLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiUmVwbGF5IG9zZXEgYW5kIG9zZXFfaGkgc2hvdWxkIGJlIDAgZm9yIGlucHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMjMtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNDpcXHRcXHRpZiAoIShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNTpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZXNlcV9oaSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMjctXFx0XFx0XFx0XFx0XFx0ZXh0YWNrLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjMxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzMjpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZXNlcSA9PSBVMzJfTUFYKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjMzOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzNC1cXHRcXHRcXHRcXHRcXHRleHRhY2ssXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgtXFx0XFx0fSBlbHNlIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk6XFx0XFx0XFx0aWYgKHJzLVxcdTAwM2VzZXEgPT0gVTMyX01BWCBcXHUwMDI2XFx1MDAyNiBycy1cXHUwMDNlc2VxX2hpID09IFUzMl9NQVgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNDA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGV4dGFjayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTE6c3RhdGljIGludCB2ZXJpZnlfbXRpbWVyX3RocmVzaChib29sIGhhc19lbmNhcCwgdTggZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUzLXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQ6XFx0aWYgKCFoYXNfZW5jYXApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTU6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Ni1cXHRcXHRcXHQgICAgICAgXFxcIk1USU1FUl9USFJFU0ggcmVxdWlyZXMgZW5jYXBzdWxhdGlvblxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU4LVxcdH1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTk6XFx0aWYgKGRpciA9PSBYRlJNX1NBX0RJUl9PVVQpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNjA6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI2MS1cXHRcXHRcXHQgICAgICAgXFxcIk1USU1FUl9USFJFU0ggc2hvdWxkIG5vdCBiZSBzZXQgb24gb3V0cHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjY3OnN0YXRpYyBpbnQgdmVyaWZ5X3hmcm1fZmFtaWx5KHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjgte1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI2OTpcXHRzd2l0Y2ggKGZhbWlseSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3MC1cXHRjYXNlIEFGX0lORVQ6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzItXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NS0jZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUHY2IHN1cHBvcnQgZGlzYWJsZWRcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzctXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzktXFx0ZGVmYXVsdDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODA6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhZGRyZXNzIGZhbWlseVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODU6c3RhdGljIGludCB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKHUxNiBmYW1pbHksXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg2LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4OC17XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mjg5OlxcdHN3aXRjaCAoZmFtaWx5KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjkwLVxcdGNhc2UgQUZfVU5TUEVDOlxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjkyLVxcdGNhc2UgQUZfSU5FVDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTM6XFx0XFx0aWYgKHNlbC1cXHUwMDNlcHJlZml4bGVuX2QgXFx1MDAzZSAzMiB8fCBzZWwtXFx1MDAzZXByZWZpeGxlbl9zIFxcdTAwM2UgMzIpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgcHJlZml4IGxlbmd0aCBpbiBzZWxlY3RvciAobXVzdCBiZSBcXHUwMDNjPSAzMiBmb3IgSVB2NClcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTktXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzAxOlxcdFxcdGlmIChzZWwtXFx1MDAzZXByZWZpeGxlbl9kIFxcdTAwM2UgMTI4IHx8IHNlbC1cXHUwMDNlcHJlZml4bGVuX3MgXFx1MDAzZSAxMjgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMzpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgcHJlZml4IGxlbmd0aCBpbiBzZWxlY3RvciAobXVzdCBiZSBcXHUwMDNjPSAxMjggZm9yIElQdjYpXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzA0LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzA3LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzA4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQdjYgc3VwcG9ydCBkaXNhYmxlZFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwOS1cXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMS1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGFkZHJlc3MgZmFtaWx5IGluIHNlbGVjdG9yXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzEzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzE2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxNzpzdGF0aWMgaW50IHZlcmlmeV9uZXdzYV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyMS1cXHRpbnQgZXJyO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyMjpcXHR1OCBzYV9kaXIgPSBubGFfZ2V0X3U4X2RlZmF1bHQoYXR0cnNbWEZSTUFfU0FfRElSXSwgMCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzIzLVxcdHUxNiBmYW1pbHkgPSBwLVxcdTAwM2VzZWwuZmFtaWx5O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjU6XFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHAtXFx1MDAzZWZhbWlseSwgZXh0YWNrKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjY6XFx0aWYgKGVycilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjctXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTpcXHRpZiAoIWZhbWlseSBcXHUwMDI2XFx1MDAyNiAhKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9BRl9VTlNQRUMpKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMC1cXHRcXHRmYW1pbHkgPSBwLVxcdTAwM2VmYW1pbHk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjpcXHRlcnIgPSB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKGZhbWlseSwgXFx1MDAyNnAtXFx1MDAzZXNlbCwgZXh0YWNrKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzM6XFx0aWYgKGVycilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzYtXFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzc6XFx0c3dpdGNoIChwLVxcdTAwM2VpZC5wcm90bykge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzOC1cXHRjYXNlIElQUFJPVE9fQUg6XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM5OlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdXFx0XFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDAtXFx0XFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEFIOiBBVVRIX1RSVU5DIG9yIEFVVEhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDItXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cXHR8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0Ni1cXHRcXHQgICAgYXR0cnNbWEZSTUFfQUxHX0NSWVBUXVxcdHx8XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDgtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGVzIGZvciBBSDogQUVBRCwgQ1JZUFQsIENPTVAsIFRGQ1BBRFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MC1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NC1cXHRjYXNlIElQUFJPVE9fRVNQOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NTpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU2OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgYXR0cmlidXRlIGZvciBFU1A6IENPTVBcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTctXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTktXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzYwOlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzYxLVxcdFxcdCAgICAhYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjMtXFx0XFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTUDogYXQgbGVhc3Qgb25lIG9mIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBBRUFEXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2ODpcXHRcXHRpZiAoKGF0dHJzW1hGUk1BX0FMR19BVVRIXSB8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2OS1cXHRcXHQgICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIX1RSVU5DXSB8fFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcxLVxcdFxcdCAgICBhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGUgY29tYmluYXRpb24gZm9yIEVTUDogQUVBRCBjYW4ndCBiZSB1c2VkIHdpdGggQVVUSCwgQVVUSF9UUlVOQywgQ1JZUFRcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzMtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9URkNQQURdIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3LVxcdFxcdCAgICBwLVxcdTAwM2Vtb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVEZDIHBhZGRpbmcgY2FuIG9ubHkgYmUgdXNlZCBpbiB0dW5uZWwgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3OS1cXHRcXHRcXHRnb3RvIG91dDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODAtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTpcXHRcXHRpZiAoKGF0dHJzW1hGUk1BX0lQVEZTX0RST1BfVElNRV0gfHxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODItXFx0XFx0ICAgICBhdHRyc1tYRlJNQV9JUFRGU19SRU9SREVSX1dJTkRPV10gfHxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4Ny1cXHRcXHQgICAgcC1cXHUwMDNlbW9kZSAhPSBYRlJNX01PREVfSVBURlMpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIG9wdGlvbnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBJUC1URlMgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4OS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5My1cXHRjYXNlIElQUFJPVE9fQ09NUDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTQ6XFx0XFx0aWYgKCFhdHRyc1tYRlJNQV9BTEdfQ09NUF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIENPTVA6IENPTVBcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTYtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cXHR8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMC1cXHRcXHQgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdXFx0fHxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMy1cXHRcXHQgICAgYXR0cnNbWEZSTUFfVEZDUEFEXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGF0dHJpYnV0ZXMgZm9yIENPTVA6IEFFQUQsIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBURkNQQURcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDUtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4OlxcdFxcdGlmIChudG9obChwLVxcdTAwM2VpZC5zcGkpIFxcdTAwM2U9IDB4MTAwMDApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU1BJIGlzIHRvbyBsYXJnZSBmb3IgQ09NUCAobXVzdCBiZSBcXHUwMDNjIDB4MTAwMDApXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDEwLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUtXFx0Y2FzZSBJUFBST1RPX0RTVE9QVFM6XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE2LVxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNzpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdXFx0fHxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTgtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIXVxcdHx8XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjQtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MjU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGVzIGZvciBEU1RPUFRTL1JPVVRJTkdcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjYtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI5OlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQ09BRERSXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNaXNzaW5nIHJlcXVpcmVkIENPQUREUiBhdHRyaWJ1dGUgZm9yIERTVE9QVFMvUk9VVElOR1xcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzMS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNi1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzNzpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBwcm90b2NvbFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzOC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDE6XFx0aWYgKChlcnIgPSB2ZXJpZnlfYWVhZChhdHRycywgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQyLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0MzpcXHRpZiAoKGVyciA9IHZlcmlmeV9hdXRoX3RydW5jKGF0dHJzLCBleHRhY2spKSlcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQtXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ1OlxcdGlmICgoZXJyID0gdmVyaWZ5X29uZV9hbGcoYXR0cnMsIFhGUk1BX0FMR19BVVRILCBleHRhY2spKSlcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDYtXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ3OlxcdGlmICgoZXJyID0gdmVyaWZ5X29uZV9hbGcoYXR0cnMsIFhGUk1BX0FMR19DUllQVCwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ4LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0OTpcXHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQ09NUCwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUwLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MTpcXHRpZiAoKGVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbihhdHRycywgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MzpcXHRpZiAoKGVyciA9IHZlcmlmeV9yZXBsYXkocCwgYXR0cnMsIHNhX2RpciwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU2LVxcdGVyciA9IC1FSU5WQUw7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU3OlxcdHN3aXRjaCAocC1cXHUwMDNlbW9kZSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OC1cXHRjYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjMtXFx0Y2FzZSBYRlJNX01PREVfSVBURlM6XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY0OlxcdFxcdGlmIChwLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgbW9kZSBvbmx5IHN1cHBvcnRlZCB3aXRoIEVTUFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2Ni1cXHRcXHRcXHRnb3RvIG91dDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjctXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2ODpcXHRcXHRpZiAoc2FfZGlyID09IDApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Njk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIG1vZGUgcmVxdWlyZXMgaW4gb3Igb3V0IGRpcmVjdGlvbiBhdHRyaWJ1dGVcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzAtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzQtXFx0ZGVmYXVsdDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NzU6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ3Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ4MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODE6XFx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDgyOlxcdFxcdGVyciA9IHZlcmlmeV9tdGltZXJfdGhyZXNoKCEhYXR0cnNbWEZSTUFfRU5DQVBdLCBzYV9kaXIsIGV4dGFjayk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDgzOlxcdFxcdGlmIChlcnIpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDg0LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDg2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4NzpcXHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4ODpcXHRcXHRpZiAocC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX1NUQVRFX0RFQ0FQX0RTQ1ApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmxhZyBERUNBUF9EU0NQIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTAtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ5My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0OTQ6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9JQ01QKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDk1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZsYWcgSUNNUCBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDk2LVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTAwOlxcdFxcdGlmIChwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmxhZyBXSUxEUkVDViBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTAyLVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MDUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTA2OlxcdFxcdGlmIChwLVxcdTAwM2VyZXBsYXlfd2luZG93KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTA3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUwOC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxMjpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxMzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgZHJvcCB0aW1lIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MTQtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MTg6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgcmVvcmRlciB3aW5kb3cgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyMC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNDpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MjUtXFx0XFx0XFx0c3RydWN0IHhmcm1fcmVwbGF5X3N0YXRlICpyZXBsYXk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTI2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNzpcXHRcXHRcXHRyZXBsYXkgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTI4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyOTpcXHRcXHRcXHRpZiAocmVwbGF5LVxcdTAwM2VzZXEgfHwgcmVwbGF5LVxcdTAwM2ViaXRtYXApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MzA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIlJlcGxheSBzZXEgYW5kIGJpdG1hcCBzaG91bGQgYmUgMCBmb3Igb3V0cHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTM4OlxcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Mzk6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9OT1BNVFVESVNDKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTQwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZsYWcgTk9QTVRVRElTQyBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDEtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU0NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NDU6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX1NBX0VYVFJBX0ZMQUdTXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0NjpcXHRcXHRcXHR1MzIgeGZsYWdzID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfU0FfRVhUUkFfRkxBR1NdKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTQ4OlxcdFxcdFxcdGlmICh4ZmxhZ3MgXFx1MDAyNiBYRlJNX1NBX1hGTEFHX0RPTlRfRU5DQVBfRFNDUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGbGFnIERPTlRfRU5DQVBfRFNDUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NTAtXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU1My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTQ6XFx0XFx0XFx0aWYgKHhmbGFncyBcXHUwMDI2IFhGUk1fU0FfWEZMQUdfT1NFUV9NQVlfV1JBUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU1NTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGbGFnIE9TRVFfTUFZX1dSQVAgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTU2LVxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTYyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19ET05UX0ZSQUddKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTYzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQLVRGUyBkb24ndCBmcmFnbWVudCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjQtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU2Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Njg6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX0lOSVRfREVMQVldKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTY5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQLVRGUyBpbml0aWFsIGRlbGF5IHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3MC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTczLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NDpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfTUFYX1FTSVpFXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgbWF4IHF1ZXVlIHNpemUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTc2LVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NzktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTgwOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19QS1RfU0laRV0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1ODE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIHBhY2tldCBzaXplIHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Mi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTg2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4NzpcXHRpZiAoIXNhX2RpciBcXHUwMDI2XFx1MDAyNiBhdHRyc1tYRlJNQV9TQV9QQ1BVXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4ODpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTQV9QQ1BVIG9ubHkgc3VwcG9ydGVkIHdpdGggU0FfRElSXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTg5LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01OTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTk3OnN0YXRpYyBpbnQgYXR0YWNoX29uZV9hbGdvKHN0cnVjdCB4ZnJtX2FsZ28gKiphbGdwcCwgdTggKnByb3BzLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5ODpcXHRcXHRcXHQgICBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKigqZ2V0X2J5bmFtZSkoY29uc3QgY2hhciAqLCBpbnQpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICpydGEsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MDQ6XFx0aWYgKCFydGEpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjA1LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MDc6XFx0dWFsZyA9IG5sYV9kYXRhKHJ0YSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjA4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwOTpcXHRhbGdvID0gZ2V0X2J5bmFtZSh1YWxnLVxcdTAwM2VhbGdfbmFtZSwgMSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NjEwOlxcdGlmICghYWxnbykge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxMTpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXF1ZXN0ZWQgQ09NUCBhbGdvcml0aG0gbm90IGZvdW5kXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjEyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjE1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNjpcXHRwID0ga21lbWR1cCh1YWxnLCB4ZnJtX2FsZ19sZW4odWFsZyksIEdGUF9LRVJORUwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNzpcXHRpZiAoIXApXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjE4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjA6XFx0c3Ryc2NweShwLVxcdTAwM2VhbGdfbmFtZSwgYWxnby1cXHUwMDNlbmFtZSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjIxLVxcdCphbGdwcCA9IHA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NjI1OnN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzE6XFx0aWYgKCFydGEpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjA0Ljk0NzA0MDg3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc1OTE4OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTSBTUEkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgcmlnaHQsIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0J3MgdGhlIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX0FMTE9DU1BJYC4gIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLCB0aGUgY29yZSBvZiB0aGlzIHRoaW5nLiBUaGUgcGF0Y2gncyByZW1vdmluZyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kIGB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpYCBmcm9tIHRoZXJlLCBzbyBmdW5jdGlvbmFsbHksIGl0IHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgeGZybV9hbGxvY191c2Vyc3BpYCBhcyB0aGUga2V5IHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gSSBtZWFuLCBpdCdzIHRoZSBmb2NhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9uLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbS4gU2luY2UgaXQncyBzdGF0aWMsIEkgY2FuJ3QgbG9vayB0byBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgYSBicm9hZGVyIHNjb3BlLlxuXG5Pa2F5LCBzbyBpZiBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyBzdGF0aWMsIHdoYXQncyBjYWxsaW5nIGl0PyBJcyBpdCB0aGUgb25seSBmdW5jdGlvbiBoYW5kbGluZyB0aGlzPyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgbm9uLXN0YXRpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgeGZybV91c2VyX3Jjdl9tc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBBbmQsIHNpbmNlIGl0IGhhbmRsZXMgbmV0bGluayBtZXNzYWdlcywgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBgeGZybV9uZXRsaW5rX3JjdmAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbWVzc2FnZSBmbG93IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MDkuNjIyOTYzNDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE0NDY4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmV0bGlua19yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkxMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTEyOnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTEzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDA9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA0LVxcdFxcdC5ncm91cHNcXHQ9IFhGUk1OTEdSUF9NQVgsXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcXHRcXHQuaW5wdXRcXHQ9IHhmcm1fbmV0bGlua19yY3YsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoxMS45Mzc0NDEyMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0ODcwMDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFhGUk0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHhmcm1fbmV0bGlua19yY3ZgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzIGFib3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdywgbGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBJJ2xsIGNoZWNrIGB4ZnJtX3VzZXJfbmV0X2luaXRgIG5leHQuIEFscmlnaHQsIGl0J3Mgc3RhdGljIHRvby4gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHNldHVwLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBgeGZybV91c2VyX2luaXRgIGZ1bmN0aW9uLCBzZWUgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoxNC43ODYxNDQ4ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTUyNjM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9NDYyOT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhmcm1fdXNlcl9uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjM1OnN0YXRpYyBpbnQgX19pbml0IHhmcm1fdXNlcl9pbml0KHZvaWQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjQ4PXN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX3VzZXJfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDY1My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjU0Om1vZHVsZV9pbml0KHhmcm1fdXNlcl9pbml0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjU1LW1vZHVsZV9leGl0KHhmcm1fdXNlcl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MTYuOTQxNDE2OTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTE0NDU2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlIGFib3V0IGB4ZnJtX3VzZXIuY2A6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIHhmcm1fdXNlci5jKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHhmcm1fdXNlci5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYSBnb29kIGNodW5rIG9mIGl0cyBjb21wb25lbnRzIGFyZSBwcm9iYWJseSBzdGF0aWNhbGx5IGRlY2xhcmVkLCB3aGljaCBpc24ndCB1bnVzdWFsIGZvciB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gbXkgbWFpbiBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSAqZHluYW1pY2FsbHkqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgYXNzdW1wdGlvbiBhdCB0aGUgbW9tZW50IGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgbW9zdGx5IHN0YXRpYyBlbGVtZW50cywgZXhjZXB0IGZvciBhIGZldyBzcGVjaWZpYyBleHBvcnRlZCBmdW5jdGlvbnMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlLiBUaGlzIG1hY3JvIHdpbGwgaW1tZWRpYXRlbHkgaWRlbnRpZnkgYW55IGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZSBtb2R1bGUgaXRzZWxmLiBUaGF0IHNlYXJjaCB3aWxsIHF1aWNrbHkgY29uZmlybSBvciBkaXNwcm92ZSBteSBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyMC4yOTI4NjYyOTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTQ4Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzY0Nz1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3My19O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NzQ6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjc1LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzY3OD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcyMC19O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3MjE6RVhQT1JUX1NZTUJPTF9HUEwoeGZybWFfcG9saWN5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyMC4zNDc0MTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ2MDM3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUncyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZW4ndCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlYWRpbHkgYXZhaWxhYmxlIHRvIHVzZSBhcyBhIHByaW1hcnkgZm9jdXMgcG9pbnQuIE5vIHByb2JsZW0sIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB0YXJnZXQgYHhmcm1fYWxsb2NfdXNlcnNwaWAgaW5zdGVhZC4gRXZlbiBpZiBpdCdzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgcHJlc2VuY2UgaW4gdGhhdCBmdW5jdGlvbiBwb2ludGVyIGFycmF5IG1ha2VzIGl0IGEgZGVjZW50IHRhcmdldC4gSXQgd29uJ3QgYmUgaW5saW5lZCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy5cblxuSGFuZyBvbiBhIG1vbWVudCB0aG91Z2gsIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgeGZybV9wdXRfdHJhbnNsYXRvcmAuIFRob3NlIG1pZ2h0IG9mZmVyIGEgYmV0dGVyLCBtb3JlIGFwcHJvcHJpYXRlIGFuZ2xlIG9uIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgZm9yIGFuYWx5c2lzLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHBpY2tpbmcgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY2FsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjIzLjc3MjAyNjAzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0ODQ4ODc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF90cmFuc2xhdG9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzE3PWV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3RyYW5zbGF0b3Ioc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjMxODpleHRlcm4gc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeGZybV9nZXRfdHJhbnNsYXRvcih2b2lkKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjMxOS1leHRlcm4gdm9pZCB4ZnJtX3B1dF90cmFuc2xhdG9yKHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cik7XFxuaW5jbHVkZS9uZXQveGZybS5oLTIzMjAtI2Vsc2VcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjMyMTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjMyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk0OT1zdGF0aWMgc3RydWN0IHhmcm1fdHJhbnNsYXRvciBfX3JjdSAqeGZybV90cmFuc2xhdG9yO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTUwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTUxOnN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk1Mi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5NjU6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9nZXRfdHJhbnNsYXRvcik7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MzAwNz1pbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjgtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkgXFx1MDAyNlxcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDI5OlxcdFxcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzAzMC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE0OTc9c3RhdGljIGludCBkdW1wX29uZV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTIwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1MjE6XFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1MjItXFx0aWYgKHh0cikge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTYyNz1zdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjM3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mzg6XFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MzktXFx0aWYgKHh0cikge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM5Mz1zdGF0aWMgaW50IGR1bXBfb25lX3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI0MjYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjQyNzpcXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjQyOC1cXHRpZiAoeHRyKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zODI1PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ1LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQ2OlxcdFxcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyNi4yMjA1MTg4NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NDk2MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkZvY3VzaW5nIG9uIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgd2FzIGp1c3QgcmVtb3ZlZCBmcm9tIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBBbHJpZ2h0LCB0aGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZCwgdGhlIHN5bWJvbCB0aGF0IEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGlzIGdvaW5nIHRvIGJlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBUaGF04oCZcyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLCB3aGljaCBzaG91bGQgYmUgYFhGUk1fVVNFUmAuIEhvbGQgb24gYSBzZWNvbmTigKYgSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBYRlJNX1VTRVJgIGRlZmluaXRpb24gYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBjb3JyZWN0bHkuIEdvdHRhIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MzAuMDA1NDg1MTA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU3OTI1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjMyLjM2MzQxNjU3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA0MzA1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWEZSTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYFhGUk1fVVNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgY29yZSBvZiB3aGF0J3MgYmVpbmcgYWZmZWN0ZWQuIEtub3dpbmcgdGhhdCwgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyAqV29ydGhGdXp6aW5nKi4gVGhpcyBjaGFuZ2UgdG8gdGhlIElQc2VjIFhGUk0gdXNlciBpbnRlcmZhY2UgaXMgYSBmdW5jdGlvbmFsIG9uZS5cblxuVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgeGZybV9hbGxvY191c2Vyc3BpYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGlzIG5ldGxpbmsgaGFuZGxlci4gU2luY2UgYFhGUk1fVVNFUmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBhbHNvIGVuYWJsZWQgZm9yIHRoYXQuIFRoZSBwYXRjaCByZW1vdmVzIGNhbGxzIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgc28gdGhpcyB3aWxsIG5lZWQgc3BlY2lmaWMgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjAsIk91dHB1dFRva2VucyI6OTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MzYuMzY3NzI1Mzk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjI2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflown6prd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 21:41:54 +0000 UTC FinishedAt: 2026-08-01 22:03:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "790a2ceb-2881-48e0-97b5-b8a1c7ff62a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_alloc_userspi" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fYWxsb2NfdXNlcnNwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4OGM3YTExZmEyYmZkYmI2ZTY0Y2VhNzU1ODkyODQ4NTBlODhiN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjAyOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IGQ2ZGI2MzMwNGJhNmIuLmE3ZjM1YTEyMzY0OGQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgYWxsb2NfY29tcGF0YCBpbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHNlYyBYRlJNIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODhjN2ExMWZhMmJmZGJiNmU2NGNlYTc1NTg5Mjg0ODUwZTg4YjdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMjowMjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggZDZkYjYzMzA0YmE2Yi4uYTdmMzVhMTIzNjQ4ZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTE4NzcsNyAmIzQzOzE4NzcsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7Ci0Jc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyOwogCXN0cnVjdCBza19idWZmICpyZXNwX3NrYjsKIAl4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7CiAJaW50IGZhbWlseTsKQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gb3V0OwogCX0KIAotCXh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTsKLQlpZiAoeHRyKSB7Ci0JCWVyciA9IHh0ci0mZ3Q7YWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpOwotCi0JCXhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWVfc2tiKHJlc3Bfc2tiKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOwogCiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgYSBYRlJNIFVzZXJzcGFjZSBTUEkgQWxsb2NhdGlvbiBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBYRlJNIHVzZXJzcGFjZSBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJdCYjMzk7cyB0YXJnZXRpbmcgdGhlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGZ1bmN0aW9uLCB3aGljaCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgU2VjdXJpdHkgUGFyYW1ldGVyIEluZGljZXMgKFNQSXMpIGZyb20gdXNlciBzcGFjZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBjYWxsIHRvIGB4dHItJmd0O2FsbG9jX2NvbXBhdCgpYC4gSG1tLCBpbnRlcmVzdGluZy4gVGhpcyBzb3VuZHMgbGlrZSBpdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIElQc2VjIChYRlJNKSBuZXRsaW5rIGludGVyYWN0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGlzLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYHhmcm1fYWxsb2NfdXNlcnNwaWAgYW5kIHdoYXQgdGhvc2UgY2FsbHMgYWN0dWFsbHkgZGlkLiBUaW1lIHRvIGJyZWFrIG91dCBgZ2l0IGdyZXBgIGFuZCBsb29rIGZvciBhbGwgaW5zdGFuY2VzIG9mIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIHdpdGhpbiB0aGUgcmVsZXZhbnQga2VybmVsIHRyZWUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGVsc2UgaXMgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIGFuZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzJiMzOTsgaW1wYWN0LiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTg0OT1zdGF0aWMgaW50IHhmcm1fZ2V0X3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4NzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODczOnN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTg3NC1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0Ny1cdFx0XHRcdFx0XHQgICAuZG9uZSA9IHhmcm1fZHVtcF9wb2xpY3lfZG9uZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc0ODpcdFtYRlJNX01TR19BTExPQ1NQSSAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWxsb2NfdXNlcnNwaSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbmFsaXR5KioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIFNvLCBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyB0aGUgd29ya2hvcnNlIGZvciBoYW5kbGluZyB0aGUgYFhGUk1fTVNHX0FMTE9DU1BJYCBuZXRsaW5rIG1lc3NhZ2UuIFRoYXQmIzM5O3MgZ29vZC4gSXQgbWVhbnMgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb21wb25lbnQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYFhGUk1fVVNFUmAgdG8gYmUgb3BlcmF0aW9uYWwuIEdvdHRhIGVuc3VyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBhbGxvY2F0aW9uIHRvIGV2ZW4gd29yayBhcyBpbnRlbmRlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyBhbGwgaW4gcGxhY2UuIEdvdHRhIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9VU0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFhGUk1fVVNFUmAsIGFuZCBteSBmb2N1cyBpcyBvbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGFueSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gR290IGl0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBgWEZSTV9VU0VSYCB0byBFbmFibGVDb25maWdzLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIHJldmVhbHMgdGhhdCBpdCYjMzk7cyBzdGF0aWMuIEhtbSwgYnV0IHdhaXQgYSBtaW51dGUuLi4gdGhvc2UgZ3VpZGVsaW5lcyBhcmUgc3VnZ2VzdGluZyBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEl04oCZcyBhIGJpdCB0cmlja3kgaGVyZSBiZWNhdXNlIHRoaXMgaXMgYSBuZXRsaW5rIGhhbmRsZXIuIEJlY2F1c2UgaXQmIzM5O3MgcmVmZXJlbmNlZCBpbiB0aGUgYHhmcm1fbGlua2AgYXJyYXksIEkgc3VzcGVjdCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdC4gQnV0IG1heWJlLCBqdXN0IG1heWJlLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgbmV0bGluayBkaXNwYXRjaCBmdW5jdGlvbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBob3cgdGhlIGB4ZnJtX2xpbmtgIGFycmF5IGlzIHVzZWQuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2xpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTU0PUVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk1NS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6Mzk1NjpzdGF0aWMgdm9pZCB4ZnJtX2xpbmtfZmFpbHVyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTU3LXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTMzLVx0XHRpZiAobGlrZWx5KGRzdF9vcHMtXHUwMDNlbGlua19mYWlsdXJlID09IE5VTEwpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTM0Olx0XHRcdGRzdF9vcHMtXHUwMDNlbGlua19mYWlsdXJlID0geGZybV9saW5rX2ZhaWx1cmU7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMzUtXHRcdGlmIChsaWtlbHkoZHN0X29wcy1cdTAwM2VuZWlnaF9sb29rdXAgPT0gTlVMTCkpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzcyODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI5LVx0aW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBubGF0dHIgKiosXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MjktXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgmIzQzOzFdO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcdGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsgKmxpbms7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODMxLVx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBEaXNwYXRjaCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV0bGluayBzZXR1cCwgc3BlY2lmaWNhbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIGB4ZnJtX3VzZXJfcmN2X21zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGRlY2VudCBlbnRyeSBwb2ludCB0byBleGFtaW5lLCBhbHRob3VnaCBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgeGZybV91c2VyX3Jjdl9tc2dgIGV2ZW4gc3RhdGljPyBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5Li4uIFllcywgaXQgYXBwZWFycyBpdCBpcy4gVGhhdCBzbGlnaHRseSBsaW1pdHMgd2hlcmUgaXQmIzM5O3MgdXNlZCBkaXJlY3RseS4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZSBjb3JlIGxvZ2ljIGlzIGhpZGRlbiB3aXRoaW4gdGhpcyBzdGF0aWMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIHRoYXQmIzM5O3Mgbm90IHN0YXRpYyBpcyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB4ZnJtXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogUmUtZXZhbHVhdGluZyB0aGUgQXBwcm9hY2gqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcHJvYmxlbSBhZ2Fpbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gcmVhY2ggZm9yIGBeaW50YCwgYnV0IHNvbWV0aGluZyYjMzk7cyB0ZWxsaW5nIG1lIHRvIHBhdXNlLiBUaGVyZSYjMzk7cyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IHdlIG1pZ2h0IGJlIG92ZXItY29tcGxpY2F0aW5nIHRoaW5ncyBvciBwZXJoYXBzIGp1bXBpbmcgdG8gYSBzcGVjaWZpYyBzb2x1dGlvbiBwcmVtYXR1cmVseS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lIHdpdGggYSBzaW1wbGVyIGFwcHJvYWNoIGZpcnN0LCBiZWZvcmUgZ2V0dGluZyBib2dnZWQgZG93biBpbiBtb3JlIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyBvciBjb25zdHJ1Y3RzLiBUaGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcmVhZGFiaWxpdHkgYmVuZWZpdHMgb2YgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLiBJJiMzOTtsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgZXhwbG9yaW5nIGEgbW9yZSBmdW5kYW1lbnRhbCBzb2x1dGlvbiBiZWZvcmUgcmVzb3J0aW5nIHRvIGEgcG90ZW50aWFsbHkgbW9yZSByZXNvdXJjZS1pbnRlbnNpdmUgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X10mIzQzOyB4ZnJtXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhpcyBmaWxlLiBNeSBndXQgZmVlbGluZyBpcyB3ZSYjMzk7dmUgZ290IGEgbG90IG9mIHN0YXRpYyBtZXRob2RzIHNjYXR0ZXJlZCBhcm91bmQsIGJ1dCBqdXN0IGluIGNhc2UsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYWJvdXQuIFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGRlc2lnbiBwcmluY2lwbGVzIHdlJiMzOTtyZSB1c2luZyBsZWFuIGhlYXZpbHkgb24gc3RhdGljIHV0aWxpdHkgbWV0aG9kcyB0byBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQgYW5kIGZvY3VzZWQuIElmIGEgbm9uLXN0YXRpYyBtZXRob2QgaGFzIGNyZXB0IGluLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoeS4gV2FzIGl0IGFjY2lkZW50YWw/IE9yIGlzIGl0IGluZGljYXRpdmUgb2YgYSB2aW9sYXRpb24gb2YgdGhlIGNob3NlbiBhcmNoaXRlY3R1cmFsIHN0eWxlPyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB3ZSBtYXkgbmVlZCB0byByZWRlc2lnbi4gQSBxdWljayByZXZpZXcgbGlrZSB0aGlzIHNhdmVzIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW14gXFx0XS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM5MjIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg6c3RhdGljIHN0cnVjdCBzb2NrICp4ZnJtX25ldF9ubHNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwLVx0LyogZ2V0IHRoZSBzb3VyY2Ugb2YgdGhpcyByZXF1ZXN0LCBzZWUgbmV0bGlua191bmljYXN0X2tlcm5lbCAqL1xubmV0L3hmcm0veGZybV91c2VyLmM6NDE6XHRjb25zdCBzdHJ1Y3Qgc29jayAqc2sgPSBORVRMSU5LX0NCKHNrYikuc2s7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzLVx0Lyogc2sgaXMgcmVmY291bnRlZCwgdGhlIG5ldG5zIHN0YXlzIGFsaXZlIGFuZCBubHNrIHdpdGggaXQgKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0Olx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZXhmcm0ubmxzaywgc2stXHUwMDNlc2tfbmV0X3JlZmNudCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NS19XG5uZXQveGZybS94ZnJtX3VzZXIuYy00Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3OnN0YXRpYyBpbnQgdmVyaWZ5X29uZV9hbGcoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ4LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTM6XHRpZiAoIXJ0KVxubmV0L3hmcm0veGZybV91c2VyLmMtNTQtXHRcdHJldHVybiAwO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjpcdGFsZ3AgPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NzpcdGlmIChubGFfbGVuKHJ0KSBcdTAwM2MgKGludCl4ZnJtX2FsZ19sZW4oYWxncCkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgQVVUSC9DUllQVC9DT01QIGF0dHJpYnV0ZSBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxLVxubmV0L3hmcm0veGZybV91c2VyLmM6NjI6XHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzLVx0Y2FzZSBYRlJNQV9BTEdfQVVUSDpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02OC1cdGRlZmF1bHQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo2OTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGFsZ29yaXRobSBhdHRyaWJ1dGUgdHlwZVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy03MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNzItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo3MzpcdGFsZ3AtXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xubmV0L3hmcm0veGZybV91c2VyLmMtNzQtXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy03Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjc3OnN0YXRpYyBpbnQgdmVyaWZ5X2F1dGhfdHJ1bmMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxubmV0L3hmcm0veGZybV91c2VyLmMtNzgtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtODItXG5uZXQveGZybS94ZnJtX3VzZXIuYzo4MzpcdGlmICghcnQpXG5uZXQveGZybS94ZnJtX3VzZXIuYy04NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy04NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg2Olx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg3Olx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KXhmcm1fYWxnX2F1dGhfbGVuKGFsZ3ApKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo4ODpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIEFVVEhfVFJVTkMgYXR0cmlidXRlIGxlbmd0aFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy04OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MjpcdGFsZ3AtXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xubmV0L3hmcm0veGZybV91c2VyLmMtOTMtXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk2OnN0YXRpYyBpbnQgdmVyaWZ5X2FlYWQoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5uZXQveGZybS94ZnJtX3VzZXIuYy05Ny17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTAwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAxOlx0aWYgKCFydClcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMi1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDQ6XHRhbGdwID0gbmxhX2RhdGEocnQpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MTA1Olx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KWFlYWRfbGVuKGFsZ3ApKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDY6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBBRUFEIGF0dHJpYnV0ZSBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDktXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMTA6XHRhbGdwLVx1MDAzZWFsZ19uYW1lW3NpemVvZihhbGdwLVx1MDAzZWFsZ19uYW1lKSAtIDFdID0gJiMzOTtcXDAmIzM5Oztcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExMS1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExNDpzdGF0aWMgdm9pZCB2ZXJpZnlfb25lX2FkZHIoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExNS1cdFx0XHQgICB4ZnJtX2FkZHJlc3NfdCAqKmFkZHJwKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExOTpcdGlmIChydCBcdTAwMjZcdTAwMjYgYWRkcnApXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjA6XHRcdCphZGRycCA9IG5sYV9kYXRhKHJ0KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMS19XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjItXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjM6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3NlY19jdHhfbGVuKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMTI0LXtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjg6XHRpZiAoIXJ0KVxubmV0L3hmcm0veGZybV91c2VyLmMtMTI5LVx0XHRyZXR1cm4gMDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEzMTpcdHVjdHggPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzI6XHRpZiAodWN0eC1cdTAwM2VsZW4gXHUwMDNlIG5sYV9sZW4ocnQpIHx8XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzM6XHQgICAgdWN0eC1cdTAwM2VsZW4gIT0gKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpICYjNDM7IHVjdHgtXHUwMDNlY3R4X2xlbikpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEzNDpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNlY3VyaXR5IGNvbnRleHQgbGVuZ3RoXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTQwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTQxOnN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9yZXBsYXkoc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gKnAsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDItXHRcdFx0XHRzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHU4IHNhX2Rpcixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDg6XHRpZiAoIXJ0KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDk6XHRcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX0VTTikge1xubmV0L3hmcm0veGZybV91c2VyLmM6MTUwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTTlwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTU1LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTU2Olx0cnMgPSBubGFfZGF0YShydCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTg6XHRpZiAocnMtXHUwMDNlYm1wX2xlbiBcdTAwM2UgWEZSTUFfUkVQTEFZX0VTTl9NQVggLyBzaXplb2YocnMtXHUwMDNlYm1wWzBdKSAvIDgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1OTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtFU04gYml0bWFwIGxlbmd0aCBtdXN0IGJlIFx1MDAzYz0gMTI4XCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTYyLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTYzOlx0aWYgKG5sYV9sZW4ocnQpIFx1MDAzYyAoaW50KXhmcm1fcmVwbGF5X3N0YXRlX2Vzbl9sZW4ocnMpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV91c2VyLmM6MTY0Olx0ICAgIG5sYV9sZW4ocnQpICE9IHNpemVvZigqcnMpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjU6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIGF0dHJpYnV0ZSBpcyB0b28gc2hvcnQgdG8gZml0IHRoZSBmdWxsIGJpdG1hcCBsZW5ndGhcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTY2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjktXHQvKiBBcyBvbmx5IEVTUCBhbmQgQUggc3VwcG9ydCBFU04gZmVhdHVyZS4gKi9cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3MDpcdGlmICgocC1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCkgXHUwMDI2XHUwMDI2IChwLVx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fQUgpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIG9ubHkgc3VwcG9ydGVkIGZvciBFU1AgYW5kIEFIXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTc0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTc1Olx0aWYgKHAtXHUwMDNlcmVwbGF5X3dpbmRvdyAhPSAwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzY6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RVNOIG5vdCBjb21wYXRpYmxlIHdpdGggbGVnYWN5IHJlcGxheV93aW5kb3dcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTc3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNzktXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODA6XHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkgIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MTpcdFx0aWYgKHJzLVx1MDAzZXJlcGxheV93aW5kb3cpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODQtXHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NTpcdFx0aWYgKHJzLVx1MDAzZXNlcSB8fCBycy1cdTAwM2VzZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODctXHRcdFx0XHQgICAgICAgXCYjMzQ7UmVwbGF5IHNlcSBhbmQgc2VxX2hpIHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5MC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MTpcdFx0aWYgKCEocC1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9TVEFURV9FU04pKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTI6XHRcdFx0aWYgKHJzLVx1MDAzZW9zZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MzpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk0LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTk3LVx0XHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5ODpcdFx0XHRpZiAocnMtXHUwMDNlb3NlcSA9PSBVMzJfTUFYKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwMC1cdFx0XHRcdFx0ZXh0YWNrLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNC1cdFx0fSBlbHNlIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNTpcdFx0XHRpZiAocnMtXHUwMDNlb3NlcSA9PSBVMzJfTUFYIFx1MDAyNlx1MDAyNiBycy1cdTAwM2Vvc2VxX2hpID09IFUzMl9NQVgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMjA3LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjExLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTI6XHRcdGlmIChycy1cdTAwM2VibXBfbGVuKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYXkgYm1wX2xlbiBzaG91bGQgMCBmb3Igb3V0cHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIxNC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTg6XHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX0lOKSAge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjE5Olx0XHRpZiAocnMtXHUwMDNlb3NlcSB8fCBycy1cdTAwM2Vvc2VxX2hpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMjA6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjIxLVx0XHRcdFx0ICAgICAgIFwmIzM0O1JlcGxheSBvc2VxIGFuZCBvc2VxX2hpIHNob3VsZCBiZSAwIGZvciBpbnB1dCBTQVwmIzM0Oyk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjIzLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMjQ6XHRcdGlmICghKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjI1Olx0XHRcdGlmIChycy1cdTAwM2VzZXFfaGkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKFxubmV0L3hmcm0veGZybV91c2VyLmMtMjI3LVx0XHRcdFx0XHRleHRhY2ssXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjMxLVxubmV0L3hmcm0veGZybV91c2VyLmM6MjMyOlx0XHRcdGlmIChycy1cdTAwM2VzZXEgPT0gVTMyX01BWCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjMzOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzQtXHRcdFx0XHRcdGV4dGFjayxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgtXHRcdH0gZWxzZSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk6XHRcdFx0aWYgKHJzLVx1MDAzZXNlcSA9PSBVMzJfTUFYIFx1MDAyNlx1MDAyNiBycy1cdTAwM2VzZXFfaGkgPT0gVTMyX01BWCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjQwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNDEtXHRcdFx0XHRcdGV4dGFjayxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTE6c3RhdGljIGludCB2ZXJpZnlfbXRpbWVyX3RocmVzaChib29sIGhhc19lbmNhcCwgdTggZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUyLVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjUzLXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1NDpcdGlmICghaGFzX2VuY2FwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTU6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Ni1cdFx0XHQgICAgICAgXCYjMzQ7TVRJTUVSX1RIUkVTSCByZXF1aXJlcyBlbmNhcHN1bGF0aW9uXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTgtXHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTk6XHRpZiAoZGlyID09IFhGUk1fU0FfRElSX09VVCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MjYwOlx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjEtXHRcdFx0ICAgICAgIFwmIzM0O01USU1FUl9USFJFU0ggc2hvdWxkIG5vdCBiZSBzZXQgb24gb3V0cHV0IFNBXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNjc6c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3hmcm0veGZybV91c2VyLmMtMjY4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI2OTpcdHN3aXRjaCAoZmFtaWx5KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzAtXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjcyLVx0Y2FzZSBBRl9JTkVUNjpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzUtI2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHN1cHBvcnQgZGlzYWJsZWRcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjc3LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzktXHRkZWZhdWx0OlxubmV0L3hmcm0veGZybV91c2VyLmM6MjgwOlx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYWRkcmVzcyBmYW1pbHlcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjgxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODU6c3RhdGljIGludCB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKHUxNiBmYW1pbHksXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODYtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjg4LXtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI4OTpcdHN3aXRjaCAoZmFtaWx5KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTAtXHRjYXNlIEFGX1VOU1BFQzpcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTItXHRjYXNlIEFGX0lORVQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTM6XHRcdGlmIChzZWwtXHUwMDNlcHJlZml4bGVuX2QgXHUwMDNlIDMyIHx8IHNlbC1cdTAwM2VwcmVmaXhsZW5fcyBcdTAwM2UgMzIpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBwcmVmaXggbGVuZ3RoIGluIHNlbGVjdG9yIChtdXN0IGJlIFx1MDAzYz0gMzIgZm9yIElQdjQpXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTktXHRjYXNlIEFGX0lORVQ2OlxubmV0L3hmcm0veGZybV91c2VyLmM6MzAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV91c2VyLmM6MzAxOlx0XHRpZiAoc2VsLVx1MDAzZXByZWZpeGxlbl9kIFx1MDAzZSAxMjggfHwgc2VsLVx1MDAzZXByZWZpeGxlbl9zIFx1MDAzZSAxMjgpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDM6XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBwcmVmaXggbGVuZ3RoIGluIHNlbGVjdG9yIChtdXN0IGJlIFx1MDAzYz0gMTI4IGZvciBJUHY2KVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzA3LSNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDg6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwOS1cdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExLVx0ZGVmYXVsdDpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMjpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGFkZHJlc3MgZmFtaWx5IGluIHNlbGVjdG9yXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzE2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzE3OnN0YXRpYyBpbnQgdmVyaWZ5X25ld3NhX2luZm8oc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gKnAsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTgtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzIxLVx0aW50IGVycjtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyMjpcdHU4IHNhX2RpciA9IG5sYV9nZXRfdThfZGVmYXVsdChhdHRyc1tYRlJNQV9TQV9ESVJdLCAwKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyMy1cdHUxNiBmYW1pbHkgPSBwLVx1MDAzZXNlbC5mYW1pbHk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjU6XHRlcnIgPSB2ZXJpZnlfeGZybV9mYW1pbHkocC1cdTAwM2VmYW1pbHksIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjY6XHRpZiAoZXJyKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzI3LVx0XHRnb3RvIG91dDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTpcdGlmICghZmFtaWx5IFx1MDAyNlx1MDAyNiAhKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfQUZfVU5TUEVDKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMC1cdFx0ZmFtaWx5ID0gcC1cdTAwM2VmYW1pbHk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzI6XHRlcnIgPSB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKGZhbWlseSwgXHUwMDI2cC1cdTAwM2VzZWwsIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzM6XHRpZiAoZXJyKVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzYtXHRlcnIgPSAtRUlOVkFMO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzM3Olx0c3dpdGNoIChwLVx1MDAzZWlkLnByb3RvKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzgtXHRjYXNlIElQUFJPVE9fQUg6XG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzk6XHRcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdXHRcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MC1cdFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O01pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlIGZvciBBSDogQVVUSF9UUlVOQyBvciBBVVRIXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0Mi1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDU6XHRcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cdHx8XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDYtXHRcdCAgICBhdHRyc1tYRlJNQV9BTEdfQ1JZUFRdXHR8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0OC1cdFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlcyBmb3IgQUg6IEFFQUQsIENSWVBULCBDT01QLCBURkNQQURcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzUwLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NC1cdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTU6XHRcdGlmIChhdHRyc1tYRlJNQV9BTEdfQ09NUF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlIGZvciBFU1A6IENPTVBcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzU3LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1OS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2MDpcdFx0aWYgKCFhdHRyc1tYRlJNQV9BTEdfQVVUSF0gXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjEtXHRcdCAgICAhYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2My1cdFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O01pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlIGZvciBFU1A6IGF0IGxlYXN0IG9uZSBvZiBBVVRILCBBVVRIX1RSVU5DLCBDUllQVCwgQUVBRFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzY4Olx0XHRpZiAoKGF0dHJzW1hGUk1BX0FMR19BVVRIXSB8fFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY5LVx0XHQgICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIX1RSVU5DXSB8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3MS1cdFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BRUFEXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6MzcyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBhdHRyaWJ1dGUgY29tYmluYXRpb24gZm9yIEVTUDogQUVBRCBjYW4mIzM5O3QgYmUgdXNlZCB3aXRoIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBUXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3My1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY6XHRcdGlmIChhdHRyc1tYRlJNQV9URkNQQURdIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3LVx0XHQgICAgcC1cdTAwM2Vtb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1RGQyBwYWRkaW5nIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHVubmVsIG1vZGVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzc5LVx0XHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmMtMzgwLVx0XHR9XG5uZXQveGZybS94ZnJtX3VzZXIuYzozODE6XHRcdGlmICgoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSB8fFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgyLVx0XHQgICAgIGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSB8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4Ny1cdFx0ICAgIHAtXHUwMDNlbW9kZSAhPSBYRlJNX01PREVfSVBURlMpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0lQLVRGUyBvcHRpb25zIGNhbiBvbmx5IGJlIHVzZWQgaW4gSVAtVEZTIG1vZGVcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzg5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5My1cdGNhc2UgSVBQUk9UT19DT01QOlxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk0Olx0XHRpZiAoIWF0dHJzW1hGUk1BX0FMR19DT01QXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6Mzk1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIENPTVA6IENPTVBcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzk2LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5OTpcdFx0aWYgKGF0dHJzW1hGUk1BX0FMR19BRUFEXVx0fHxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMC1cdFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIXVx0fHxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDMtXHRcdCAgICBhdHRyc1tYRlJNQV9URkNQQURdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIGF0dHJpYnV0ZXMgZm9yIENPTVA6IEFFQUQsIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBURkNQQURcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA1LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwODpcdFx0aWYgKG50b2hsKHAtXHUwMDNlaWQuc3BpKSBcdTAwM2U9IDB4MTAwMDApIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwOTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NQSSBpcyB0b28gbGFyZ2UgZm9yIENPTVAgKG11c3QgYmUgXHUwMDNjIDB4MTAwMDApXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxMC1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUtXHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQxNi1cdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L3hmcm0veGZybV91c2VyLmM6NDE3Olx0XHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdXHR8fFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE4LVx0XHQgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdXHR8fFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNC1cdFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQyNTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgYXR0cmlidXRlcyBmb3IgRFNUT1BUUy9ST1VUSU5HXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQyNi1cdFx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mjk6XHRcdGlmICghYXR0cnNbWEZSTUFfQ09BRERSXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NDMwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzc2luZyByZXF1aXJlZCBDT0FERFIgYXR0cmlidXRlIGZvciBEU1RPUFRTL1JPVVRJTkdcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDMxLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNi1cdGRlZmF1bHQ6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Mzc6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgcHJvdG9jb2xcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDM4LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDE6XHRpZiAoKGVyciA9IHZlcmlmeV9hZWFkKGF0dHJzLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0Mi1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDM6XHRpZiAoKGVyciA9IHZlcmlmeV9hdXRoX3RydW5jKGF0dHJzLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0NC1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDU6XHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQVVUSCwgZXh0YWNrKSkpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDYtXHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmM6NDQ3Olx0aWYgKChlcnIgPSB2ZXJpZnlfb25lX2FsZyhhdHRycywgWEZSTUFfQUxHX0NSWVBULCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0OC1cdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDk6XHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQ09NUCwgZXh0YWNrKSkpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTAtXHRcdGdvdG8gb3V0O1xubmV0L3hmcm0veGZybV91c2VyLmM6NDUxOlx0aWYgKChlcnIgPSB2ZXJpZnlfc2VjX2N0eF9sZW4oYXR0cnMsIGV4dGFjaykpKVxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyLVx0XHRnb3RvIG91dDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MzpcdGlmICgoZXJyID0gdmVyaWZ5X3JlcGxheShwLCBhdHRycywgc2FfZGlyLCBleHRhY2spKSlcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1NC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDU2LVx0ZXJyID0gLUVJTlZBTDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1NzpcdHN3aXRjaCAocC1cdTAwM2Vtb2RlKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NTgtXHRjYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzLVx0Y2FzZSBYRlJNX01PREVfSVBURlM6XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjQ6XHRcdGlmIChwLVx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fRVNQKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgbW9kZSBvbmx5IHN1cHBvcnRlZCB3aXRoIEVTUFwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjYtXHRcdFx0Z290byBvdXQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjctXHRcdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2ODpcdFx0aWYgKHNhX2RpciA9PSAwKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Njk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgbW9kZSByZXF1aXJlcyBpbiBvciBvdXQgZGlyZWN0aW9uIGF0dHJpYnV0ZVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzAtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDc0LVx0ZGVmYXVsdDpcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3NTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtb2RlXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ3Ni1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDgwLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDgxOlx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODI6XHRcdGVyciA9IHZlcmlmeV9tdGltZXJfdGhyZXNoKCEhYXR0cnNbWEZSTUFfRU5DQVBdLCBzYV9kaXIsIGV4dGFjayk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODM6XHRcdGlmIChlcnIpXG5uZXQveGZybS94ZnJtX3VzZXIuYy00ODQtXHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDg2LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDg3Olx0aWYgKHNhX2RpciA9PSBYRlJNX1NBX0RJUl9PVVQpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4ODpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfREVDQVBfRFNDUCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NDg5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmxhZyBERUNBUF9EU0NQIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDkwLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDkzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDk0Olx0XHRpZiAocC1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9TVEFURV9JQ01QKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo0OTU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIElDTVAgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIG91dHB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTYtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDA6XHRcdGlmIChwLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX1dJTERSRUNWKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIFdJTERSRUNWIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTAyLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTA1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NTA2Olx0XHRpZiAocC1cdTAwM2VyZXBsYXlfd2luZG93KSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYXkgd2luZG93IHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTA4LVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTExLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTEyOlx0XHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTEzOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIGRyb3AgdGltZSBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxODpcdFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTE5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIHJlb3JkZXIgd2luZG93IHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTIwLVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTIzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NTI0Olx0XHRpZiAoYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyNS1cdFx0XHRzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgKnJlcGxheTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNzpcdFx0XHRyZXBsYXkgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01MjgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Mjk6XHRcdFx0aWYgKHJlcGxheS1cdTAwM2VzZXEgfHwgcmVwbGF5LVx1MDAzZWJpdG1hcCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTMwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxubmV0L3hmcm0veGZybV91c2VyLmMtNTMxLVx0XHRcdFx0XHQgICAgICAgXCYjMzQ7UmVwbGF5IHNlcSBhbmQgYml0bWFwIHNob3VsZCBiZSAwIGZvciBvdXRwdXQgU0FcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUzNy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzODpcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzOTpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfTk9QTVRVRElTQykge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTQwOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmxhZyBOT1BNVFVESVNDIHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDEtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NDU6XHRcdGlmIChhdHRyc1tYRlJNQV9TQV9FWFRSQV9GTEFHU10pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0NjpcdFx0XHR1MzIgeGZsYWdzID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfU0FfRVhUUkFfRkxBR1NdKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU0Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0ODpcdFx0XHRpZiAoeGZsYWdzIFx1MDAyNiBYRlJNX1NBX1hGTEFHX0RPTlRfRU5DQVBfRFNDUCkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTQ5Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGbGFnIERPTlRfRU5DQVBfRFNDUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTUwLVx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTQ6XHRcdFx0aWYgKHhmbGFncyBcdTAwMjYgWEZSTV9TQV9YRkxBR19PU0VRX01BWV9XUkFQKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTU6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZsYWcgT1NFUV9NQVlfV1JBUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTU2LVx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjI6XHRcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19ET05UX0ZSQUddKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NjM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgZG9uJiMzOTt0IGZyYWdtZW50IHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjQtXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Njg6XHRcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19JTklUX0RFTEFZXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVAtVEZTIGluaXRpYWwgZGVsYXkgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3MC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3My1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NDpcdFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX01BWF9RU0laRV0pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0lQLVRGUyBtYXggcXVldWUgc2l6ZSBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTc2LVx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNTc5LVxubmV0L3hmcm0veGZybV91c2VyLmM6NTgwOlx0XHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfUEtUX1NJWkVdKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo1ODE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUC1URlMgcGFja2V0IHNpemUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Mi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4NzpcdGlmICghc2FfZGlyIFx1MDAyNlx1MDAyNiBhdHRyc1tYRlJNQV9TQV9QQ1BVXSkge1xubmV0L3hmcm0veGZybV91c2VyLmM6NTg4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1NBX1BDUFUgb25seSBzdXBwb3J0ZWQgd2l0aCBTQV9ESVJcJiMzNDspO1xubmV0L3hmcm0veGZybV91c2VyLmMtNTg5LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU5Ni1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5NzpzdGF0aWMgaW50IGF0dGFjaF9vbmVfYWxnbyhzdHJ1Y3QgeGZybV9hbGdvICoqYWxncHAsIHU4ICpwcm9wcyxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5ODpcdFx0XHQgICBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKigqZ2V0X2J5bmFtZSkoY29uc3QgY2hhciAqLCBpbnQpLFxubmV0L3hmcm0veGZybV91c2VyLmMtNTk5LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKnJ0YSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwNDpcdGlmICghcnRhKVxubmV0L3hmcm0veGZybV91c2VyLmMtNjA1LVx0XHRyZXR1cm4gMDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwNi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwNzpcdHVhbGcgPSBubGFfZGF0YShydGEpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNjA4LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjA5Olx0YWxnbyA9IGdldF9ieW5hbWUodWFsZy1cdTAwM2VhbGdfbmFtZSwgMSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MTA6XHRpZiAoIWFsZ28pIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxMTpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXF1ZXN0ZWQgQ09NUCBhbGdvcml0aG0gbm90IGZvdW5kXCYjMzQ7KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNjE1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjE2Olx0cCA9IGttZW1kdXAodWFsZywgeGZybV9hbGdfbGVuKHVhbGcpLCBHRlBfS0VSTkVMKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNzpcdGlmICghcClcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxOC1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQveGZybS94ZnJtX3VzZXIuYy02MTktXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjA6XHRzdHJzY3B5KHAtXHUwMDNlYWxnX25hbWUsIGFsZ28tXHUwMDNlbmFtZSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjEtXHQqYWxncHAgPSBwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYyNC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYyNTpzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MzAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzE6XHRpZiAoIXJ0YSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU1BJIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgcmlnaHQsIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0JiMzOTtzIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBYRlJNX01TR19BTExPQ1NQSWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMsIHRoZSBjb3JlIG9mIHRoaXMgdGhpbmcuIFRoZSBwYXRjaCYjMzk7cyByZW1vdmluZyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kIGB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKWAgZnJvbSB0aGVyZSwgc28gZnVuY3Rpb25hbGx5LCBpdCBzZWVtcyBzb3VuZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGFzIHRoZSBrZXkgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBJIG1lYW4sIGl0JiMzOTtzIHRoZSBmb2NhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9uLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbS4gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCBJIGNhbiYjMzk7dCBsb29rIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCBhIGJyb2FkZXIgc2NvcGUuCgpPa2F5LCBzbyBpZiBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyBzdGF0aWMsIHdoYXQmIzM5O3MgY2FsbGluZyBpdD8gSXMgaXQgdGhlIG9ubHkgZnVuY3Rpb24gaGFuZGxpbmcgdGhpcz8gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIG5vbi1zdGF0aWMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgeGZybV91c2VyX3Jjdl9tc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBBbmQsIHNpbmNlIGl0IGhhbmRsZXMgbmV0bGluayBtZXNzYWdlcywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYHhmcm1fbmV0bGlua19yY3ZgIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIG1lc3NhZ2UgZmxvdyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmV0bGlua19yY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MTEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTEyOnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MTMte1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDA9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNC1cdFx0Lmdyb3Vwc1x0PSBYRlJNTkxHUlBfTUFYLFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcdFx0LmlucHV0XHQ9IHhmcm1fbmV0bGlua19yY3YsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgWEZSTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGB4ZnJtX25ldGxpbmtfcmN2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgbWUgY3VyaW91cyBhYm91dCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIGNoZWNrIGB4ZnJtX3VzZXJfbmV0X2luaXRgIG5leHQuIEFscmlnaHQsIGl0JiMzOTtzIHN0YXRpYyB0b28uIFRoYXTigJlzIGludGVyZXN0aW5nLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzZXR1cCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYHhmcm1fdXNlcl9pbml0YCBmdW5jdGlvbiwgc2VlIGhvdyBldmVyeXRoaW5nIHRpZXMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fdXNlcl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTQ2Mjk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4ZnJtX3VzZXJfbmV0X29wcyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjM0LVxubmV0L3hmcm0veGZybV91c2VyLmM6NDYzNTpzdGF0aWMgaW50IF9faW5pdCB4ZnJtX3VzZXJfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNi17XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NDY0OD1zdGF0aWMgdm9pZCBfX2V4aXQgeGZybV91c2VyX2V4aXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjUzLVxubmV0L3hmcm0veGZybV91c2VyLmM6NDY1NDptb2R1bGVfaW5pdCh4ZnJtX3VzZXJfaW5pdCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjU1LW1vZHVsZV9leGl0KHhmcm1fdXNlcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZSBhYm91dCBgeGZybV91c2VyLmNgOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgeGZybV91c2VyLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGB4ZnJtX3VzZXIuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGEgZ29vZCBjaHVuayBvZiBpdHMgY29tcG9uZW50cyBhcmUgcHJvYmFibHkgc3RhdGljYWxseSBkZWNsYXJlZCwgd2hpY2ggaXNuJiMzOTt0IHVudXN1YWwgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzLCBzbyBteSBtYWluIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgYW55ICpkeW5hbWljYWxseSogYXZhaWxhYmxlIGVsZW1lbnRzIGluIHRoaXMgZmlsZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBhc3N1bXB0aW9uIGF0IHRoZSBtb21lbnQgaXMgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBtb3N0bHkgc3RhdGljIGVsZW1lbnRzLCBleGNlcHQgZm9yIGEgZmV3IHNwZWNpZmljIGV4cG9ydGVkIGZ1bmN0aW9ucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEVYUE9SVF9TWU1CT0xgIHdpdGhpbiB0aGUgc291cmNlIGZpbGUuIFRoaXMgbWFjcm8gd2lsbCBpbW1lZGlhdGVseSBpZGVudGlmeSBhbnkgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlIG1vZHVsZSBpdHNlbGYuIFRoYXQgc2VhcmNoIHdpbGwgcXVpY2tseSBjb25maXJtIG9yIGRpc3Byb3ZlIG15IGluaXRpYWwgaHlwb3RoZXNpcyBhYm91dCB0aGUgc2NvcGUgb2YgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzY0Nz1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NzMtfTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NzQ6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NzUtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzY3OD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYJiM0MzsxXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIwLX07XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzIxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1hX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGUmIzM5O3MgU3RydWN0dXJlKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlYWRpbHkgYXZhaWxhYmxlIHRvIHVzZSBhcyBhIHByaW1hcnkgZm9jdXMgcG9pbnQuIE5vIHByb2JsZW0sIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgdGFyZ2V0IGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGluc3RlYWQuIEV2ZW4gaWYgaXQmIzM5O3MgdGVjaG5pY2FsbHkgYSBzdGF0aWMgZnVuY3Rpb24sIGl0cyBwcmVzZW5jZSBpbiB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXkgbWFrZXMgaXQgYSBkZWNlbnQgdGFyZ2V0LiBJdCB3b24mIzM5O3QgYmUgaW5saW5lZCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4KCkhhbmcgb24gYSBtb21lbnQgdGhvdWdoLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYHhmcm1fcHV0X3RyYW5zbGF0b3JgLiBUaG9zZSBtaWdodCBvZmZlciBhIGJldHRlciwgbW9yZSBhcHByb3ByaWF0ZSBhbmdsZSBvbiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSBmb3IgYW5hbHlzaXMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHBpY2tpbmcgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY2FsIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2dldF90cmFuc2xhdG9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0yMzE3PWV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3RyYW5zbGF0b3Ioc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyKTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzE4OmV4dGVybiBzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4ZnJtX2dldF90cmFuc2xhdG9yKHZvaWQpO1xuaW5jbHVkZS9uZXQveGZybS5oLTIzMTktZXh0ZXJuIHZvaWQgeGZybV9wdXRfdHJhbnNsYXRvcihzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIpO1xuaW5jbHVkZS9uZXQveGZybS5oLTIzMjAtI2Vsc2VcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzIxOnN0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeGZybV9nZXRfdHJhbnNsYXRvcih2b2lkKVxuaW5jbHVkZS9uZXQveGZybS5oLTIzMjIte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTQ5PXN0YXRpYyBzdHJ1Y3QgeGZybV90cmFuc2xhdG9yIF9fcmN1ICp4ZnJtX3RyYW5zbGF0b3I7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk1MC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTUxOnN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTUyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2dldF90cmFuc2xhdG9yKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY2LVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMDA3PWludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjgtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMwMjk6XHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDMwLVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE0OTc9c3RhdGljIGludCBkdW1wX29uZV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTUyMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1MjE6XHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTIyLVx0aWYgKHh0cikge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE2Mjc9c3RhdGljIGlubGluZSBpbnQgeGZybV9ubG1zZ19tdWx0aWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MzctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjM4Olx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMTYzOS1cdGlmICh4dHIpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzkzPXN0YXRpYyBpbnQgZHVtcF9vbmVfcG9saWN5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI0MjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNDI3Olx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMjQyOC1cdGlmICh4dHIpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zODI1PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzg0NS1cdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFx1MDAyNlx1MDAyNiBpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQ2Olx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipGb2N1c2luZyBvbiBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgd2FzIGp1c3QgcmVtb3ZlZCBmcm9tIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBBbHJpZ2h0LCB0aGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZCwgdGhlIHN5bWJvbCB0aGF0IEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGlzIGdvaW5nIHRvIGJlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBUaGF04oCZcyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLCB3aGljaCBzaG91bGQgYmUgYFhGUk1fVVNFUmAuIEhvbGQgb24gYSBzZWNvbmTigKYgSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBYRlJNX1VTRVJgIGRlZmluaXRpb24gYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgY29ycmVjdGx5LiBHb3R0YSBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9VU0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMAoJCQkJCQkJb3V0cHV0OiA5OAoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFhGUk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBYRlJNX1VTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgYmVpbmcgYWZmZWN0ZWQuIEtub3dpbmcgdGhhdCwgSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgKldvcnRoRnV6emluZyouIFRoaXMgY2hhbmdlIHRvIHRoZSBJUHNlYyBYRlJNIHVzZXIgaW50ZXJmYWNlIGlzIGEgZnVuY3Rpb25hbCBvbmUuCgpUaGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGlzIG5ldGxpbmsgaGFuZGxlci4gU2luY2UgYFhGUk1fVVNFUmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBhbHNvIGVuYWJsZWQgZm9yIHRoYXQuIFRoZSBwYXRjaCByZW1vdmVzIGNhbGxzIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgc28gdGhpcyB3aWxsIG5lZWQgc3BlY2lmaWMgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fYWxsb2NfdXNlcnNwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjYWxsIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgaW4gdGhlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIG5ldGxpbmsgaGFuZGxlciwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBzZWMgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzIuMTMyMjEwODc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzNTcxNTkxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9hbGxvY191c2Vyc3BpXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgYWxsb2NfY29tcGF0YCBpbiB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgbmV0bGluayBoYW5kbGVyLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHNlYyBYRlJNIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjMyLjEzMjIxODM3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNTU4MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDg4YzdhMTFmYTJiZmRiYjZlNjRjZWE3NTU4OTI4NDg1MGU4OGI3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjAyOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCBkNmRiNjMzMDRiYTZiLi5hN2YzNWExMjM2NDhkIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xcbi1cXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcXG4gXFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xcbiBcXHRpbnQgZmFtaWx5O1xcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuLVxcdGlmICh4dHIpIHtcXG4tXFx0XFx0ZXJyID0geHRyLVxcdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XFxuLVxcbi1cXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuLVxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gXFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjozMi42NTY4MjI3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzgzMjUzMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4YzdhMTFmYTJiZmRiYjZlNjRjZWE3NTU4OTI4NDg1MGU4OGI3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMjI6MDI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5pbmRleCBkNmRiNjMzMDRiYTZiLi5hN2YzNWExMjM2NDhkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgKzE5NDIsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4tXHRpZiAoeHRyKSB7XG4tXHRcdGVyciA9IHh0ci1cdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XG4tXG4tXHRcdHhmcm1fcHV0X3RyYW5zbGF0b3IoeHRyKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGtmcmVlX3NrYihyZXNwX3NrYik7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGVyciA9IG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJlc3Bfc2tiLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjozMi42NTY4MjUzNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMzOTMwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQW5hbHl6aW5nIGEgWEZSTSBVc2Vyc3BhY2UgU1BJIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBYRlJNIHVzZXJzcGFjZSBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJdCdzIHRhcmdldGluZyB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgZnVuY3Rpb24sIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kaWNlcyAoU1BJcykgZnJvbSB1c2VyIHNwYWNlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcigpYCBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIGNhbGwgdG8gYHh0ci1cdTAwM2VhbGxvY19jb21wYXQoKWAuIEhtbSwgaW50ZXJlc3RpbmcuIFRoaXMgc291bmRzIGxpa2UgaXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIElQc2VjIChYRlJNKSBuZXRsaW5rIGludGVyYWN0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGlzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZXh0IG9mIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIGFuZCB3aGF0IHRob3NlIGNhbGxzIGFjdHVhbGx5IGRpZC4gVGltZSB0byBicmVhayBvdXQgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgYWxsIGluc3RhbmNlcyBvZiBgeGZybV9hbGxvY191c2Vyc3BpYCB3aXRoaW4gdGhlIHJlbGV2YW50IGtlcm5lbCB0cmVlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbiBhbmQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcycgaW1wYWN0LiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzYuNjkwNzU5MjcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzg2MzgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9hbGxvY191c2Vyc3BpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE4NDk9c3RhdGljIGludCB4ZnJtX2dldF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4NzItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTg3MzpzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODc0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAuZG9uZSA9IHhmcm1fZHVtcF9wb2xpY3lfZG9uZSB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDg6XFx0W1hGUk1fTVNHX0FMTE9DU1BJICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hbGxvY191c2Vyc3BpIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OS1cXHRbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9hY3F1aXJlICAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6MzkuMzI5NDM5NTEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNzQzNTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgeGZybV9hbGxvY191c2Vyc3BpYCBGdW5jdGlvbmFsaXR5KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBTbywgYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgdGhlIHdvcmtob3JzZSBmb3IgaGFuZGxpbmcgdGhlIGBYRlJNX01TR19BTExPQ1NQSWAgbmV0bGluayBtZXNzYWdlLiBUaGF0J3MgZ29vZC4gSXQgbWVhbnMgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb21wb25lbnQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoYXQncyByZXF1aXJlZCBmb3IgYFhGUk1fVVNFUmAgdG8gYmUgb3BlcmF0aW9uYWwuIEdvdHRhIGVuc3VyZSB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBhbGxvY2F0aW9uIHRvIGV2ZW4gd29yayBhcyBpbnRlbmRlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgYWxsIGluIHBsYWNlLiBHb3R0YSBsb29rIGF0IHRoZSBidWlsZCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo0Mi4yNjY4Nzc5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNjk0NTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9VU0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo0NS4wNzM4MzA2MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAyMzAwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhmcm1fYWxsb2NfdXNlcnNwaWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgWEZSTV9VU0VSYCwgYW5kIG15IGZvY3VzIGlzIG9uIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYW55IGRlcGVuZGVuY2llcy4gUmlnaHQsIGBYRlJNX1VTRVJgIGRlcGVuZHMgb24gYElORVRgLiBHb3QgaXQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgWEZSTV9VU0VSYCB0byBFbmFibGVDb25maWdzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYHhmcm1fYWxsb2NfdXNlcnNwaWAgcmV2ZWFscyB0aGF0IGl0J3Mgc3RhdGljLiBIbW0sIGJ1dCB3YWl0IGEgbWludXRlLi4uIHRob3NlIGd1aWRlbGluZXMgYXJlIHN1Z2dlc3RpbmcgSSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJdOKAmXMgYSBiaXQgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGEgbmV0bGluayBoYW5kbGVyLiBCZWNhdXNlIGl0J3MgcmVmZXJlbmNlZCBpbiB0aGUgYHhmcm1fbGlua2AgYXJyYXksIEkgc3VzcGVjdCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBCdXQgbWF5YmUsIGp1c3QgbWF5YmUsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaW5jbHVkaW5nIHRoZSBuZXRsaW5rIGRpc3BhdGNoIGZ1bmN0aW9uLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2guIEknbGwgdGFrZSBhIGxvb2sgYXQgaG93IHRoZSBgeGZybV9saW5rYCBhcnJheSBpcyB1c2VkLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDI6NDkuNDc2MTM0NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTg3MDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTU0PUVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5NTUtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozOTU2OnN0YXRpYyB2b2lkIHhmcm1fbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTU3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDExMT1pbnQgeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbywgaW50IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEzMy1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZWxpbmtfZmFpbHVyZSA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMzQ6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlbGlua19mYWlsdXJlID0geGZybV9saW5rX2ZhaWx1cmU7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTM1LVxcdFxcdGlmIChsaWtlbHkoZHN0X29wcy1cXHUwMDNlbmVpZ2hfbG9va3VwID09IE5VTEwpKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzcyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgeGZybWFfc3BkX3BvbGljeVtYRlJNQV9TUERfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcyNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzI5LVxcdGludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciAqLCBzdHJ1Y3QgbmxhdHRyICoqLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgyOS1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tYRlJNQV9NQVgrMV07XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzgzMDpcXHRjb25zdCBzdHJ1Y3QgeGZybV9saW5rICpsaW5rO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzEtXFx0c3RydWN0IG5sbXNnaGRyICpubGg2NCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjUxLjkzMjAwOTk4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDAyMzc0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIERpc3BhdGNoIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0bGluayBzZXR1cCwgc3BlY2lmaWNhbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIGB4ZnJtX3VzZXJfcmN2X21zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGRlY2VudCBlbnRyeSBwb2ludCB0byBleGFtaW5lLCBhbHRob3VnaCBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgeGZybV91c2VyX3Jjdl9tc2dgIGV2ZW4gc3RhdGljPyBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5Li4uIFllcywgaXQgYXBwZWFycyBpdCBpcy4gVGhhdCBzbGlnaHRseSBsaW1pdHMgd2hlcmUgaXQncyB1c2VkIGRpcmVjdGx5LiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgbG9naWMgaXMgaGlkZGVuIHdpdGhpbiB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCB0aGF0J3Mgbm90IHN0YXRpYyBpcyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMjo1NS41MzIyNDk4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc0MzQ1MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB4ZnJtXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAyOjU1LjY0MTAwMTA2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI1MTk5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogUmUtZXZhbHVhdGluZyB0aGUgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHByb2JsZW0gYWdhaW4uIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHJlYWNoIGZvciBgXmludGAsIGJ1dCBzb21ldGhpbmcncyB0ZWxsaW5nIG1lIHRvIHBhdXNlLiBUaGVyZSdzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgd2UgbWlnaHQgYmUgb3Zlci1jb21wbGljYXRpbmcgdGhpbmdzIG9yIHBlcmhhcHMganVtcGluZyB0byBhIHNwZWNpZmljIHNvbHV0aW9uIHByZW1hdHVyZWx5LiBMZXQncyBzZWUgaWYgd2UgY2FuIGFjaGlldmUgdGhlIGRlc2lyZWQgb3V0Y29tZSB3aXRoIGEgc2ltcGxlciBhcHByb2FjaCBmaXJzdCwgYmVmb3JlIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gbW9yZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMgb3IgY29uc3RydWN0cy4gVGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHJlYWRhYmlsaXR5IGJlbmVmaXRzIG9mIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgZXhwbG9yaW5nIGEgbW9yZSBmdW5kYW1lbnRhbCBzb2x1dGlvbiBiZWZvcmUgcmVzb3J0aW5nIHRvIGEgcG90ZW50aWFsbHkgbW9yZSByZXNvdXJjZS1pbnRlbnNpdmUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzowMS43NjYyMDQwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODU4ODE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9dKyB4ZnJtXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjAxLjg0MjA2OTc3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExODQwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhpcyBmaWxlLiBNeSBndXQgZmVlbGluZyBpcyB3ZSd2ZSBnb3QgYSBsb3Qgb2Ygc3RhdGljIG1ldGhvZHMgc2NhdHRlcmVkIGFyb3VuZCwgYnV0IGp1c3QgaW4gY2FzZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFib3V0LiBUaGUgY29udGV4dCBoZXJlIGlzIGtleS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGRlc2lnbiBwcmluY2lwbGVzIHdlJ3JlIHVzaW5nIGxlYW4gaGVhdmlseSBvbiBzdGF0aWMgdXRpbGl0eSBtZXRob2RzIHRvIGtlZXAgdGhpbmdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZm9jdXNlZC4gSWYgYSBub24tc3RhdGljIG1ldGhvZCBoYXMgY3JlcHQgaW4sIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aHkuIFdhcyBpdCBhY2NpZGVudGFsPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgdmlvbGF0aW9uIG9mIHRoZSBjaG9zZW4gYXJjaGl0ZWN0dXJhbCBzdHlsZT8gSWYgaXQncyB0aGUgbGF0dGVyLCB3ZSBtYXkgbmVlZCB0byByZWRlc2lnbi4gQSBxdWljayByZXZpZXcgbGlrZSB0aGlzIHNhdmVzIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MDQuODUzOTEzMDk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzEyMjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW14gXFxcXHRdLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM5MjIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzg6c3RhdGljIHN0cnVjdCBzb2NrICp4ZnJtX25ldF9ubHNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOS17XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDAtXFx0LyogZ2V0IHRoZSBzb3VyY2Ugb2YgdGhpcyByZXF1ZXN0LCBzZWUgbmV0bGlua191bmljYXN0X2tlcm5lbCAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxOlxcdGNvbnN0IHN0cnVjdCBzb2NrICpzayA9IE5FVExJTktfQ0Ioc2tiKS5zaztcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00My1cXHQvKiBzayBpcyByZWZjb3VudGVkLCB0aGUgbmV0bnMgc3RheXMgYWxpdmUgYW5kIG5sc2sgd2l0aCBpdCAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0OlxcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC1cXHUwMDNleGZybS5ubHNrLCBzay1cXHUwMDNlc2tfbmV0X3JlZmNudCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ3OnN0YXRpYyBpbnQgdmVyaWZ5X29uZV9hbGcoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBlbnVtIHhmcm1fYXR0cl90eXBlX3QgdHlwZSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OC1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUzOlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTQtXFx0XFx0cmV0dXJuIDA7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTY6XFx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NzpcXHRpZiAobmxhX2xlbihydCkgXFx1MDAzYyAoaW50KXhmcm1fYWxnX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgQVVUSC9DUllQVC9DT01QIGF0dHJpYnV0ZSBsZW5ndGhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYyOlxcdHN3aXRjaCAodHlwZSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzLVxcdGNhc2UgWEZSTUFfQUxHX0FVVEg6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02OC1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjY5OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgYWxnb3JpdGhtIGF0dHJpYnV0ZSB0eXBlXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy03Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo3MzpcXHRhbGdwLVxcdTAwM2VhbGdfbmFtZVtzaXplb2YoYWxncC1cXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTc0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNzYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Nzc6c3RhdGljIGludCB2ZXJpZnlfYXV0aF90cnVuYyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy04Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo4MzpcXHRpZiAoIXJ0KVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTg0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTg1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg2OlxcdGFsZ3AgPSBubGFfZGF0YShydCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6ODc6XFx0aWYgKG5sYV9sZW4ocnQpIFxcdTAwM2MgKGludCl4ZnJtX2FsZ19hdXRoX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjg4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgQVVUSF9UUlVOQyBhdHRyaWJ1dGUgbGVuZ3RoXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtODktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05MS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo5MjpcXHRhbGdwLVxcdTAwM2VhbGdfbmFtZVtzaXplb2YoYWxncC1cXHUwMDNlYWxnX25hbWUpIC0gMV0gPSAnXFxcXDAnO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTkzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6OTY6c3RhdGljIGludCB2ZXJpZnlfYWVhZChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQveGZybS94ZnJtX3VzZXIuYy05Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTAxOlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTAyLVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDQ6XFx0YWxncCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDU6XFx0aWYgKG5sYV9sZW4ocnQpIFxcdTAwM2MgKGludClhZWFkX2xlbihhbGdwKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwNjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIEFFQUQgYXR0cmlidXRlIGxlbmd0aFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMTA6XFx0YWxncC1cXHUwMDNlYWxnX25hbWVbc2l6ZW9mKGFsZ3AtXFx1MDAzZWFsZ19uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTE0OnN0YXRpYyB2b2lkIHZlcmlmeV9vbmVfYWRkcihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIGVudW0geGZybV9hdHRyX3R5cGVfdCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTExNS1cXHRcXHRcXHQgICB4ZnJtX2FkZHJlc3NfdCAqKmFkZHJwKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTE4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjExOTpcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgYWRkcnApXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIwOlxcdFxcdCphZGRycCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjM6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3NlY19jdHhfbGVuKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTI4OlxcdGlmICghcnQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTI5LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzE6XFx0dWN0eCA9IG5sYV9kYXRhKHJ0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzI6XFx0aWYgKHVjdHgtXFx1MDAzZWxlbiBcXHUwMDNlIG5sYV9sZW4ocnQpIHx8XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTMzOlxcdCAgICB1Y3R4LVxcdTAwM2VsZW4gIT0gKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpICsgdWN0eC1cXHUwMDNlY3R4X2xlbikpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMzQ6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzZWN1cml0eSBjb250ZXh0IGxlbmd0aFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEzNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDE6c3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X3JlcGxheShzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDItXFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqKmF0dHJzLCB1OCBzYV9kaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4OlxcdGlmICghcnQpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDk6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9FU04pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTTlxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTY6XFx0cnMgPSBubGFfZGF0YShydCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTU3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1ODpcXHRpZiAocnMtXFx1MDAzZWJtcF9sZW4gXFx1MDAzZSBYRlJNQV9SRVBMQVlfRVNOX01BWCAvIHNpemVvZihycy1cXHUwMDNlYm1wWzBdKSAvIDgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNTk6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRVNOIGJpdG1hcCBsZW5ndGggbXVzdCBiZSBcXHUwMDNjPSAxMjhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTYzOlxcdGlmIChubGFfbGVuKHJ0KSBcXHUwMDNjIChpbnQpeGZybV9yZXBsYXlfc3RhdGVfZXNuX2xlbihycykgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNjQ6XFx0ICAgIG5sYV9sZW4ocnQpICE9IHNpemVvZigqcnMpKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTY1OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkVTTiBhdHRyaWJ1dGUgaXMgdG9vIHNob3J0IHRvIGZpdCB0aGUgZnVsbCBiaXRtYXAgbGVuZ3RoXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTY2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTY5LVxcdC8qIEFzIG9ubHkgRVNQIGFuZCBBSCBzdXBwb3J0IEVTTiBmZWF0dXJlLiAqL1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3MDpcXHRpZiAoKHAtXFx1MDAzZWlkLnByb3RvICE9IElQUFJPVE9fRVNQKSBcXHUwMDI2XFx1MDAyNiAocC1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzE6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRVNOIG9ubHkgc3VwcG9ydGVkIGZvciBFU1AgYW5kIEFIXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE3NTpcXHRpZiAocC1cXHUwMDNlcmVwbGF5X3dpbmRvdyAhPSAwKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTc2OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkVTTiBub3QgY29tcGF0aWJsZSB3aXRoIGxlZ2FjeSByZXBsYXlfd2luZG93XFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTc5LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4MDpcXHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkgIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxODE6XFx0XFx0aWYgKHJzLVxcdTAwM2VyZXBsYXlfd2luZG93KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTgyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE4My1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODQtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE4NTpcXHRcXHRpZiAocnMtXFx1MDAzZXNlcSB8fCBycy1cXHUwMDNlc2VxX2hpKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTg2OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xODctXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJSZXBsYXkgc2VxIGFuZCBzZXFfaGkgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTkwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MTpcXHRcXHRpZiAoIShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE5MjpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZW9zZXFfaGkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxOTM6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTk0LVxcdFxcdFxcdFxcdFxcdGV4dGFjayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE5Ny1cXHRcXHRcXHR9XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTk4OlxcdFxcdFxcdGlmIChycy1cXHUwMDNlb3NlcSA9PSBVMzJfTUFYKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MTk5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwMC1cXHRcXHRcXHRcXHRcXHRleHRhY2ssXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDQtXFx0XFx0fSBlbHNlIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMDU6XFx0XFx0XFx0aWYgKHJzLVxcdTAwM2Vvc2VxID09IFUzMl9NQVggXFx1MDAyNlxcdTAwMjYgcnMtXFx1MDAzZW9zZXFfaGkgPT0gVTMyX01BWCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDctXFx0XFx0XFx0XFx0XFx0ZXh0YWNrLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjExLVxcdFxcdH1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMTI6XFx0XFx0aWYgKHJzLVxcdTAwM2VibXBfbGVuKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjEzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSBibXBfbGVuIHNob3VsZCAwIGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMTctXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjE4OlxcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pICB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjE5OlxcdFxcdGlmIChycy1cXHUwMDNlb3NlcSB8fCBycy1cXHUwMDNlb3NlcV9oaSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjIxLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiUmVwbGF5IG9zZXEgYW5kIG9zZXFfaGkgc2hvdWxkIGJlIDAgZm9yIGlucHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMjMtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNDpcXHRcXHRpZiAoIShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfRVNOKSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNTpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZXNlcV9oaSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIyNjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMjctXFx0XFx0XFx0XFx0XFx0ZXh0YWNrLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjMxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzMjpcXHRcXHRcXHRpZiAocnMtXFx1MDAzZXNlcSA9PSBVMzJfTUFYKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjMzOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzNC1cXHRcXHRcXHRcXHRcXHRleHRhY2ssXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgtXFx0XFx0fSBlbHNlIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk6XFx0XFx0XFx0aWYgKHJzLVxcdTAwM2VzZXEgPT0gVTMyX01BWCBcXHUwMDI2XFx1MDAyNiBycy1cXHUwMDNlc2VxX2hpID09IFUzMl9NQVgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNDA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGV4dGFjayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTE6c3RhdGljIGludCB2ZXJpZnlfbXRpbWVyX3RocmVzaChib29sIGhhc19lbmNhcCwgdTggZGlyLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUzLXtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTQ6XFx0aWYgKCFoYXNfZW5jYXApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTU6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1Ni1cXHRcXHRcXHQgICAgICAgXFxcIk1USU1FUl9USFJFU0ggcmVxdWlyZXMgZW5jYXBzdWxhdGlvblxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjU4LVxcdH1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTk6XFx0aWYgKGRpciA9PSBYRlJNX1NBX0RJUl9PVVQpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNjA6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI2MS1cXHRcXHRcXHQgICAgICAgXFxcIk1USU1FUl9USFJFU0ggc2hvdWxkIG5vdCBiZSBzZXQgb24gb3V0cHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjY3OnN0YXRpYyBpbnQgdmVyaWZ5X3hmcm1fZmFtaWx5KHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNjgte1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI2OTpcXHRzd2l0Y2ggKGZhbWlseSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3MC1cXHRjYXNlIEFGX0lORVQ6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzItXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NS0jZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUHY2IHN1cHBvcnQgZGlzYWJsZWRcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzctXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzktXFx0ZGVmYXVsdDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODA6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhZGRyZXNzIGZhbWlseVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODU6c3RhdGljIGludCB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKHUxNiBmYW1pbHksXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg2LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI4OC17XFxubmV0L3hmcm0veGZybV91c2VyLmM6Mjg5OlxcdHN3aXRjaCAoZmFtaWx5KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjkwLVxcdGNhc2UgQUZfVU5TUEVDOlxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjkyLVxcdGNhc2UgQUZfSU5FVDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTM6XFx0XFx0aWYgKHNlbC1cXHUwMDNlcHJlZml4bGVuX2QgXFx1MDAzZSAzMiB8fCBzZWwtXFx1MDAzZXByZWZpeGxlbl9zIFxcdTAwM2UgMzIpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyOTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgcHJlZml4IGxlbmd0aCBpbiBzZWxlY3RvciAobXVzdCBiZSBcXHUwMDNjPSAzMiBmb3IgSVB2NClcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTktXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzAxOlxcdFxcdGlmIChzZWwtXFx1MDAzZXByZWZpeGxlbl9kIFxcdTAwM2UgMTI4IHx8IHNlbC1cXHUwMDNlcHJlZml4bGVuX3MgXFx1MDAzZSAxMjgpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMzpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgcHJlZml4IGxlbmd0aCBpbiBzZWxlY3RvciAobXVzdCBiZSBcXHUwMDNjPSAxMjggZm9yIElQdjYpXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzA0LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzA3LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzA4OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQdjYgc3VwcG9ydCBkaXNhYmxlZFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwOS1cXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMS1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMjpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGFkZHJlc3MgZmFtaWx5IGluIHNlbGVjdG9yXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzEzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzE2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxNzpzdGF0aWMgaW50IHZlcmlmeV9uZXdzYV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyMS1cXHRpbnQgZXJyO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyMjpcXHR1OCBzYV9kaXIgPSBubGFfZ2V0X3U4X2RlZmF1bHQoYXR0cnNbWEZSTUFfU0FfRElSXSwgMCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzIzLVxcdHUxNiBmYW1pbHkgPSBwLVxcdTAwM2VzZWwuZmFtaWx5O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjU6XFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHAtXFx1MDAzZWZhbWlseSwgZXh0YWNrKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjY6XFx0aWYgKGVycilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjctXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTpcXHRpZiAoIWZhbWlseSBcXHUwMDI2XFx1MDAyNiAhKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9BRl9VTlNQRUMpKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMC1cXHRcXHRmYW1pbHkgPSBwLVxcdTAwM2VmYW1pbHk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjpcXHRlcnIgPSB2ZXJpZnlfc2VsZWN0b3JfcHJlZml4bGVuKGZhbWlseSwgXFx1MDAyNnAtXFx1MDAzZXNlbCwgZXh0YWNrKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzM6XFx0aWYgKGVycilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzYtXFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzc6XFx0c3dpdGNoIChwLVxcdTAwM2VpZC5wcm90bykge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzOC1cXHRjYXNlIElQUFJPVE9fQUg6XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM5OlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdXFx0XFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDAtXFx0XFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEFIOiBBVVRIX1RSVU5DIG9yIEFVVEhcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDItXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cXHR8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0Ni1cXHRcXHQgICAgYXR0cnNbWEZSTUFfQUxHX0NSWVBUXVxcdHx8XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDgtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGVzIGZvciBBSDogQUVBRCwgQ1JZUFQsIENPTVAsIFRGQ1BBRFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MC1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NC1cXHRjYXNlIElQUFJPVE9fRVNQOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NTpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU2OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgYXR0cmlidXRlIGZvciBFU1A6IENPTVBcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTctXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTktXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzYwOlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQUxHX0FVVEhdIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzYxLVxcdFxcdCAgICAhYXR0cnNbWEZSTUFfQUxHX0FVVEhfVFJVTkNdIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjMtXFx0XFx0ICAgICFhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIEVTUDogYXQgbGVhc3Qgb25lIG9mIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBBRUFEXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2ODpcXHRcXHRpZiAoKGF0dHJzW1hGUk1BX0FMR19BVVRIXSB8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2OS1cXHRcXHQgICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIX1RSVU5DXSB8fFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcxLVxcdFxcdCAgICBhdHRyc1tYRlJNQV9BTEdfQUVBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGUgY29tYmluYXRpb24gZm9yIEVTUDogQUVBRCBjYW4ndCBiZSB1c2VkIHdpdGggQVVUSCwgQVVUSF9UUlVOQywgQ1JZUFRcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzMtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9URkNQQURdIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc3LVxcdFxcdCAgICBwLVxcdTAwM2Vtb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVEZDIHBhZGRpbmcgY2FuIG9ubHkgYmUgdXNlZCBpbiB0dW5uZWwgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3OS1cXHRcXHRcXHRnb3RvIG91dDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODAtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM4MTpcXHRcXHRpZiAoKGF0dHJzW1hGUk1BX0lQVEZTX0RST1BfVElNRV0gfHxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODItXFx0XFx0ICAgICBhdHRyc1tYRlJNQV9JUFRGU19SRU9SREVSX1dJTkRPV10gfHxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4Ny1cXHRcXHQgICAgcC1cXHUwMDNlbW9kZSAhPSBYRlJNX01PREVfSVBURlMpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIG9wdGlvbnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBJUC1URlMgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4OS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5My1cXHRjYXNlIElQUFJPVE9fQ09NUDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTQ6XFx0XFx0aWYgKCFhdHRyc1tYRlJNQV9BTEdfQ09NUF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIENPTVA6IENPTVBcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTYtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzk5OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9BTEdfQUVBRF1cXHR8fFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMC1cXHRcXHQgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdXFx0fHxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwMy1cXHRcXHQgICAgYXR0cnNbWEZSTUFfVEZDUEFEXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGF0dHJpYnV0ZXMgZm9yIENPTVA6IEFFQUQsIEFVVEgsIEFVVEhfVFJVTkMsIENSWVBULCBURkNQQURcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDUtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4OlxcdFxcdGlmIChudG9obChwLVxcdTAwM2VpZC5zcGkpIFxcdTAwM2U9IDB4MTAwMDApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU1BJIGlzIHRvbyBsYXJnZSBmb3IgQ09NUCAobXVzdCBiZSBcXHUwMDNjIDB4MTAwMDApXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDEwLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTUtXFx0Y2FzZSBJUFBST1RPX0RTVE9QVFM6XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDE2LVxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQxNzpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfQUxHX0NPTVBdXFx0fHxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MTgtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX0FMR19BVVRIXVxcdHx8XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjQtXFx0XFx0ICAgIGF0dHJzW1hGUk1BX1RGQ1BBRF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MjU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBhdHRyaWJ1dGVzIGZvciBEU1RPUFRTL1JPVVRJTkdcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjYtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MjgtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDI5OlxcdFxcdGlmICghYXR0cnNbWEZSTUFfQ09BRERSXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNaXNzaW5nIHJlcXVpcmVkIENPQUREUiBhdHRyaWJ1dGUgZm9yIERTVE9QVFMvUk9VVElOR1xcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzMS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzNi1cXHRkZWZhdWx0Olxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQzNzpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBwcm90b2NvbFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQzOC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ0MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NDE6XFx0aWYgKChlcnIgPSB2ZXJpZnlfYWVhZChhdHRycywgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQyLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0MzpcXHRpZiAoKGVyciA9IHZlcmlmeV9hdXRoX3RydW5jKGF0dHJzLCBleHRhY2spKSlcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDQtXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ1OlxcdGlmICgoZXJyID0gdmVyaWZ5X29uZV9hbGcoYXR0cnMsIFhGUk1BX0FMR19BVVRILCBleHRhY2spKSlcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NDYtXFx0XFx0Z290byBvdXQ7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDQ3OlxcdGlmICgoZXJyID0gdmVyaWZ5X29uZV9hbGcoYXR0cnMsIFhGUk1BX0FMR19DUllQVCwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDQ4LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ0OTpcXHRpZiAoKGVyciA9IHZlcmlmeV9vbmVfYWxnKGF0dHJzLCBYRlJNQV9BTEdfQ09NUCwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUwLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MTpcXHRpZiAoKGVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbihhdHRycywgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDUyLVxcdFxcdGdvdG8gb3V0O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ1MzpcXHRpZiAoKGVyciA9IHZlcmlmeV9yZXBsYXkocCwgYXR0cnMsIHNhX2RpciwgZXh0YWNrKSkpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDU2LVxcdGVyciA9IC1FSU5WQUw7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDU3OlxcdHN3aXRjaCAocC1cXHUwMDNlbW9kZSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ1OC1cXHRjYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjMtXFx0Y2FzZSBYRlJNX01PREVfSVBURlM6XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDY0OlxcdFxcdGlmIChwLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgbW9kZSBvbmx5IHN1cHBvcnRlZCB3aXRoIEVTUFxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2Ni1cXHRcXHRcXHRnb3RvIG91dDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjctXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2ODpcXHRcXHRpZiAoc2FfZGlyID09IDApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0Njk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIG1vZGUgcmVxdWlyZXMgaW4gb3Igb3V0IGRpcmVjdGlvbiBhdHRyaWJ1dGVcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzAtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NzQtXFx0ZGVmYXVsdDpcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NzU6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbW9kZVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ3Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ4MC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODE6XFx0aWYgKGF0dHJzW1hGUk1BX01USU1FUl9USFJFU0hdKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDgyOlxcdFxcdGVyciA9IHZlcmlmeV9tdGltZXJfdGhyZXNoKCEhYXR0cnNbWEZSTUFfRU5DQVBdLCBzYV9kaXIsIGV4dGFjayk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDgzOlxcdFxcdGlmIChlcnIpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDg0LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDg2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4NzpcXHRpZiAoc2FfZGlyID09IFhGUk1fU0FfRElSX09VVCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ4ODpcXHRcXHRpZiAocC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX1NUQVRFX0RFQ0FQX0RTQ1ApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0ODk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmxhZyBERUNBUF9EU0NQIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTAtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ5My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0OTQ6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9JQ01QKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NDk1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZsYWcgSUNNUCBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNDk2LVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00OTktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTAwOlxcdFxcdGlmIChwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmxhZyBXSUxEUkVDViBzaG91bGQgbm90IGJlIHNldCBmb3Igb3V0cHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTAyLVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MDUtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTA2OlxcdFxcdGlmIChwLVxcdTAwM2VyZXBsYXlfd2luZG93KSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTA3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlJlcGxheSB3aW5kb3cgc2hvdWxkIGJlIDAgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUwOC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTExLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxMjpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfRFJPUF9USU1FXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxMzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgZHJvcCB0aW1lIHNob3VsZCBub3QgYmUgc2V0IGZvciBvdXRwdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MTQtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUxNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MTg6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUxOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgcmVvcmRlciB3aW5kb3cgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIG91dHB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUyMC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTIzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNDpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MjUtXFx0XFx0XFx0c3RydWN0IHhmcm1fcmVwbGF5X3N0YXRlICpyZXBsYXk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTI2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyNzpcXHRcXHRcXHRyZXBsYXkgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTI4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjUyOTpcXHRcXHRcXHRpZiAocmVwbGF5LVxcdTAwM2VzZXEgfHwgcmVwbGF5LVxcdTAwM2ViaXRtYXApIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1MzA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTUzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIlJlcGxheSBzZXEgYW5kIGJpdG1hcCBzaG91bGQgYmUgMCBmb3Igb3V0cHV0IFNBXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01MzctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTM4OlxcdGlmIChzYV9kaXIgPT0gWEZSTV9TQV9ESVJfSU4pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Mzk6XFx0XFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9OT1BNVFVESVNDKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTQwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZsYWcgTk9QTVRVRElTQyBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDEtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU0NC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NDU6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX1NBX0VYVFJBX0ZMQUdTXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0NjpcXHRcXHRcXHR1MzIgeGZsYWdzID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfU0FfRVhUUkFfRkxBR1NdKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NDctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTQ4OlxcdFxcdFxcdGlmICh4ZmxhZ3MgXFx1MDAyNiBYRlJNX1NBX1hGTEFHX0RPTlRfRU5DQVBfRFNDUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU0OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGbGFnIERPTlRfRU5DQVBfRFNDUCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NTAtXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU1My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1NTQ6XFx0XFx0XFx0aWYgKHhmbGFncyBcXHUwMDI2IFhGUk1fU0FfWEZMQUdfT1NFUV9NQVlfV1JBUCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU1NTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGbGFnIE9TRVFfTUFZX1dSQVAgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTU2LVxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjEtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTYyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19ET05UX0ZSQUddKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTYzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQLVRGUyBkb24ndCBmcmFnbWVudCBzaG91bGQgbm90IGJlIHNldCBmb3IgaW5wdXQgU0FcXFwiKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NjQtXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU2Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1Njg6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX0lQVEZTX0lOSVRfREVMQVldKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NTY5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIklQLVRGUyBpbml0aWFsIGRlbGF5IHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU3MC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTczLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NDpcXHRcXHRpZiAoYXR0cnNbWEZSTUFfSVBURlNfTUFYX1FTSVpFXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU3NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUC1URlMgbWF4IHF1ZXVlIHNpemUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGlucHV0IFNBXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTc2LVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01NzktXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTgwOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9JUFRGU19QS1RfU0laRV0pIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo1ODE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVAtVEZTIHBhY2tldCBzaXplIHNob3VsZCBub3QgYmUgc2V0IGZvciBpbnB1dCBTQVxcXCIpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU4Mi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNTg2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4NzpcXHRpZiAoIXNhX2RpciBcXHUwMDI2XFx1MDAyNiBhdHRyc1tYRlJNQV9TQV9QQ1BVXSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU4ODpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTQV9QQ1BVIG9ubHkgc3VwcG9ydGVkIHdpdGggU0FfRElSXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNTg5LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy01OTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NTk3OnN0YXRpYyBpbnQgYXR0YWNoX29uZV9hbGdvKHN0cnVjdCB4ZnJtX2FsZ28gKiphbGdwcCwgdTggKnByb3BzLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjU5ODpcXHRcXHRcXHQgICBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKigqZ2V0X2J5bmFtZSkoY29uc3QgY2hhciAqLCBpbnQpLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTU5OS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICpydGEsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MDQ6XFx0aWYgKCFydGEpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjA1LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYwNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MDc6XFx0dWFsZyA9IG5sYV9kYXRhKHJ0YSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjA4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYwOTpcXHRhbGdvID0gZ2V0X2J5bmFtZSh1YWxnLVxcdTAwM2VhbGdfbmFtZSwgMSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6NjEwOlxcdGlmICghYWxnbykge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxMTpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXF1ZXN0ZWQgQ09NUCBhbGdvcml0aG0gbm90IGZvdW5kXFxcIik7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjEyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjE1LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNjpcXHRwID0ga21lbWR1cCh1YWxnLCB4ZnJtX2FsZ19sZW4odWFsZyksIEdGUF9LRVJORUwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjYxNzpcXHRpZiAoIXApXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjE4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYxOS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjA6XFx0c3Ryc2NweShwLVxcdTAwM2VhbGdfbmFtZSwgYWxnby1cXHUwMDNlbmFtZSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtNjIxLVxcdCphbGdwcCA9IHA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NjI1OnN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzE6XFx0aWYgKCFydGEpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjA0Ljk0NzA0MDg3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc1OTE4OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTSBTUEkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgcmlnaHQsIGB4ZnJtX2FsbG9jX3VzZXJzcGlgIOKAkyB0aGF0J3MgdGhlIG5ldGxpbmsgaGFuZGxlciBmb3IgYFhGUk1fTVNHX0FMTE9DU1BJYC4gIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLCB0aGUgY29yZSBvZiB0aGlzIHRoaW5nLiBUaGUgcGF0Y2gncyByZW1vdmluZyBhIGNhbGwgdG8gYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgYW5kIGB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpYCBmcm9tIHRoZXJlLCBzbyBmdW5jdGlvbmFsbHksIGl0IHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgeGZybV9hbGxvY191c2Vyc3BpYCBhcyB0aGUga2V5IHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gSSBtZWFuLCBpdCdzIHRoZSBmb2NhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9uLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gYHhmcm1fYWxsb2NfdXNlcnNwaWAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbS4gU2luY2UgaXQncyBzdGF0aWMsIEkgY2FuJ3QgbG9vayB0byBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgYSBicm9hZGVyIHNjb3BlLlxuXG5Pa2F5LCBzbyBpZiBgeGZybV9hbGxvY191c2Vyc3BpYCBpcyBzdGF0aWMsIHdoYXQncyBjYWxsaW5nIGl0PyBJcyBpdCB0aGUgb25seSBmdW5jdGlvbiBoYW5kbGluZyB0aGlzPyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgbm9uLXN0YXRpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgeGZybV91c2VyX3Jjdl9tc2dgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBBbmQsIHNpbmNlIGl0IGhhbmRsZXMgbmV0bGluayBtZXNzYWdlcywgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBgeGZybV9uZXRsaW5rX3JjdmAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbWVzc2FnZSBmbG93IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MDkuNjIyOTYzNDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE0NDY4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fbmV0bGlua19yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzgyNT1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkxMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTEyOnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTEzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MDA9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjA0LVxcdFxcdC5ncm91cHNcXHQ9IFhGUk1OTEdSUF9NQVgsXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYwNTpcXHRcXHQuaW5wdXRcXHQ9IHhmcm1fbmV0bGlua19yY3YsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYwNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoxMS45Mzc0NDEyMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0ODcwMDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFhGUk0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHhmcm1fbmV0bGlua19yY3ZgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzIGFib3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdywgbGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBJJ2xsIGNoZWNrIGB4ZnJtX3VzZXJfbmV0X2luaXRgIG5leHQuIEFscmlnaHQsIGl0J3Mgc3RhdGljIHRvby4gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHNldHVwLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBgeGZybV91c2VyX2luaXRgIGZ1bmN0aW9uLCBzZWUgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoxNC43ODYxNDQ4ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTUyNjM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9NDYyOT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhmcm1fdXNlcl9uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjM1OnN0YXRpYyBpbnQgX19pbml0IHhmcm1fdXNlcl9pbml0KHZvaWQpXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYzNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjQ4PXN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX3VzZXJfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDY1My1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0NjU0Om1vZHVsZV9pbml0KHhmcm1fdXNlcl9pbml0KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjU1LW1vZHVsZV9leGl0KHhmcm1fdXNlcl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MTYuOTQxNDE2OTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTE0NDU2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlIGFib3V0IGB4ZnJtX3VzZXIuY2A6XG5cbioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIHhmcm1fdXNlci5jKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHhmcm1fdXNlci5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYSBnb29kIGNodW5rIG9mIGl0cyBjb21wb25lbnRzIGFyZSBwcm9iYWJseSBzdGF0aWNhbGx5IGRlY2xhcmVkLCB3aGljaCBpc24ndCB1bnVzdWFsIGZvciB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gbXkgbWFpbiBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSAqZHluYW1pY2FsbHkqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgYXNzdW1wdGlvbiBhdCB0aGUgbW9tZW50IGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgbW9zdGx5IHN0YXRpYyBlbGVtZW50cywgZXhjZXB0IGZvciBhIGZldyBzcGVjaWZpYyBleHBvcnRlZCBmdW5jdGlvbnMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlLiBUaGlzIG1hY3JvIHdpbGwgaW1tZWRpYXRlbHkgaWRlbnRpZnkgYW55IGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZSBtb2R1bGUgaXRzZWxmLiBUaGF0IHNlYXJjaCB3aWxsIHF1aWNrbHkgY29uZmlybSBvciBkaXNwcm92ZSBteSBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyMC4yOTI4NjYyOTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTQ4Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzY0Nz1jb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzY3My19O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NzQ6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9tc2dfbWluKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjc1LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzY3OD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYKzFdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzcyMC19O1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3MjE6RVhQT1JUX1NZTUJPTF9HUEwoeGZybWFfcG9saWN5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyMC4zNDc0MTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ2MDM3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUncyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZW4ndCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlYWRpbHkgYXZhaWxhYmxlIHRvIHVzZSBhcyBhIHByaW1hcnkgZm9jdXMgcG9pbnQuIE5vIHByb2JsZW0sIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB0YXJnZXQgYHhmcm1fYWxsb2NfdXNlcnNwaWAgaW5zdGVhZC4gRXZlbiBpZiBpdCdzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgcHJlc2VuY2UgaW4gdGhhdCBmdW5jdGlvbiBwb2ludGVyIGFycmF5IG1ha2VzIGl0IGEgZGVjZW50IHRhcmdldC4gSXQgd29uJ3QgYmUgaW5saW5lZCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy5cblxuSGFuZyBvbiBhIG1vbWVudCB0aG91Z2gsIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYHhmcm1fZ2V0X3RyYW5zbGF0b3JgIGFuZCBgeGZybV9wdXRfdHJhbnNsYXRvcmAuIFRob3NlIG1pZ2h0IG9mZmVyIGEgYmV0dGVyLCBtb3JlIGFwcHJvcHJpYXRlIGFuZ2xlIG9uIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgZm9yIGFuYWx5c2lzLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHBpY2tpbmcgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY2FsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjIzLjc3MjAyNjAzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0ODQ4ODc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF90cmFuc2xhdG9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzE3PWV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3RyYW5zbGF0b3Ioc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjMxODpleHRlcm4gc3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeGZybV9nZXRfdHJhbnNsYXRvcih2b2lkKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjMxOS1leHRlcm4gdm9pZCB4ZnJtX3B1dF90cmFuc2xhdG9yKHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cik7XFxuaW5jbHVkZS9uZXQveGZybS5oLTIzMjAtI2Vsc2VcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjMyMTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjMyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk0OT1zdGF0aWMgc3RydWN0IHhmcm1fdHJhbnNsYXRvciBfX3JjdSAqeGZybV90cmFuc2xhdG9yO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTUwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTUxOnN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnhmcm1fZ2V0X3RyYW5zbGF0b3Iodm9pZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk1Mi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI5NjU6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9nZXRfdHJhbnNsYXRvcik7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MzAwNz1pbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjgtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkgXFx1MDAyNlxcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDI5OlxcdFxcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzAzMC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTE0OTc9c3RhdGljIGludCBkdW1wX29uZV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNTIwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE1MjE6XFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE1MjItXFx0aWYgKHh0cikge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTYyNz1zdGF0aWMgaW5saW5lIGludCB4ZnJtX25sbXNnX211bHRpY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNjM3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE2Mzg6XFx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE2MzktXFx0aWYgKHh0cikge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM5Mz1zdGF0aWMgaW50IGR1bXBfb25lX3BvbGljeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBpbnQgY291bnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI0MjYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MjQyNzpcXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjQyOC1cXHRpZiAoeHRyKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zODI1PXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ1LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODQ2OlxcdFxcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjowMzoyNi4yMjA1MTg4NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NDk2MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkZvY3VzaW5nIG9uIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYHhmcm1fZ2V0X3RyYW5zbGF0b3IoKWAgd2FzIGp1c3QgcmVtb3ZlZCBmcm9tIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBBbHJpZ2h0LCB0aGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZCwgdGhlIHN5bWJvbCB0aGF0IEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGlzIGdvaW5nIHRvIGJlIGB4ZnJtX2FsbG9jX3VzZXJzcGlgLiBUaGF04oCZcyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLCB3aGljaCBzaG91bGQgYmUgYFhGUk1fVVNFUmAuIEhvbGQgb24gYSBzZWNvbmTigKYgSSB0aGluayBJIHJlbWVtYmVyIHRoYXQgYFhGUk1fVVNFUmAgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBYRlJNX1VTRVJgIGRlZmluaXRpb24gYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBjb3JyZWN0bHkuIEdvdHRhIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MzAuMDA1NDg1MTA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU3OTI1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjAzOjMyLjM2MzQxNjU3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA0MzA1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWEZSTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgWEZSTSB1c2VyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYFhGUk1fVVNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgY29yZSBvZiB3aGF0J3MgYmVpbmcgYWZmZWN0ZWQuIEtub3dpbmcgdGhhdCwgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyAqV29ydGhGdXp6aW5nKi4gVGhpcyBjaGFuZ2UgdG8gdGhlIElQc2VjIFhGUk0gdXNlciBpbnRlcmZhY2UgaXMgYSBmdW5jdGlvbmFsIG9uZS5cblxuVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgeGZybV9hbGxvY191c2Vyc3BpYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGlzIG5ldGxpbmsgaGFuZGxlci4gU2luY2UgYFhGUk1fVVNFUmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBhbHNvIGVuYWJsZWQgZm9yIHRoYXQuIFRoZSBwYXRjaCByZW1vdmVzIGNhbGxzIHRvIGB4ZnJtX2dldF90cmFuc2xhdG9yYCBhbmQgYGFsbG9jX2NvbXBhdGAgc28gdGhpcyB3aWxsIG5lZWQgc3BlY2lmaWMgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjAsIk91dHB1dFRva2VucyI6OTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6MDM6MzYuMzY3NzI1Mzk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjI2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY2FsbCB0byBgeGZybV9nZXRfdHJhbnNsYXRvcmAgYW5kIGBhbGxvY19jb21wYXRgIGluIHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQc2VjIFhGUk0gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflown6prd[1] Phase: Succeeded StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-01 22:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-01 22:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2] Phase: Succeeded StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-01 22:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 22:03:48 +0000 UTC FinishedAt: 2026-08-01 22:03:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflown6prd/series-workflown6prd-convert-artifact-239693498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 22:03:58 +0000 UTC FinishedAt: 2026-08-01 22:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 22:03:58 +0000 UTC FinishedAt: 2026-08-01 22:23:08 +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:*ca9d966e-0ac4-49e9-a760-39dcb6f0029b,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-workflown6prd/series-workflown6prd-convert-artifact-239693498/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": "41865888-b424-47f5-977d-4a652bad5185", "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-workflown6prd/series-workflown6prd-build-action-1216783464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 22:03:58 +0000 UTC FinishedAt: 2026-08-01 22:22:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ca9d966e-0ac4-49e9-a760-39dcb6f0029b,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-workflown6prd/series-workflown6prd-convert-artifact-239693498/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": "41865888-b424-47f5-977d-4a652bad5185", "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-workflown6prd/series-workflown6prd-build-action-1216783464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 22:23:08 +0000 UTC FinishedAt: 2026-08-01 22:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 22:23:08 +0000 UTC FinishedAt: 2026-08-01 22:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 22:23:08 +0000 UTC FinishedAt: 2026-08-01 22:23:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 22:23:08 +0000 UTC FinishedAt: 2026-08-01 22:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflown6prd/series-workflown6prd-convert-artifact-3289420309/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 22:23:18 +0000 UTC FinishedAt: 2026-08-01 22:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 22:23:18 +0000 UTC FinishedAt: 2026-08-01 22:24:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41865888-b424-47f5-977d-4a652bad5185,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-workflown6prd/series-workflown6prd-build-action-1216783464/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-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 22:25:05 +0000 UTC FinishedAt: 2026-08-01 22:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 22:25:05 +0000 UTC FinishedAt: 2026-08-01 22:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 22:25:05 +0000 UTC FinishedAt: 2026-08-01 22:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 22:25:05 +0000 UTC FinishedAt: 2026-08-01 22:44:33 +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:*ca9d966e-0ac4-49e9-a760-39dcb6f0029b,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-workflown6prd/series-workflown6prd-convert-artifact-3289420309/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": "2f0754b1-ddd9-433f-90e7-7e2e49a41e51", "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-workflown6prd/series-workflown6prd-build-action-3403626657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 22:25:05 +0000 UTC FinishedAt: 2026-08-01 22:44:21 +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:*ca9d966e-0ac4-49e9-a760-39dcb6f0029b,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-workflown6prd/series-workflown6prd-convert-artifact-3289420309/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": "2f0754b1-ddd9-433f-90e7-7e2e49a41e51", "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-workflown6prd/series-workflown6prd-build-action-3403626657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 22:44:33 +0000 UTC FinishedAt: 2026-08-01 22:44:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 22:44:34 +0000 UTC FinishedAt: 2026-08-01 22:44:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 22:44:34 +0000 UTC FinishedAt: 2026-08-01 22:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 22:44:34 +0000 UTC FinishedAt: 2026-08-01 22:46:23 +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:*2f0754b1-ddd9-433f-90e7-7e2e49a41e51,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-workflown6prd/series-workflown6prd-build-action-3403626657/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-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*41865888-b424-47f5-977d-4a652bad5185,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f0754b1-ddd9-433f-90e7-7e2e49a41e51,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-workflown6prd/series-workflown6prd-build-action-1216783464/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-workflown6prd/series-workflown6prd-build-action-3403626657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-01 22:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-01 22:46:53 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown6prd/series-workflown6prd-convert-artifact-401750010/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-01 22:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-01 22:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 22:46:33 +0000 UTC FinishedAt: 2026-08-01 22:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 22:47:04 +0000 UTC FinishedAt: 2026-08-02 01:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6prd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_alloc_userspi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"790a2ceb-2881-48e0-97b5-b8a1c7ff62a1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 22:47:04 +0000 UTC FinishedAt: 2026-08-02 01:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41865888-b424-47f5-977d-4a652bad5185,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f0754b1-ddd9-433f-90e7-7e2e49a41e51,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-workflown6prd/series-workflown6prd-build-action-1216783464/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-workflown6prd/series-workflown6prd-build-action-3403626657/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-workflown6prd/series-workflown6prd-convert-artifact-401750010/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,}