Name: series-workflowcjv4h Phase: Succeeded StartedAt: 2026-08-23 19:15:45 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[0] Phase: Succeeded StartedAt: 2026-08-23 19:15:45 +0000 UTC FinishedAt: 2026-08-23 19:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 19:15:45 +0000 UTC FinishedAt: 2026-08-23 19:57:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVTMPFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVTMPFS" ], "series_id": "ff4d171a-9be4-4114-8ad3-3d2afdc34537" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "devtmpfs_get_tree" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVlRNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2dG1wZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1NTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG5pbmRleCBhZWYwZmNjNmFiYTFlLi5mMDc5OGZjMWJjMzRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG5AQCAtODAsNiAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiBcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4mIzQzO1xuJiM0MztcdGlmIChmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbiYjNDM7XHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4mIzQzO1x0XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZUTVBGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYWExZjUyMjA5NDYyYWYwMzliZDFiMDExNzYzNDRhMzUzNjJlZWU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTk6NTU6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCkBAIC04MCw2ICYjNDM7ODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJYXRvbWljX2luYygmYW1wO3NiLSZndDtzX2FjdGl2ZSk7CiAJZG93bl93cml0ZSgmYW1wO3NiLSZndDtzX3Vtb3VudCk7CiAJZmMtJmd0O3Jvb3QgPSBkZ2V0KHNiLSZndDtzX3Jvb3QpOwomIzQzOwomIzQzOwlpZiAoZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUpIHsKJiM0MzsJCWludCBlcnIgPSBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYyk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZHB1dChmYy0mZ3Q7cm9vdCk7CiYjNDM7CQkJZmMtJmd0O3Jvb3QgPSBOVUxMOwomIzQzOwkJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGRldnRtcGZzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBpbnRyb2R1Y2VkIGEgY2hlY2sgaW4gYGRldnRtcGZzX2dldF90cmVlYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNhbGwgdG8gYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCB3aXRoaW4gYGRldnRtcGZzX2dldF90cmVlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gaXRzZWxmLgoKRmlyc3QsIGxldCBtZSBjb25maXJtIHRoYXQgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LiBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgYGdldF90cmVlYCBvcGVyYXRpb24gZm9yIHRoZSBgZGV2dG1wZnNgIGZpbGVzeXN0ZW0uIFJpZ2h0LiBgZGV2dG1wZnNgIGlzIHRoYXQgdmlydHVhbCBmaWxlc3lzdGVtIHVzZWQgZm9yIHRoZSBgL2RldmAgZGlyZWN0b3J5LiBPa2F5LCBjYW4gdXNlcnNwYWNlIG1vdW50IHRoaXMgdGhpbmc/IFllcCwgYG1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXZgIGNvbmZpcm1zIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIHdpdGhpbiBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgZXhhY3RseSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzIGRvaW5nIGFuZCB3aGF0IHRoaXMgbmV3IGByZWNvbmZpZ3VyZWAgY2FsbCBzaWduaWZpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93IG9mIG1vdW50aW5nIG9yIHJlbW91bnRpbmcgYSBgZGV2dG1wZnNgIGluc3RhbmNlLiBUaGlzIGByZWNvbmZpZ3VyZWAgZnVuY3Rpb24gbXVzdCBiZSBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gb3IgYWRqdXN0bWVudCBzdGVwIHRoYXQgd2UmIzM5O3JlIG5vdyB0cmlnZ2VyaW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYGZjYCBhbmQgaXRzIGBvcHNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9NjU9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XG4tLVxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNzUtLyogU2ltcGx5IHRha2UgYSByZWYgb24gdGhlIGV4aXN0aW5nIG1vdW50ICovXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzo3NjpzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTc3LXtcbi0tXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz00NjA9c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxuLS1cbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTQ3My1cdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcGFyc2VfbW9ub2xpdGhpYztcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjQ3NDpcdGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlXHQgICAgICA9IFx1MDAyNmRldnRtcGZzX2dldF90cmVlO1xuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNDc1LVx0ZGV2dG1wZnNfY29udGV4dF9vcHMucmVjb25maWd1cmUgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERldnRtcGZzIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBkZXZ0bXBmc19nZXRfdHJlZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgYGRldnRtcGZzX2dldF90cmVlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZGV2dG1wZnMgZmlsZSBzeXN0ZW0uJiMzNDsgVGhlIHBhdGNo4oCZcyBjcnVjaWFsIGNoYW5nZSBpbnZvbHZlcyBjYWxsaW5nIGBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYylgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2FsbC4gQmVmb3JlIGZ1bGx5IGFzc2Vzc2luZyB0aGUgY2hhbmdlLCBJIHdpbGwgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRldnRtcGZzX2luaXRfZnNfY29udGV4dGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbnRleHQgc3RydWN0dXJlLCBgZmNgLCBpcyBpbml0aWFsaXplZCBhbmQgd2hhdCBgZmMtJmd0O29wc2AgcG9pbnRzIHRvLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBkZXZ0bXBmcyBmaWxlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2Ygc3RydWN0dXJlIGByZWNvbmZpZ3VyZWAgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBwdXJwb3NlIG9mIHRoaXMgcmVjb25maWd1cmF0aW9uLiBJcyBpdCBhYm91dCBob3RwbHVnIGV2ZW50cz8gUmVzb3VyY2UgbGltaXRzPyBJdCBhbGwgZGVwZW5kcyBvbiB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz05OT1zdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xuLS1cbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEwMS0vKiBDYWxsIHRoZSB1bmRlcmx5aW5nIGluaXRpYWxpemF0aW9uIGFuZCBzZXQgdG8gb3VyIG9wcyAqL1xuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM6MTAyOnN0YXRpYyBpbnQgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEwMy17XG4tLVxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZfZnNfdHlwZSA9IHtcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTExOS1cdC5uYW1lID0gXCYjMzQ7ZGV2dG1wZnNcJiMzNDssXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzoxMjA6XHQuaW5pdF9mc19jb250ZXh0ID0gZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0LFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtMTIxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqRGVjb25zdHJ1Y3RpbmcgZGV2dG1wZnMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGRldnRtcGZzX2luaXRfZnNfY29udGV4dGAgYW5kIGBkZXZ0bXBmc19nZXRfdHJlZWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlcyBhbmQgbWV0YWRhdGEgZm9yIGEgbmV3IGBkZXZ0bXBmc2AgaW5zdGFuY2UuIEl0IHNob3VsZCBiZSB3aGVyZSB0aGUgY29yZSBmaWxlc3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIGhhbmRsZWQgYmVmb3JlIHdlIGNhbiBtb3VudCBpdC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGRldnRtcGZzX2dldF90cmVlYC4gVGhpcyBoYXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY3JlYXRlcyB0aGUgcm9vdCBpbm9kZSBmb3IgdGhlIG1vdW50ZWQgYGRldnRtcGZzYC4gSXQgc2hvdWxkIHRha2UgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUsIGFuZCBsaW5raW5nIHRoYXQgc3RydWN0dXJlIHdpdGggYW55IGFzc29jaWF0ZWQgcGFyYW1ldGVycy4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsIGlub2RlIGFsbG9jYXRpb24gYW5kIHNldHVwLCBzZXR0aW5nIHBlcm1pc3Npb25zLCBhbmQgcHJvYmFibHkgZGVmaW5pbmcgdGhlIGluaXRpYWwgZGV2aWNlIG5vZGVzIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCB0aGUgaW5pdCBwcm9jZXNzIG5lZWRzLiBFc3NlbnRpYWxseSwgdGhpcyBpcyB3aGVyZSB0aGUgKmFjdHVhbCogZmlsZXN5c3RlbSBpbnN0YW5jZSBnZXRzIHB1dCB0b2dldGhlciBvbiB0aGUgYmxvY2sgZGV2aWNlIGluIG1lbW9yeS4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGNvbnRleHQgY3JlYXRlZCBieSBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCBpcyB0aGVuIHBhc3NlZCB0byBhbmQgdXNlZCBieSBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBtb3VudC4gS25vd2luZyB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGV2dG1wZnNgIGdldHMgZnJvbSBhIGtlcm5lbCBjb21waWxlIG9wdGlvbiB0byBhIHdvcmtpbmcgZmlsZXN5c3RlbSBtb3VudGVkIG9uIGAvZGV2YC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XG4gIDY2Olx0XHQubmFtZSA9IFwmIzM0O2RldnRtcGZzXCYjMzQ7LFxuICA2NzpcdCNpZmRlZiBDT05GSUdfVE1QRlNcbiAgNjg6XHRcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXG4gIDY5Olx0I2Vsc2VcbiAgNzA6XHRcdC5pbml0X2ZzX2NvbnRleHQgPSByYW1mc19pbml0X2ZzX2NvbnRleHQsXG4gIDcxOlx0I2VuZGlmXG4gIDcyOlx0XHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbiAgNzM6XHR9O1xuICA3NDpcdFxuICA3NTpcdC8qIFNpbXBseSB0YWtlIGEgcmVmIG9uIHRoZSBleGlzdGluZyBtb3VudCAqL1xuICA3NjpcdHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuICA3OTpcdFxuICA4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gIDgxOlx0XHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiAgODI6XHRcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4gIDgzOlx0XG4gIDg0Olx0XHRpZiAoZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKSB7XG4gIDg1Olx0XHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuICA4NjpcdFxuICA4NzpcdFx0XHRpZiAoZXJyKSB7XG4gIDg4Olx0XHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbiAgODk6XHRcdFx0XHRmYy1cdTAwM2Vyb290ID0gTlVMTDtcbiAgOTA6XHRcdFx0XHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gIDkxOlx0XHRcdFx0cmV0dXJuIGVycjtcbiAgOTI6XHRcdFx0fVxuICA5MzpcdFx0fVxuICA5NDpcdFxuICA5NTpcdFx0cmV0dXJuIDA7XG4gIDk2Olx0fVxuICA5NzpcdFxuICA5ODpcdC8qIE9wcyBhcmUgZmlsbGVkIGluIGR1cmluZyBpbml0IGRlcGVuZGluZyBvbiB1bmRlcmx5aW5nIHNobWVtIG9yIHJhbWZzIHR5cGUgKi9cbiAgOTk6XHRzdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xuIDEwMDpcdFxuIDEwMTpcdC8qIENhbGwgdGhlIHVuZGVybHlpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHNldCB0byBvdXIgb3BzICovXG4gMTAyOlx0c3RhdGljIGludCBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDEwMzpcdHtcbiAxMDQ6XHRcdGludCByZXQ7XG4gMTA1Olx0I2lmZGVmIENPTkZJR19UTVBGU1xuIDEwNjpcdFx0cmV0ID0gc2htZW1faW5pdF9mc19jb250ZXh0KGZjKTtcbiAxMDc6XHQjZWxzZVxuIDEwODpcdFx0cmV0ID0gcmFtZnNfaW5pdF9mc19jb250ZXh0KGZjKTtcbiAxMDk6XHQjZW5kaWZcbiAxMTA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTExOlx0XHRcdHJldHVybiByZXQ7XG4gMTEyOlx0XG4gMTEzOlx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wcztcbiAxMTQ6XHRcbiAxMTU6XHRcdHJldHVybiAwO1xuIDExNjpcdH1cbiAxMTc6XHRcbiAxMTg6XHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGV2X2ZzX3R5cGUgPSB7XG4gMTE5Olx0XHQubmFtZSA9IFwmIzM0O2RldnRtcGZzXCYjMzQ7LFxuIDEyMDpcdFx0LmluaXRfZnNfY29udGV4dCA9IGRldnRtcGZzX2luaXRfZnNfY29udGV4dCxcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBpbnQgZGV2dG1wZnNfc3VibWl0X3JlcShzdHJ1Y3QgcmVxICpyZXEsIGNvbnN0IGNoYXIgKnRtcClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cmVxLVx1MDAzZWRvbmUpO1xuIDEyNjpcdFxuIDEyNzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnJlcV9sb2NrKTtcbiAxMjg6XHRcdHJlcS1cdTAwM2VuZXh0ID0gcmVxdWVzdHM7XG4gMTI5Olx0XHRyZXF1ZXN0cyA9IHJlcTtcbiAxMzA6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnJlcV9sb2NrKTtcbiAxMzE6XHRcbiAxMzI6XHRcdHdha2VfdXBfcHJvY2Vzcyh0aHJlYWQpO1xuIDEzMzpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZyZXEtXHUwMDNlZG9uZSk7XG4gMTM0Olx0XG4gMTM1Olx0XHRrZnJlZSh0bXApO1xuIDEzNjpcdFxuIDEzNzpcdFx0cmV0dXJuIHJlcS1cdTAwM2VlcnI7XG4gMTM4Olx0fVxuIDEzOTpcdFxuIDE0MDpcdGludCBkZXZ0bXBmc19jcmVhdGVfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMTQxOlx0e1xuIDE0MjpcdFx0Y29uc3QgY2hhciAqdG1wID0gTlVMTDtcbiAxNDM6XHRcdHN0cnVjdCByZXEgcmVxO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKCF0aHJlYWQpXG4gMTQ2Olx0XHRcdHJldHVybiAwO1xuIDE0NzpcdFxuIDE0ODpcdFx0cmVxLm1vZGUgPSAwO1xuIDE0OTpcdFx0cmVxLnVpZCA9IEdMT0JBTF9ST09UX1VJRDtcbiAxNTA6XHRcdHJlcS5naWQgPSBHTE9CQUxfUk9PVF9HSUQ7XG4gMTUxOlx0XHRyZXEubmFtZSA9IGRldmljZV9nZXRfZGV2bm9kZShkZXYsIFx1MDAyNnJlcS5tb2RlLCBcdTAwMjZyZXEudWlkLCBcdTAwMjZyZXEuZ2lkLCBcdTAwMjZ0bXApO1xuIDE1MjpcdFx0aWYgKCFyZXEubmFtZSlcbiAxNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAocmVxLm1vZGUgPT0gMClcbiAxNTY6XHRcdFx0cmVxLm1vZGUgPSAwNjAwO1xuIDE1NzpcdFx0aWYgKGlzX2Jsb2NrZGV2KGRldikpXG4gMTU4Olx0XHRcdHJlcS5tb2RlIHw9IFNfSUZCTEs7XG4gMTU5Olx0XHRlbHNlXG4gMTYwOlx0XHRcdHJlcS5tb2RlIHw9IFNfSUZDSFI7XG4gMTYxOlx0XG4gMTYyOlx0XHRyZXEuZGV2ID0gZGV2O1xuIDE2MzpcdFxuIDE2NDpcdFx0cmV0dXJuIGRldnRtcGZzX3N1Ym1pdF9yZXEoXHUwMDI2cmVxLCB0bXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBSZWNvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjYWxsIHRvIGBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYylgIHdpdGhpbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgYGRldnRtcGZzX2dldF90cmVlYCBpcyBjYWxsZWQgd2hlbiBgZGV2dG1wZnNgIGlzIG1vdW50ZWQg4oCTIHdoaWNoIGhhcHBlbnMgYm90aCBkdXJpbmcgYm9vdCBhbmQsIGNydWNpYWxseSwgY2FuIGJlIHRyaWdnZXJlZCBieSB1c2Vyc3BhY2Ugd2l0aCBgbW91bnQgLXQgZGV2dG1wZnMgLi4uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBhIHVzZXIgKmFjdHVhbGx5KiB0cmlnZ2VyIHRoaXMgbmV3IGByZWNvbmZpZ3VyZWAgY2FsbD8KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjYWxsIGNoYWluIHRvIGJlIHN1cmUuICBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzIHRoZSBgZ2V0X3RyZWVgIG9wZXJhdGlvbiBkZWZpbmVkIGZvciBgZGV2dG1wZnNfY29udGV4dF9vcHNgLiBXaGVuIGEgdXNlciBjYWxscyBgbW91bnQgLXQgZGV2dG1wZnMgLi4uYCwgdGhlIGtlcm5lbCBjYWxscyBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCwgd2hpY2ggc2V0cyBgZmMtJmd0O29wc2AgdG8gYCZhbXA7ZGV2dG1wZnNfY29udGV4dF9vcHNgLiBUaGVuLCB0aGUgc3RhbmRhcmQgYHZmc19nZXRfdHJlZWAgY2FsbCB3aWxsIGV4ZWN1dGUgYGZjLSZndDtvcHMtJmd0O2dldF90cmVlKGZjKWAuIFNvLCB5ZXMsIGBkZXZ0bXBmc19nZXRfdHJlZWAgKmlzKiByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gU28sIGFkZGluZyB0aGlzIGByZWNvbmZpZ3VyZWAgY2FsbCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpCdXQsIGhhbmcgb24sIGBmYy0mZ3Q7b3BzYCBpcyBzZXQgdG8gYCZhbXA7ZGV2dG1wZnNfY29udGV4dF9vcHNgLiAgRG9lcyBgZGV2dG1wZnNfY29udGV4dF9vcHNgIGFjdHVhbGx5ICpkZWZpbmUqIGEgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBwb2ludGVyPyAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZGV2dG1wZnNfY29udGV4dF9vcHNgIGlzIHNldCB1cC4gIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgZGV2dG1wZnNfY29uZmlndXJlX2NvbnRleHRgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgd2hldGhlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGwgaXMgYWN0dWFsbHkgZ29pbmcgdG8gZG8gYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdFx0Y29tcGxldGUoXHUwMDI2c2V0dXBfZG9uZSk7XG4gNDUxOlx0XHRpZiAoZXJyKVxuIDQ1MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1MzpcdFx0ZGV2dG1wZnNfd29ya19sb29wKCk7XG4gNDU0Olx0XHRyZXR1cm4gMDtcbiA0NTU6XHR9XG4gNDU2Olx0XG4gNDU3Olx0LypcbiA0NTg6XHQgKiBHZXQgdGhlIHVuZGVybHlpbmcgKHNobWVtL3JhbWZzKSBjb250ZXh0IG9wcyB0byBidWlsZCBvdXJzXG4gNDU5Olx0ICovXG4gNDYwOlx0c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxuIDQ2MTpcdHtcbiA0NjI6XHRcdHN0cnVjdCBmc19jb250ZXh0ICpmYztcbiA0NjM6XHRcbiA0NjQ6XHRcdGZjID0gZnNfY29udGV4dF9mb3JfcmVjb25maWd1cmUobW50LVx1MDAzZW1udF9yb290LCBtbnQtXHUwMDNlbW50X3NiLVx1MDAzZXNfZmxhZ3MsXG4gNDY1Olx0XHRcdFx0XHRcdE1TX1JNVF9NQVNLKTtcbiA0NjY6XHRcdGlmIChJU19FUlIoZmMpKVxuIDQ2NzpcdFx0XHRyZXR1cm4gUFRSX0VSUihmYyk7XG4gNDY4Olx0XG4gNDY5Olx0XHQvKiBTZXQgdXAgZGV2dG1wZnNfY29udGV4dF9vcHMgYmFzZWQgb24gdW5kZXJseWluZyB0eXBlICovXG4gNDcwOlx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5mcmVlXHQgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VmcmVlO1xuIDQ3MTpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZHVwXHQgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VkdXA7XG4gNDcyOlx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5wYXJzZV9wYXJhbSAgICAgID0gZmMtXHUwMDNlb3BzLVx1MDAzZXBhcnNlX3BhcmFtO1xuIDQ3MzpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMucGFyc2VfbW9ub2xpdGhpYyA9IGZjLVx1MDAzZW9wcy1cdTAwM2VwYXJzZV9tb25vbGl0aGljO1xuIDQ3NDpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZ2V0X3RyZWVcdCAgICAgID0gXHUwMDI2ZGV2dG1wZnNfZ2V0X3RyZWU7XG4gNDc1Olx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZSAgICAgID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0cHV0X2ZzX2NvbnRleHQoZmMpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIDA7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdC8qXG4gNDgzOlx0ICogQ3JlYXRlIGRldnRtcGZzIGluc3RhbmNlLCBkcml2ZXItY29yZSBkZXZpY2VzIHdpbGwgYWRkIHRoZWlyIGRldmljZVxuIDQ4NDpcdCAqIG5vZGVzIGhlcmUuXG4gNDg1Olx0ICovXG4gNDg2Olx0aW50IF9faW5pdCBkZXZ0bXBmc19pbml0KHZvaWQpXG4gNDg3Olx0e1xuIDQ4ODpcdFx0Y2hhciBvcHRzW10gPSBcJiMzNDttb2RlPTA3NTVcJiMzNDs7XG4gNDg5Olx0XHRpbnQgZXJyO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0bW50ID0gdmZzX2tlcm5fbW91bnQoXHUwMDI2aW50ZXJuYWxfZnNfdHlwZSwgMCwgXCYjMzQ7ZGV2dG1wZnNcJiMzNDssIG9wdHMpO1xuIDQ5MjpcdFx0aWYgKElTX0VSUihtbnQpKSB7XG4gNDkzOlx0XHRcdHByX2VycihcJiMzNDt1bmFibGUgdG8gY3JlYXRlIGRldnRtcGZzICVsZFxcblwmIzM0OywgUFRSX0VSUihtbnQpKTtcbiA0OTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIobW50KTtcbiA0OTU6XHRcdH1cbiA0OTY6XHRcbiA0OTc6XHRcdGVyciA9IGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0KCk7XG4gNDk4Olx0XHRpZiAoZXJyKSB7XG4gNDk5Olx0XHRcdHByX2VycihcJiMzNDt1bmFibGUgdG8gY29uZmlndXJlIGRldnRtcGZzIHR5cGUgJWRcXG5cJiMzNDssIGVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0YCBlc3NlbnRpYWxseSBsaW5rcyB0aGUgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBwb2ludGVyLiBJdCBzZXRzIGBkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZWAgdG8gdGhlIHVuZGVybHlpbmcgYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCDigJMgd2hpY2ggaXMgZWl0aGVyIGBzaG1lbWAgb3IgYHJhbWZzYCwgSSYjMzk7ZCBhc3N1bWUuICBUaGVyZWZvcmUsIHdoZW4gYGRldnRtcGZzX2dldF90cmVlYCBjYWxscyBgZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmVgLCBpdCYjMzk7cyBhY3R1YWxseSBjYWxsaW5nIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB1bmRlcm5lYXRoLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgbGlrZWx5IHRvIGZpeCBhIGJ1Zywgb3IgbWF5YmUgdG8gYXBwbHkgbW91bnQgb3B0aW9ucyB0byBhbiBhbHJlYWR5IG1vdW50ZWQgZGV2dG1wZnMgaW5zdGFuY2UuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHVzZXItcmVhY2hhYmxlLCBwcmltYXJpbHkgdGhyb3VnaCBgbW91bnRgIG9yIHBvdGVudGlhbGx5IGBmc2NvbmZpZ2AsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBleHBvc2VkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBzaG91bGQgYmUgYGRldnRtcGZzX2dldF90cmVlYC4KCkkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfREVWVE1QRlNgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZUTVBGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxPWNvbmZpZyBVRVZFTlRfSEVMUEVSX1BBVEhcbi0tXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjMxOmNvbmZpZyBERVZUTVBGU1xuZHJpdmVycy9iYXNlL0tjb25maWctMzItXHRib29sIFwmIzM0O01haW50YWluIGEgZGV2dG1wZnMgZmlsZXN5c3RlbSB0byBtb3VudCBhdCAvZGV2XCYjMzQ7XG4tLVxuZHJpdmVycy9iYXNlL0tjb25maWctNDktXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzo1MDpjb25maWcgREVWVE1QRlNfTU9VTlRcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtBdXRvbW91bnQgZGV2dG1wZnMgYXQgL2RldiwgYWZ0ZXIgdGhlIGtlcm5lbCBtb3VudGVkIHRoZSByb290ZnNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy02NC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjY1OmNvbmZpZyBERVZUTVBGU19TQUZFXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7VXNlIG5vc3VpZCxub2V4ZWMgbW91bnQgb3B0aW9ucyBvbiBkZXZ0bXBmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGhlcmUuCgoqKk5hdmlnYXRpbmcgdGhlIERldnRtcGZzIExhbmRzY2FwZSoqCgpSaWdodCwgc28gYERFVlRNUEZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGllY2UuIEdvdCBpdC4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLiBPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gYGRldnRtcGZzX2dldF90cmVlYCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgaW50bywgYW5kIHRoYXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jYC4gUGVyZmVjdC4gTm93LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL01ha2VmaWxlYCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGxpbmtlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2dG1wZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19BVVhJTElBUllfQlVTKSAmIzQzOz0gYXV4aWxpYXJ5Lm9cbmRyaXZlcnMvYmFzZS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfREVWVE1QRlMpXHQmIzQzOz0gZGV2dG1wZnMub1xuZHJpdmVycy9iYXNlL01ha2VmaWxlLTEyLW9iai15XHRcdFx0JiM0Mzs9IHBvd2VyL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg5CgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogNTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gaGVyZSBzZWVtcyB0byBiZSBgREVWVE1QRlNgLCB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBtYWtlIHN1cmUgYGRldnRtcGZzX2dldF90cmVlYCBpc24mIzM5O3QgaW5saW5lZCwgYXMgdGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHByZWZlciBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LiBBbmQgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGNoZWNrIGZpcnN0LgoKTGV0IG1lIHNlZSwgJiMzNDtzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlLi4uJiMzNDsgWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCB3YWl0IGEgbWludXRlLCB0aGUgYWRkcmVzcyBpcyB0YWtlbiBieSB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6IGBkZXZ0bXBmc19jb250ZXh0X29wcy5nZXRfdHJlZSA9ICZhbXA7ZGV2dG1wZnNfZ2V0X3RyZWU7YC4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCwgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoYXQmIzM5O3MgZmluZS4gQWx0aG91Z2gsIEkgZGlkIGJyaWVmbHkgY29uc2lkZXIgd2hldGhlciB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlIGZ1bmN0aW9uIEkgY291bGQgdXNlLCBidXQgbm8sIHRoaXMgaXMgdGhlIHJpZ2h0IG9uZSwgdGhlIGNoYW5nZSBpcyByaWdodCBoZXJlLgoKSSYjMzk7dmUgcmUtcmVhZCB0aGUgY29kZSB0byBiZSBjZXJ0YWluOgpgYGBjCkBAIC04MCw2ICYjNDM7ODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJYXRvbWljX2luYygmYW1wO3NiLSZndDtzX2FjdGl2ZSk7CiAJZG93bl93cml0ZSgmYW1wO3NiLSZndDtzX3Vtb3VudCk7CiAJZmMtJmd0O3Jvb3QgPSBkZ2V0KHNiLSZndDtzX3Jvb3QpOwomIzQzOwomIzQzOwlpZiAoZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUpIHsKJiM0MzsJCWludCBlcnIgPSBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYyk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZHB1dChmYy0mZ3Q7cm9vdCk7CiYjNDM7CQkJZmMtJmd0O3Jvb3QgPSBOVUxMOwomIzQzOwkJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CmBgYApSaWdodCwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHRoZSBjYWxsIHRvIGByZWNvbmZpZ3VyZWAuIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMgd2hlbiBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZSBpcyBtb3VudGVkLCBhbmQgdGhhdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaC4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgIENvbmZpZ3M6IGBERVZUTVBGU2AKKiAgIEZvY3VzU3ltYm9sczogYGRldnRtcGZzX2dldF90cmVlYAoqICAgUmVhc29uaW5nOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZUTVBGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVlRNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2dG1wZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWFhMWY1MjIwOTQ2MmFmMDM5YmQxYjAxMTc2MzQ0YTM1MzYyZWVlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE5OjU1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwppbmRleCBhZWYwZmNjNmFiYTFlLi5mMDc5OGZjMWJjMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwpAQCAtODAsNiAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCWF0b21pY19pbmMoJmFtcDtzYi0mZ3Q7c19hY3RpdmUpOwogCWRvd25fd3JpdGUoJmFtcDtzYi0mZ3Q7c191bW91bnQpOwogCWZjLSZndDtyb290ID0gZGdldChzYi0mZ3Q7c19yb290KTsKJiM0MzsKJiM0MzsJaWYgKGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlKSB7CiYjNDM7CQlpbnQgZXJyID0gZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUoZmMpOwomIzQzOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWRwdXQoZmMtJmd0O3Jvb3QpOwomIzQzOwkJCWZjLSZndDtyb290ID0gTlVMTDsKJiM0MzsJCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZ0bXBmcyBSZWNvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCBpbiBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgY2FsbCwgYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCwgd2l0aGluIHRoZSBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MuIFRoZSBjb2RlIG5vdyBjaGVja3MgaWYgYSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIGV4aXN0cyBpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBvcGVyYXRpb24gc3RydWN0dXJlIChgZmMtJmd0O29wc2ApIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGl0IGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nOiBpZiBgcmVjb25maWd1cmVgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBwYXRjaCBjb3JyZWN0bHkgY2xlYW5zIHVwIGJ5IHJlbGVhc2luZyB0aGUgcm9vdCBpbm9kZSAoYGZjLSZndDtyb290YCkgYW5kIGRlYWN0aXZhdGluZyB0aGUgc3VwZXJibG9jayBiZWZvcmUgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlLgoKTG9va2luZyBhdCB0aGUgZGlmZiBkaXJlY3RseSwgdGhlIGNvZGUgc2VlbXMgc291bmQgaW4gaXRzIGJhc2ljIHN0cnVjdHVyZToKCmBgYGMKIAlhdG9taWNfaW5jKCZhbXA7c2ItJmd0O3NfYWN0aXZlKTsKIAlkb3duX3dyaXRlKCZhbXA7c2ItJmd0O3NfdW1vdW50KTsKIAlmYy0mZ3Q7cm9vdCA9IGRnZXQoc2ItJmd0O3Nfcm9vdCk7CiYjNDM7CiYjNDM7CWlmIChmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZSkgewomIzQzOwkJaW50IGVyciA9IGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlKGZjKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkcHV0KGZjLSZndDtyb290KTsKJiM0MzsJCQlmYy0mZ3Q7cm9vdCA9IE5VTEw7CiYjNDM7CQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KYGBgCgpUaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgZm9yIHJlY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSBwcmV0dHkgdHlwaWNhbDogdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgbWVtb3J5IGxlYWtzLiBIb3dldmVyLCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIHByb2JsZW1zIHRoYXQgS0FTQU4sIEttZW1sZWFrLCBhbmQgb3RoZXIgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgY2F0Y2ggd2l0aG91dCBhIHByb2JsZW0uCgpCZWNhdXNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLi4uIFllcCwgdGhlIGBlcnJgIHZhcmlhYmxlIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGRpcmVjdGx5IGZyb20gdGhlIHJldHVybiBvZiBgZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUoZmMpYC4gT2theSwgYWxsIGNsZWFyLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGZ1bmN0aW9uIHRvIGNhbGwgYGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NTo1Ny41NzgxMzYyOTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3NTE1OTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU1OjU3LjU3ODE0MDgwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNzk3MzQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTU6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xcbmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xcbkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2c2ItXFx1MDAzZXNfYWN0aXZlKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gXFx0ZmMtXFx1MDAzZXJvb3QgPSBkZ2V0KHNiLVxcdTAwM2VzX3Jvb3QpO1xcbitcXG4rXFx0aWYgKGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlKSB7XFxuK1xcdFxcdGludCBlcnIgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZShmYyk7XFxuK1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRwdXQoZmMtXFx1MDAzZXJvb3QpO1xcbitcXHRcXHRcXHRmYy1cXHUwMDNlcm9vdCA9IE5VTEw7XFxuK1xcdFxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTU6NTkuMzA2NzQ3ODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU4MDY1MTM4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZ0bXBmc19nZXRfdHJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1NTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdGF0b21pY19pbmMoXHUwMDI2c2ItXHUwMDNlc19hY3RpdmUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gXHRmYy1cdTAwM2Vyb290ID0gZGdldChzYi1cdTAwM2VzX3Jvb3QpO1xuK1xuK1x0aWYgKGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZSkge1xuK1x0XHRpbnQgZXJyID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKTtcbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRwdXQoZmMtXHUwMDNlcm9vdCk7XG4rXHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4rXHRcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU1OjU5LjMwNjc0OTIxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDY0MzQyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AuIEl0IGxvb2tzIGxpa2Ugd2UndmUgaW50cm9kdWNlZCBhIGNoZWNrIGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBhIGNhbGwgdG8gYGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZWAgd2l0aGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBjbGVhciB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gaXRzZWxmLlxuXG5GaXJzdCwgbGV0IG1lIGNvbmZpcm0gdGhhdCBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseS4gYGRldnRtcGZzX2dldF90cmVlYCBpcywgYXMgdGhlIG5hbWUgaW1wbGllcywgdGhlIGBnZXRfdHJlZWAgb3BlcmF0aW9uIGZvciB0aGUgYGRldnRtcGZzYCBmaWxlc3lzdGVtLiBSaWdodC4gYGRldnRtcGZzYCBpcyB0aGF0IHZpcnR1YWwgZmlsZXN5c3RlbSB1c2VkIGZvciB0aGUgYC9kZXZgIGRpcmVjdG9yeS4gT2theSwgY2FuIHVzZXJzcGFjZSBtb3VudCB0aGlzIHRoaW5nPyBZZXAsIGBtb3VudCAtdCBkZXZ0bXBmcyBkZXZ0bXBmcyAvZGV2YCBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBleGFjdGx5IGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgZG9pbmcgYW5kIHdoYXQgdGhpcyBuZXcgYHJlY29uZmlndXJlYCBjYWxsIHNpZ25pZmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgbW91bnRpbmcgb3IgcmVtb3VudGluZyBhIGBkZXZ0bXBmc2AgaW5zdGFuY2UuIFRoaXMgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBtdXN0IGJlIHNvbWUgc29ydCBvZiBpbml0aWFsaXphdGlvbiBvciBhZGp1c3RtZW50IHN0ZXAgdGhhdCB3ZSdyZSBub3cgdHJpZ2dlcmluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBmY2AgYW5kIGl0cyBgb3BzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjA0LjYxMzE4NTQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIyMTIwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2dG1wZnNfZ2V0X3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9NjU9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy03NS0vKiBTaW1wbHkgdGFrZSBhIHJlZiBvbiB0aGUgZXhpc3RpbmcgbW91bnQgKi9cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzo3NjpzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy03Ny17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz00NjA9c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNDczLVxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9tb25vbGl0aGljO1xcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjQ3NDpcXHRkZXZ0bXBmc19jb250ZXh0X29wcy5nZXRfdHJlZVxcdCAgICAgID0gXFx1MDAyNmRldnRtcGZzX2dldF90cmVlO1xcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTQ3NS1cXHRkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZSAgICAgID0gZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjA1LjE5NTQwMTY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Nzg1MTU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZ0bXBmcyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBkZXZ0bXBmc19nZXRfdHJlZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCByaWdodCwgYGRldnRtcGZzX2dldF90cmVlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZGV2dG1wZnMgZmlsZSBzeXN0ZW0uXCIgVGhlIHBhdGNo4oCZcyBjcnVjaWFsIGNoYW5nZSBpbnZvbHZlcyBjYWxsaW5nIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNhbGwuIEJlZm9yZSBmdWxseSBhc3Nlc3NpbmcgdGhlIGNoYW5nZSwgSSB3aWxsIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250ZXh0IHN0cnVjdHVyZSwgYGZjYCwgaXMgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgYGZjLVx1MDAzZW9wc2AgcG9pbnRzIHRvLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBkZXZ0bXBmcyBmaWxlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2Ygc3RydWN0dXJlIGByZWNvbmZpZ3VyZWAgaXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIHB1cnBvc2Ugb2YgdGhpcyByZWNvbmZpZ3VyYXRpb24uIElzIGl0IGFib3V0IGhvdHBsdWcgZXZlbnRzPyBSZXNvdXJjZSBsaW1pdHM/IEl0IGFsbCBkZXBlbmRzIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MDguOTczOTIwMDI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTk3MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldnRtcGZzX2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz05OT1zdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtMTAxLS8qIENhbGwgdGhlIHVuZGVybHlpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHNldCB0byBvdXIgb3BzICovXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM6MTAyOnN0YXRpYyBpbnQgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy0xMDMte1xcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZfZnNfdHlwZSA9IHtcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy0xMTktXFx0Lm5hbWUgPSBcXFwiZGV2dG1wZnNcXFwiLFxcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjEyMDpcXHQuaW5pdF9mc19jb250ZXh0ID0gZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEyMS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjowOS4wMTk1MjA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzE2Mjk3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipEZWNvbnN0cnVjdGluZyBkZXZ0bXBmcyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgIGFuZCBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRhZGF0YSBmb3IgYSBuZXcgYGRldnRtcGZzYCBpbnN0YW5jZS4gSXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCBiZWZvcmUgd2UgY2FuIG1vdW50IGl0LlxuXG5UaGVuLCBJJ2xsIG1vdmUgb24gdG8gYGRldnRtcGZzX2dldF90cmVlYC4gVGhpcyBoYXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY3JlYXRlcyB0aGUgcm9vdCBpbm9kZSBmb3IgdGhlIG1vdW50ZWQgYGRldnRtcGZzYC4gSXQgc2hvdWxkIHRha2UgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUsIGFuZCBsaW5raW5nIHRoYXQgc3RydWN0dXJlIHdpdGggYW55IGFzc29jaWF0ZWQgcGFyYW1ldGVycy4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWwgaW5vZGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAsIHNldHRpbmcgcGVybWlzc2lvbnMsIGFuZCBwcm9iYWJseSBkZWZpbmluZyB0aGUgaW5pdGlhbCBkZXZpY2Ugbm9kZXMgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHRoZSBpbml0IHByb2Nlc3MgbmVlZHMuIEVzc2VudGlhbGx5LCB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiBmaWxlc3lzdGVtIGluc3RhbmNlIGdldHMgcHV0IHRvZ2V0aGVyIG9uIHRoZSBibG9jayBkZXZpY2UgaW4gbWVtb3J5LlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGNvbnRleHQgY3JlYXRlZCBieSBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCBpcyB0aGVuIHBhc3NlZCB0byBhbmQgdXNlZCBieSBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBtb3VudC4gS25vd2luZyB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGV2dG1wZnNgIGdldHMgZnJvbSBhIGtlcm5lbCBjb21waWxlIG9wdGlvbiB0byBhIHdvcmtpbmcgZmlsZXN5c3RlbSBtb3VudGVkIG9uIGAvZGV2YC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTIuOTUxMTUzODM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaW50ZXJuYWxfZnNfdHlwZSA9IHtcXG4gIDY2OlxcdFxcdC5uYW1lID0gXFxcImRldnRtcGZzXFxcIixcXG4gIDY3OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNcXG4gIDY4OlxcdFxcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXFxuICA2OTpcXHQjZWxzZVxcbiAgNzA6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IHJhbWZzX2luaXRfZnNfY29udGV4dCxcXG4gIDcxOlxcdCNlbmRpZlxcbiAgNzI6XFx0XFx0LmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsXFxuICA3MzpcXHR9O1xcbiAgNzQ6XFx0XFxuICA3NTpcXHQvKiBTaW1wbHkgdGFrZSBhIHJlZiBvbiB0aGUgZXhpc3RpbmcgbW91bnQgKi9cXG4gIDc2OlxcdHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC1cXHUwMDNlbW50X3NiO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZzYi1cXHUwMDNlc19hY3RpdmUpO1xcbiAgODE6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gIDgyOlxcdFxcdGZjLVxcdTAwM2Vyb290ID0gZGdldChzYi1cXHUwMDNlc19yb290KTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0aWYgKGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlKSB7XFxuICA4NTpcXHRcXHRcXHRpbnQgZXJyID0gZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmUoZmMpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuICA4ODpcXHRcXHRcXHRcXHRkcHV0KGZjLVxcdTAwM2Vyb290KTtcXG4gIDg5OlxcdFxcdFxcdFxcdGZjLVxcdTAwM2Vyb290ID0gTlVMTDtcXG4gIDkwOlxcdFxcdFxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4gIDkxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA5MjpcXHRcXHRcXHR9XFxuICA5MzpcXHRcXHR9XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdHJldHVybiAwO1xcbiAgOTY6XFx0fVxcbiAgOTc6XFx0XFxuICA5ODpcXHQvKiBPcHMgYXJlIGZpbGxlZCBpbiBkdXJpbmcgaW5pdCBkZXBlbmRpbmcgb24gdW5kZXJseWluZyBzaG1lbSBvciByYW1mcyB0eXBlICovXFxuICA5OTpcXHRzdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBDYWxsIHRoZSB1bmRlcmx5aW5nIGluaXRpYWxpemF0aW9uIGFuZCBzZXQgdG8gb3VyIG9wcyAqL1xcbiAxMDI6XFx0c3RhdGljIGludCBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0aW50IHJldDtcXG4gMTA1OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNcXG4gMTA2OlxcdFxcdHJldCA9IHNobWVtX2luaXRfZnNfY29udGV4dChmYyk7XFxuIDEwNzpcXHQjZWxzZVxcbiAxMDg6XFx0XFx0cmV0ID0gcmFtZnNfaW5pdF9mc19jb250ZXh0KGZjKTtcXG4gMTA5OlxcdCNlbmRpZlxcbiAxMTA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDExMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmRldnRtcGZzX2NvbnRleHRfb3BzO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTE2OlxcdH1cXG4gMTE3OlxcdFxcbiAxMTg6XFx0c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGRldl9mc190eXBlID0ge1xcbiAxMTk6XFx0XFx0Lm5hbWUgPSBcXFwiZGV2dG1wZnNcXFwiLFxcbiAxMjA6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IGRldnRtcGZzX2luaXRfZnNfY29udGV4dCxcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdHN0YXRpYyBpbnQgZGV2dG1wZnNfc3VibWl0X3JlcShzdHJ1Y3QgcmVxICpyZXEsIGNvbnN0IGNoYXIgKnRtcClcXG4gMTI0OlxcdHtcXG4gMTI1OlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cmVxLVxcdTAwM2Vkb25lKTtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXFfbG9jayk7XFxuIDEyODpcXHRcXHRyZXEtXFx1MDAzZW5leHQgPSByZXF1ZXN0cztcXG4gMTI5OlxcdFxcdHJlcXVlc3RzID0gcmVxO1xcbiAxMzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlcV9sb2NrKTtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0d2FrZV91cF9wcm9jZXNzKHRocmVhZCk7XFxuIDEzMzpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZyZXEtXFx1MDAzZWRvbmUpO1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRrZnJlZSh0bXApO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRyZXR1cm4gcmVxLVxcdTAwM2VlcnI7XFxuIDEzODpcXHR9XFxuIDEzOTpcXHRcXG4gMTQwOlxcdGludCBkZXZ0bXBmc19jcmVhdGVfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDE0MTpcXHR7XFxuIDE0MjpcXHRcXHRjb25zdCBjaGFyICp0bXAgPSBOVUxMO1xcbiAxNDM6XFx0XFx0c3RydWN0IHJlcSByZXE7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmICghdGhyZWFkKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHJlcS5tb2RlID0gMDtcXG4gMTQ5OlxcdFxcdHJlcS51aWQgPSBHTE9CQUxfUk9PVF9VSUQ7XFxuIDE1MDpcXHRcXHRyZXEuZ2lkID0gR0xPQkFMX1JPT1RfR0lEO1xcbiAxNTE6XFx0XFx0cmVxLm5hbWUgPSBkZXZpY2VfZ2V0X2Rldm5vZGUoZGV2LCBcXHUwMDI2cmVxLm1vZGUsIFxcdTAwMjZyZXEudWlkLCBcXHUwMDI2cmVxLmdpZCwgXFx1MDAyNnRtcCk7XFxuIDE1MjpcXHRcXHRpZiAoIXJlcS5uYW1lKVxcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGlmIChyZXEubW9kZSA9PSAwKVxcbiAxNTY6XFx0XFx0XFx0cmVxLm1vZGUgPSAwNjAwO1xcbiAxNTc6XFx0XFx0aWYgKGlzX2Jsb2NrZGV2KGRldikpXFxuIDE1ODpcXHRcXHRcXHRyZXEubW9kZSB8PSBTX0lGQkxLO1xcbiAxNTk6XFx0XFx0ZWxzZVxcbiAxNjA6XFx0XFx0XFx0cmVxLm1vZGUgfD0gU19JRkNIUjtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0cmVxLmRldiA9IGRldjtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cmV0dXJuIGRldnRtcGZzX3N1Ym1pdF9yZXEoXFx1MDAyNnJlcSwgdG1wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTIuOTUxMzE5Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4ODI5MTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGRldnRtcGZzIFJlY29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgY2FsbCB0byBgZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKWAgd2l0aGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgY2FsbGVkIHdoZW4gYGRldnRtcGZzYCBpcyBtb3VudGVkIOKAkyB3aGljaCBoYXBwZW5zIGJvdGggZHVyaW5nIGJvb3QgYW5kLCBjcnVjaWFsbHksIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHdpdGggYG1vdW50IC10IGRldnRtcGZzIC4uLmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gYSB1c2VyICphY3R1YWxseSogdHJpZ2dlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGw/XG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNhbGwgY2hhaW4gdG8gYmUgc3VyZS4gIGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgdGhlIGBnZXRfdHJlZWAgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGBkZXZ0bXBmc19jb250ZXh0X29wc2AuIFdoZW4gYSB1c2VyIGNhbGxzIGBtb3VudCAtdCBkZXZ0bXBmcyAuLi5gLCB0aGUga2VybmVsIGNhbGxzIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgLCB3aGljaCBzZXRzIGBmYy1cdTAwM2VvcHNgIHRvIGBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wc2AuIFRoZW4sIHRoZSBzdGFuZGFyZCBgdmZzX2dldF90cmVlYCBjYWxsIHdpbGwgZXhlY3V0ZSBgZmMtXHUwMDNlb3BzLVx1MDAzZWdldF90cmVlKGZjKWAuIFNvLCB5ZXMsIGBkZXZ0bXBmc19nZXRfdHJlZWAgKmlzKiByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gU28sIGFkZGluZyB0aGlzIGByZWNvbmZpZ3VyZWAgY2FsbCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbkJ1dCwgaGFuZyBvbiwgYGZjLVx1MDAzZW9wc2AgaXMgc2V0IHRvIGBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wc2AuICBEb2VzIGBkZXZ0bXBmc19jb250ZXh0X29wc2AgYWN0dWFsbHkgKmRlZmluZSogYSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIHBvaW50ZXI/ICBJIG5lZWQgdG8gY2hlY2sgaG93IGBkZXZ0bXBmc19jb250ZXh0X29wc2AgaXMgc2V0IHVwLiAgU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgd2hldGhlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGwgaXMgYWN0dWFsbHkgZ29pbmcgdG8gZG8gYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjoxOC42Mzk2MTM3NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdGNvbXBsZXRlKFxcdTAwMjZzZXR1cF9kb25lKTtcXG4gNDUxOlxcdFxcdGlmIChlcnIpXFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTM6XFx0XFx0ZGV2dG1wZnNfd29ya19sb29wKCk7XFxuIDQ1NDpcXHRcXHRyZXR1cm4gMDtcXG4gNDU1OlxcdH1cXG4gNDU2OlxcdFxcbiA0NTc6XFx0LypcXG4gNDU4OlxcdCAqIEdldCB0aGUgdW5kZXJseWluZyAoc2htZW0vcmFtZnMpIGNvbnRleHQgb3BzIHRvIGJ1aWxkIG91cnNcXG4gNDU5OlxcdCAqL1xcbiA0NjA6XFx0c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxcbiA0NjE6XFx0e1xcbiA0NjI6XFx0XFx0c3RydWN0IGZzX2NvbnRleHQgKmZjO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRmYyA9IGZzX2NvbnRleHRfZm9yX3JlY29uZmlndXJlKG1udC1cXHUwMDNlbW50X3Jvb3QsIG1udC1cXHUwMDNlbW50X3NiLVxcdTAwM2VzX2ZsYWdzLFxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0TVNfUk1UX01BU0spO1xcbiA0NjY6XFx0XFx0aWYgKElTX0VSUihmYykpXFxuIDQ2NzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmYyk7XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdC8qIFNldCB1cCBkZXZ0bXBmc19jb250ZXh0X29wcyBiYXNlZCBvbiB1bmRlcmx5aW5nIHR5cGUgKi9cXG4gNDcwOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLmZyZWVcXHQgICAgICA9IGZjLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWU7XFxuIDQ3MTpcXHRcXHRkZXZ0bXBmc19jb250ZXh0X29wcy5kdXBcXHQgICAgICA9IGZjLVxcdTAwM2VvcHMtXFx1MDAzZWR1cDtcXG4gNDcyOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX3BhcmFtICAgICAgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9wYXJhbTtcXG4gNDczOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9tb25vbGl0aGljO1xcbiA0NzQ6XFx0XFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZ2V0X3RyZWVcXHQgICAgICA9IFxcdTAwMjZkZXZ0bXBmc19nZXRfdHJlZTtcXG4gNDc1OlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnJlY29uZmlndXJlICAgICAgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0cHV0X2ZzX2NvbnRleHQoZmMpO1xcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0LypcXG4gNDgzOlxcdCAqIENyZWF0ZSBkZXZ0bXBmcyBpbnN0YW5jZSwgZHJpdmVyLWNvcmUgZGV2aWNlcyB3aWxsIGFkZCB0aGVpciBkZXZpY2VcXG4gNDg0OlxcdCAqIG5vZGVzIGhlcmUuXFxuIDQ4NTpcXHQgKi9cXG4gNDg2OlxcdGludCBfX2luaXQgZGV2dG1wZnNfaW5pdCh2b2lkKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0Y2hhciBvcHRzW10gPSBcXFwibW9kZT0wNzU1XFxcIjtcXG4gNDg5OlxcdFxcdGludCBlcnI7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdG1udCA9IHZmc19rZXJuX21vdW50KFxcdTAwMjZpbnRlcm5hbF9mc190eXBlLCAwLCBcXFwiZGV2dG1wZnNcXFwiLCBvcHRzKTtcXG4gNDkyOlxcdFxcdGlmIChJU19FUlIobW50KSkge1xcbiA0OTM6XFx0XFx0XFx0cHJfZXJyKFxcXCJ1bmFibGUgdG8gY3JlYXRlIGRldnRtcGZzICVsZFxcXFxuXFxcIiwgUFRSX0VSUihtbnQpKTtcXG4gNDk0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1udCk7XFxuIDQ5NTpcXHRcXHR9XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdGVyciA9IGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0KCk7XFxuIDQ5ODpcXHRcXHRpZiAoZXJyKSB7XFxuIDQ5OTpcXHRcXHRcXHRwcl9lcnIoXFxcInVuYWJsZSB0byBjb25maWd1cmUgZGV2dG1wZnMgdHlwZSAlZFxcXFxuXFxcIiwgZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTguNjM5Njg3NDU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzgxNzIzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGV2dG1wZnNfY29uZmlndXJlX2NvbnRleHRgIGVzc2VudGlhbGx5IGxpbmtzIHRoZSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIHBvaW50ZXIuIEl0IHNldHMgYGRldnRtcGZzX2NvbnRleHRfb3BzLnJlY29uZmlndXJlYCB0byB0aGUgdW5kZXJseWluZyBgZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlYCDigJMgd2hpY2ggaXMgZWl0aGVyIGBzaG1lbWAgb3IgYHJhbWZzYCwgSSdkIGFzc3VtZS4gIFRoZXJlZm9yZSwgd2hlbiBgZGV2dG1wZnNfZ2V0X3RyZWVgIGNhbGxzIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgLCBpdCdzIGFjdHVhbGx5IGNhbGxpbmcgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHVuZGVybmVhdGguIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBsaWtlbHkgdG8gZml4IGEgYnVnLCBvciBtYXliZSB0byBhcHBseSBtb3VudCBvcHRpb25zIHRvIGFuIGFscmVhZHkgbW91bnRlZCBkZXZ0bXBmcyBpbnN0YW5jZS5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBJdCdzIHVzZXItcmVhY2hhYmxlLCBwcmltYXJpbHkgdGhyb3VnaCBgbW91bnRgIG9yIHBvdGVudGlhbGx5IGBmc2NvbmZpZ2AsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBleHBvc2VkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBzaG91bGQgYmUgYGRldnRtcGZzX2dldF90cmVlYC5cblxuSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0RFVlRNUEZTYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIExldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjoyMi45MTc4NjIwMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODk3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZUTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMT1jb25maWcgVUVWRU5UX0hFTFBFUl9QQVRIXFxuLS1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzozMTpjb25maWcgREVWVE1QRlNcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJNYWludGFpbiBhIGRldnRtcGZzIGZpbGVzeXN0ZW0gdG8gbW91bnQgYXQgL2RldlxcXCJcXG4tLVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTQ5LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjUwOmNvbmZpZyBERVZUTVBGU19NT1VOVFxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkF1dG9tb3VudCBkZXZ0bXBmcyBhdCAvZGV2LCBhZnRlciB0aGUga2VybmVsIG1vdW50ZWQgdGhlIHJvb3Rmc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjY1OmNvbmZpZyBERVZUTVBGU19TQUZFXFxuZHJpdmVycy9iYXNlL0tjb25maWctNjYtXFx0Ym9vbCBcXFwiVXNlIG5vc3VpZCxub2V4ZWMgbW91bnQgb3B0aW9ucyBvbiBkZXZ0bXBmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MjIuOTk2NzYyMzA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTY2NTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKk5hdmlnYXRpbmcgdGhlIERldnRtcGZzIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBgREVWVE1QRlNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwaWVjZS4gR290IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwuIE9rYXksIGxldCdzIHRyYWNlIHRoaXMuIGBkZXZ0bXBmc19nZXRfdHJlZWAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgaW50bywgYW5kIHRoYXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jYC4gUGVyZmVjdC4gTm93LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL01ha2VmaWxlYCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGxpbmtlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjI2LjMxMzQxNTM3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MDg0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2dG1wZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQVVYSUxJQVJZX0JVUykgKz0gYXV4aWxpYXJ5Lm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0RFVlRNUEZTKVxcdCs9IGRldnRtcGZzLm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGUtMTItb2JqLXlcXHRcXHRcXHQrPSBwb3dlci9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MjYuMzY0MjI5NTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NzE0MTc1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYERFVlRNUEZTYCwgdGhhdCdzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBtYWtlIHN1cmUgYGRldnRtcGZzX2dldF90cmVlYCBpc24ndCBpbmxpbmVkLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgcHJlZmVyIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQuIEFuZCB0aGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBjaGVjayBmaXJzdC5cblxuTGV0IG1lIHNlZSwgXCJzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlLi4uXCIgWWVzLCBpdCdzIHN0YXRpYy4gQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBhZGRyZXNzIGlzIHRha2VuIGJ5IHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIHN0cnVjdHVyZTogYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlID0gXHUwMDI2ZGV2dG1wZnNfZ2V0X3RyZWU7YC4gVGhhdCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLCBhbmQgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gdGhhdCdzIGZpbmUuIEFsdGhvdWdoLCBJIGRpZCBicmllZmx5IGNvbnNpZGVyIHdoZXRoZXIgdGhlcmUgd2FzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBmdW5jdGlvbiBJIGNvdWxkIHVzZSwgYnV0IG5vLCB0aGlzIGlzIHRoZSByaWdodCBvbmUsIHRoZSBjaGFuZ2UgaXMgcmlnaHQgaGVyZS5cblxuSSd2ZSByZS1yZWFkIHRoZSBjb2RlIHRvIGJlIGNlcnRhaW46XG5gYGBjXG5AQCAtODAsNiArODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRhdG9taWNfaW5jKFx1MDAyNnNiLVx1MDAzZXNfYWN0aXZlKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2c2ItXHUwMDNlc191bW91bnQpO1xuIFx0ZmMtXHUwMDNlcm9vdCA9IGRnZXQoc2ItXHUwMDNlc19yb290KTtcbitcbitcdGlmIChmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUpIHtcbitcdFx0aW50IGVyciA9IGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZShmYyk7XG4rXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkcHV0KGZjLVx1MDAzZXJvb3QpO1xuK1x0XHRcdGZjLVx1MDAzZXJvb3QgPSBOVUxMO1xuK1x0XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG5gYGBcblJpZ2h0LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhlIGNhbGwgdG8gYHJlY29uZmlndXJlYC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucyB3aGVuIGFuIGV4aXN0aW5nIGRldnRtcGZzIGluc3RhbmNlIGlzIG1vdW50ZWQsIGFuZCB0aGF0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGl0IGFzIHN1Y2guXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgQ29uZmlnczogYERFVlRNUEZTYFxuKiAgIEZvY3VzU3ltYm9sczogYGRldnRtcGZzX2dldF90cmVlYFxuKiAgIFJlYXNvbmluZzogVGhpcyBwYXRjaCBtb2RpZmllcyBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGNhbGwgYHJlY29uZmlndXJlYCB3aGVuIG1vdW50aW5nIGFuIGV4aXN0aW5nIGRldnRtcGZzIGluc3RhbmNlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtb3VudGAgc3lzdGVtIGNhbGwgYW5kIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg5LCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjM1LjAzNTY0OTg4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjA4MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTEzMjY2ODQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQwMDIxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTE0MDA5Njg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MzkyNzM3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGZ1bmN0aW9uIHRvIGNhbGwgYGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlYCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIHJldHVybmVkIGJ5IGl0LiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHJlY29uZmlndXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWFhMWY1MjIwOTQ2MmFmMDM5YmQxYjAxMTc2MzQ0YTM1MzYyZWVlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE5OjU1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuaW5kZXggYWVmMGZjYzZhYmExZS4uZjA3OThmYzFiYzM0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuQEAgLTgwLDYgKzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiBcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4rXG4rXHRpZiAoZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKSB7XG4rXHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuK1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbitcdFx0XHRmYy1cdTAwM2Vyb290ID0gTlVMTDtcbitcdFx0XHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTE0MDEwOTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzkyNDk3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2dG1wZnMgUmVjb25maWd1cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGljaCBtb2RpZmllcyBgZGV2dG1wZnNfZ2V0X3RyZWVgIGluIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGEgbmV3IGNhbGwsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgLCB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnRpbmcgcHJvY2Vzcy4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiBhIGByZWNvbmZpZ3VyZWAgZnVuY3Rpb24gZXhpc3RzIGluIHRoZSBmaWxlc3lzdGVtJ3Mgb3BlcmF0aW9uIHN0cnVjdHVyZSAoYGZjLVx1MDAzZW9wc2ApIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGl0IGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nOiBpZiBgcmVjb25maWd1cmVgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBwYXRjaCBjb3JyZWN0bHkgY2xlYW5zIHVwIGJ5IHJlbGVhc2luZyB0aGUgcm9vdCBpbm9kZSAoYGZjLVx1MDAzZXJvb3RgKSBhbmQgZGVhY3RpdmF0aW5nIHRoZSBzdXBlcmJsb2NrIGJlZm9yZSByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgZGlyZWN0bHksIHRoZSBjb2RlIHNlZW1zIHNvdW5kIGluIGl0cyBiYXNpYyBzdHJ1Y3R1cmU6XG5cbmBgYGNcbiBcdGF0b21pY19pbmMoXHUwMDI2c2ItXHUwMDNlc19hY3RpdmUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gXHRmYy1cdTAwM2Vyb290ID0gZGdldChzYi1cdTAwM2VzX3Jvb3QpO1xuK1xuK1x0aWYgKGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZSkge1xuK1x0XHRpbnQgZXJyID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKTtcbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRwdXQoZmMtXHUwMDNlcm9vdCk7XG4rXHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4rXHRcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5UaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgZm9yIHJlY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHByZXR0eSB0eXBpY2FsOiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBtZW1vcnkgbGVha3MuIEhvd2V2ZXIsIHRoZXNlIGFyZSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiwgS21lbWxlYWssIGFuZCBvdGhlciBtZW1vcnkgc2FmZXR5IHRvb2xzIHNob3VsZCBjYXRjaCB3aXRob3V0IGEgcHJvYmxlbS5cblxuQmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guLi4gWWVwLCB0aGUgYGVycmAgdmFyaWFibGUgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSB0aGUgcmV0dXJuIG9mIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpYC4gT2theSwgYWxsIGNsZWFyLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjQyLjc1MzI2Mzk0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gdG8gY2FsbCBgZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcjv4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 19:15:45 +0000 UTC FinishedAt: 2026-08-23 19:56:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVTMPFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVTMPFS" ], "series_id": "ff4d171a-9be4-4114-8ad3-3d2afdc34537" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "devtmpfs_get_tree" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVlRNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2dG1wZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1NTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG5pbmRleCBhZWYwZmNjNmFiYTFlLi5mMDc5OGZjMWJjMzRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG5AQCAtODAsNiAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiBcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4mIzQzO1xuJiM0MztcdGlmIChmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbiYjNDM7XHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4mIzQzO1x0XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZUTVBGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYWExZjUyMjA5NDYyYWYwMzliZDFiMDExNzYzNDRhMzUzNjJlZWU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTk6NTU6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCkBAIC04MCw2ICYjNDM7ODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJYXRvbWljX2luYygmYW1wO3NiLSZndDtzX2FjdGl2ZSk7CiAJZG93bl93cml0ZSgmYW1wO3NiLSZndDtzX3Vtb3VudCk7CiAJZmMtJmd0O3Jvb3QgPSBkZ2V0KHNiLSZndDtzX3Jvb3QpOwomIzQzOwomIzQzOwlpZiAoZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUpIHsKJiM0MzsJCWludCBlcnIgPSBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYyk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZHB1dChmYy0mZ3Q7cm9vdCk7CiYjNDM7CQkJZmMtJmd0O3Jvb3QgPSBOVUxMOwomIzQzOwkJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGRldnRtcGZzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBpbnRyb2R1Y2VkIGEgY2hlY2sgaW4gYGRldnRtcGZzX2dldF90cmVlYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNhbGwgdG8gYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCB3aXRoaW4gYGRldnRtcGZzX2dldF90cmVlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gaXRzZWxmLgoKRmlyc3QsIGxldCBtZSBjb25maXJtIHRoYXQgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LiBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgYGdldF90cmVlYCBvcGVyYXRpb24gZm9yIHRoZSBgZGV2dG1wZnNgIGZpbGVzeXN0ZW0uIFJpZ2h0LiBgZGV2dG1wZnNgIGlzIHRoYXQgdmlydHVhbCBmaWxlc3lzdGVtIHVzZWQgZm9yIHRoZSBgL2RldmAgZGlyZWN0b3J5LiBPa2F5LCBjYW4gdXNlcnNwYWNlIG1vdW50IHRoaXMgdGhpbmc/IFllcCwgYG1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXZgIGNvbmZpcm1zIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIHdpdGhpbiBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgZXhhY3RseSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzIGRvaW5nIGFuZCB3aGF0IHRoaXMgbmV3IGByZWNvbmZpZ3VyZWAgY2FsbCBzaWduaWZpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93IG9mIG1vdW50aW5nIG9yIHJlbW91bnRpbmcgYSBgZGV2dG1wZnNgIGluc3RhbmNlLiBUaGlzIGByZWNvbmZpZ3VyZWAgZnVuY3Rpb24gbXVzdCBiZSBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gb3IgYWRqdXN0bWVudCBzdGVwIHRoYXQgd2UmIzM5O3JlIG5vdyB0cmlnZ2VyaW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYGZjYCBhbmQgaXRzIGBvcHNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9NjU9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XG4tLVxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNzUtLyogU2ltcGx5IHRha2UgYSByZWYgb24gdGhlIGV4aXN0aW5nIG1vdW50ICovXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzo3NjpzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTc3LXtcbi0tXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz00NjA9c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxuLS1cbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTQ3My1cdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcGFyc2VfbW9ub2xpdGhpYztcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjQ3NDpcdGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlXHQgICAgICA9IFx1MDAyNmRldnRtcGZzX2dldF90cmVlO1xuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNDc1LVx0ZGV2dG1wZnNfY29udGV4dF9vcHMucmVjb25maWd1cmUgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERldnRtcGZzIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBkZXZ0bXBmc19nZXRfdHJlZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgYGRldnRtcGZzX2dldF90cmVlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZGV2dG1wZnMgZmlsZSBzeXN0ZW0uJiMzNDsgVGhlIHBhdGNo4oCZcyBjcnVjaWFsIGNoYW5nZSBpbnZvbHZlcyBjYWxsaW5nIGBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYylgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2FsbC4gQmVmb3JlIGZ1bGx5IGFzc2Vzc2luZyB0aGUgY2hhbmdlLCBJIHdpbGwgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRldnRtcGZzX2luaXRfZnNfY29udGV4dGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbnRleHQgc3RydWN0dXJlLCBgZmNgLCBpcyBpbml0aWFsaXplZCBhbmQgd2hhdCBgZmMtJmd0O29wc2AgcG9pbnRzIHRvLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBkZXZ0bXBmcyBmaWxlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2Ygc3RydWN0dXJlIGByZWNvbmZpZ3VyZWAgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBwdXJwb3NlIG9mIHRoaXMgcmVjb25maWd1cmF0aW9uLiBJcyBpdCBhYm91dCBob3RwbHVnIGV2ZW50cz8gUmVzb3VyY2UgbGltaXRzPyBJdCBhbGwgZGVwZW5kcyBvbiB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz05OT1zdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xuLS1cbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEwMS0vKiBDYWxsIHRoZSB1bmRlcmx5aW5nIGluaXRpYWxpemF0aW9uIGFuZCBzZXQgdG8gb3VyIG9wcyAqL1xuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM6MTAyOnN0YXRpYyBpbnQgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEwMy17XG4tLVxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZfZnNfdHlwZSA9IHtcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTExOS1cdC5uYW1lID0gXCYjMzQ7ZGV2dG1wZnNcJiMzNDssXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzoxMjA6XHQuaW5pdF9mc19jb250ZXh0ID0gZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0LFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtMTIxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqRGVjb25zdHJ1Y3RpbmcgZGV2dG1wZnMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGRldnRtcGZzX2luaXRfZnNfY29udGV4dGAgYW5kIGBkZXZ0bXBmc19nZXRfdHJlZWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlcyBhbmQgbWV0YWRhdGEgZm9yIGEgbmV3IGBkZXZ0bXBmc2AgaW5zdGFuY2UuIEl0IHNob3VsZCBiZSB3aGVyZSB0aGUgY29yZSBmaWxlc3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIGhhbmRsZWQgYmVmb3JlIHdlIGNhbiBtb3VudCBpdC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGRldnRtcGZzX2dldF90cmVlYC4gVGhpcyBoYXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY3JlYXRlcyB0aGUgcm9vdCBpbm9kZSBmb3IgdGhlIG1vdW50ZWQgYGRldnRtcGZzYC4gSXQgc2hvdWxkIHRha2UgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUsIGFuZCBsaW5raW5nIHRoYXQgc3RydWN0dXJlIHdpdGggYW55IGFzc29jaWF0ZWQgcGFyYW1ldGVycy4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsIGlub2RlIGFsbG9jYXRpb24gYW5kIHNldHVwLCBzZXR0aW5nIHBlcm1pc3Npb25zLCBhbmQgcHJvYmFibHkgZGVmaW5pbmcgdGhlIGluaXRpYWwgZGV2aWNlIG5vZGVzIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCB0aGUgaW5pdCBwcm9jZXNzIG5lZWRzLiBFc3NlbnRpYWxseSwgdGhpcyBpcyB3aGVyZSB0aGUgKmFjdHVhbCogZmlsZXN5c3RlbSBpbnN0YW5jZSBnZXRzIHB1dCB0b2dldGhlciBvbiB0aGUgYmxvY2sgZGV2aWNlIGluIG1lbW9yeS4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGNvbnRleHQgY3JlYXRlZCBieSBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCBpcyB0aGVuIHBhc3NlZCB0byBhbmQgdXNlZCBieSBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBtb3VudC4gS25vd2luZyB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGV2dG1wZnNgIGdldHMgZnJvbSBhIGtlcm5lbCBjb21waWxlIG9wdGlvbiB0byBhIHdvcmtpbmcgZmlsZXN5c3RlbSBtb3VudGVkIG9uIGAvZGV2YC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XG4gIDY2Olx0XHQubmFtZSA9IFwmIzM0O2RldnRtcGZzXCYjMzQ7LFxuICA2NzpcdCNpZmRlZiBDT05GSUdfVE1QRlNcbiAgNjg6XHRcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXG4gIDY5Olx0I2Vsc2VcbiAgNzA6XHRcdC5pbml0X2ZzX2NvbnRleHQgPSByYW1mc19pbml0X2ZzX2NvbnRleHQsXG4gIDcxOlx0I2VuZGlmXG4gIDcyOlx0XHQua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlcixcbiAgNzM6XHR9O1xuICA3NDpcdFxuICA3NTpcdC8qIFNpbXBseSB0YWtlIGEgcmVmIG9uIHRoZSBleGlzdGluZyBtb3VudCAqL1xuICA3NjpcdHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtXHUwMDNlbW50X3NiO1xuICA3OTpcdFxuICA4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gIDgxOlx0XHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiAgODI6XHRcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4gIDgzOlx0XG4gIDg0Olx0XHRpZiAoZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKSB7XG4gIDg1Olx0XHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuICA4NjpcdFxuICA4NzpcdFx0XHRpZiAoZXJyKSB7XG4gIDg4Olx0XHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbiAgODk6XHRcdFx0XHRmYy1cdTAwM2Vyb290ID0gTlVMTDtcbiAgOTA6XHRcdFx0XHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gIDkxOlx0XHRcdFx0cmV0dXJuIGVycjtcbiAgOTI6XHRcdFx0fVxuICA5MzpcdFx0fVxuICA5NDpcdFxuICA5NTpcdFx0cmV0dXJuIDA7XG4gIDk2Olx0fVxuICA5NzpcdFxuICA5ODpcdC8qIE9wcyBhcmUgZmlsbGVkIGluIGR1cmluZyBpbml0IGRlcGVuZGluZyBvbiB1bmRlcmx5aW5nIHNobWVtIG9yIHJhbWZzIHR5cGUgKi9cbiAgOTk6XHRzdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xuIDEwMDpcdFxuIDEwMTpcdC8qIENhbGwgdGhlIHVuZGVybHlpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHNldCB0byBvdXIgb3BzICovXG4gMTAyOlx0c3RhdGljIGludCBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDEwMzpcdHtcbiAxMDQ6XHRcdGludCByZXQ7XG4gMTA1Olx0I2lmZGVmIENPTkZJR19UTVBGU1xuIDEwNjpcdFx0cmV0ID0gc2htZW1faW5pdF9mc19jb250ZXh0KGZjKTtcbiAxMDc6XHQjZWxzZVxuIDEwODpcdFx0cmV0ID0gcmFtZnNfaW5pdF9mc19jb250ZXh0KGZjKTtcbiAxMDk6XHQjZW5kaWZcbiAxMTA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTExOlx0XHRcdHJldHVybiByZXQ7XG4gMTEyOlx0XG4gMTEzOlx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wcztcbiAxMTQ6XHRcbiAxMTU6XHRcdHJldHVybiAwO1xuIDExNjpcdH1cbiAxMTc6XHRcbiAxMTg6XHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGV2X2ZzX3R5cGUgPSB7XG4gMTE5Olx0XHQubmFtZSA9IFwmIzM0O2RldnRtcGZzXCYjMzQ7LFxuIDEyMDpcdFx0LmluaXRfZnNfY29udGV4dCA9IGRldnRtcGZzX2luaXRfZnNfY29udGV4dCxcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBpbnQgZGV2dG1wZnNfc3VibWl0X3JlcShzdHJ1Y3QgcmVxICpyZXEsIGNvbnN0IGNoYXIgKnRtcClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cmVxLVx1MDAzZWRvbmUpO1xuIDEyNjpcdFxuIDEyNzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnJlcV9sb2NrKTtcbiAxMjg6XHRcdHJlcS1cdTAwM2VuZXh0ID0gcmVxdWVzdHM7XG4gMTI5Olx0XHRyZXF1ZXN0cyA9IHJlcTtcbiAxMzA6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnJlcV9sb2NrKTtcbiAxMzE6XHRcbiAxMzI6XHRcdHdha2VfdXBfcHJvY2Vzcyh0aHJlYWQpO1xuIDEzMzpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZyZXEtXHUwMDNlZG9uZSk7XG4gMTM0Olx0XG4gMTM1Olx0XHRrZnJlZSh0bXApO1xuIDEzNjpcdFxuIDEzNzpcdFx0cmV0dXJuIHJlcS1cdTAwM2VlcnI7XG4gMTM4Olx0fVxuIDEzOTpcdFxuIDE0MDpcdGludCBkZXZ0bXBmc19jcmVhdGVfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMTQxOlx0e1xuIDE0MjpcdFx0Y29uc3QgY2hhciAqdG1wID0gTlVMTDtcbiAxNDM6XHRcdHN0cnVjdCByZXEgcmVxO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKCF0aHJlYWQpXG4gMTQ2Olx0XHRcdHJldHVybiAwO1xuIDE0NzpcdFxuIDE0ODpcdFx0cmVxLm1vZGUgPSAwO1xuIDE0OTpcdFx0cmVxLnVpZCA9IEdMT0JBTF9ST09UX1VJRDtcbiAxNTA6XHRcdHJlcS5naWQgPSBHTE9CQUxfUk9PVF9HSUQ7XG4gMTUxOlx0XHRyZXEubmFtZSA9IGRldmljZV9nZXRfZGV2bm9kZShkZXYsIFx1MDAyNnJlcS5tb2RlLCBcdTAwMjZyZXEudWlkLCBcdTAwMjZyZXEuZ2lkLCBcdTAwMjZ0bXApO1xuIDE1MjpcdFx0aWYgKCFyZXEubmFtZSlcbiAxNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAocmVxLm1vZGUgPT0gMClcbiAxNTY6XHRcdFx0cmVxLm1vZGUgPSAwNjAwO1xuIDE1NzpcdFx0aWYgKGlzX2Jsb2NrZGV2KGRldikpXG4gMTU4Olx0XHRcdHJlcS5tb2RlIHw9IFNfSUZCTEs7XG4gMTU5Olx0XHRlbHNlXG4gMTYwOlx0XHRcdHJlcS5tb2RlIHw9IFNfSUZDSFI7XG4gMTYxOlx0XG4gMTYyOlx0XHRyZXEuZGV2ID0gZGV2O1xuIDE2MzpcdFxuIDE2NDpcdFx0cmV0dXJuIGRldnRtcGZzX3N1Ym1pdF9yZXEoXHUwMDI2cmVxLCB0bXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBSZWNvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjYWxsIHRvIGBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYylgIHdpdGhpbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgYGRldnRtcGZzX2dldF90cmVlYCBpcyBjYWxsZWQgd2hlbiBgZGV2dG1wZnNgIGlzIG1vdW50ZWQg4oCTIHdoaWNoIGhhcHBlbnMgYm90aCBkdXJpbmcgYm9vdCBhbmQsIGNydWNpYWxseSwgY2FuIGJlIHRyaWdnZXJlZCBieSB1c2Vyc3BhY2Ugd2l0aCBgbW91bnQgLXQgZGV2dG1wZnMgLi4uYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBhIHVzZXIgKmFjdHVhbGx5KiB0cmlnZ2VyIHRoaXMgbmV3IGByZWNvbmZpZ3VyZWAgY2FsbD8KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjYWxsIGNoYWluIHRvIGJlIHN1cmUuICBgZGV2dG1wZnNfZ2V0X3RyZWVgIGlzIHRoZSBgZ2V0X3RyZWVgIG9wZXJhdGlvbiBkZWZpbmVkIGZvciBgZGV2dG1wZnNfY29udGV4dF9vcHNgLiBXaGVuIGEgdXNlciBjYWxscyBgbW91bnQgLXQgZGV2dG1wZnMgLi4uYCwgdGhlIGtlcm5lbCBjYWxscyBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCwgd2hpY2ggc2V0cyBgZmMtJmd0O29wc2AgdG8gYCZhbXA7ZGV2dG1wZnNfY29udGV4dF9vcHNgLiBUaGVuLCB0aGUgc3RhbmRhcmQgYHZmc19nZXRfdHJlZWAgY2FsbCB3aWxsIGV4ZWN1dGUgYGZjLSZndDtvcHMtJmd0O2dldF90cmVlKGZjKWAuIFNvLCB5ZXMsIGBkZXZ0bXBmc19nZXRfdHJlZWAgKmlzKiByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gU28sIGFkZGluZyB0aGlzIGByZWNvbmZpZ3VyZWAgY2FsbCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpCdXQsIGhhbmcgb24sIGBmYy0mZ3Q7b3BzYCBpcyBzZXQgdG8gYCZhbXA7ZGV2dG1wZnNfY29udGV4dF9vcHNgLiAgRG9lcyBgZGV2dG1wZnNfY29udGV4dF9vcHNgIGFjdHVhbGx5ICpkZWZpbmUqIGEgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBwb2ludGVyPyAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZGV2dG1wZnNfY29udGV4dF9vcHNgIGlzIHNldCB1cC4gIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgZGV2dG1wZnNfY29uZmlndXJlX2NvbnRleHRgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgd2hldGhlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGwgaXMgYWN0dWFsbHkgZ29pbmcgdG8gZG8gYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2RldnRtcGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdFx0Y29tcGxldGUoXHUwMDI2c2V0dXBfZG9uZSk7XG4gNDUxOlx0XHRpZiAoZXJyKVxuIDQ1MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1MzpcdFx0ZGV2dG1wZnNfd29ya19sb29wKCk7XG4gNDU0Olx0XHRyZXR1cm4gMDtcbiA0NTU6XHR9XG4gNDU2Olx0XG4gNDU3Olx0LypcbiA0NTg6XHQgKiBHZXQgdGhlIHVuZGVybHlpbmcgKHNobWVtL3JhbWZzKSBjb250ZXh0IG9wcyB0byBidWlsZCBvdXJzXG4gNDU5Olx0ICovXG4gNDYwOlx0c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxuIDQ2MTpcdHtcbiA0NjI6XHRcdHN0cnVjdCBmc19jb250ZXh0ICpmYztcbiA0NjM6XHRcbiA0NjQ6XHRcdGZjID0gZnNfY29udGV4dF9mb3JfcmVjb25maWd1cmUobW50LVx1MDAzZW1udF9yb290LCBtbnQtXHUwMDNlbW50X3NiLVx1MDAzZXNfZmxhZ3MsXG4gNDY1Olx0XHRcdFx0XHRcdE1TX1JNVF9NQVNLKTtcbiA0NjY6XHRcdGlmIChJU19FUlIoZmMpKVxuIDQ2NzpcdFx0XHRyZXR1cm4gUFRSX0VSUihmYyk7XG4gNDY4Olx0XG4gNDY5Olx0XHQvKiBTZXQgdXAgZGV2dG1wZnNfY29udGV4dF9vcHMgYmFzZWQgb24gdW5kZXJseWluZyB0eXBlICovXG4gNDcwOlx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5mcmVlXHQgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VmcmVlO1xuIDQ3MTpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZHVwXHQgICAgICA9IGZjLVx1MDAzZW9wcy1cdTAwM2VkdXA7XG4gNDcyOlx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5wYXJzZV9wYXJhbSAgICAgID0gZmMtXHUwMDNlb3BzLVx1MDAzZXBhcnNlX3BhcmFtO1xuIDQ3MzpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMucGFyc2VfbW9ub2xpdGhpYyA9IGZjLVx1MDAzZW9wcy1cdTAwM2VwYXJzZV9tb25vbGl0aGljO1xuIDQ3NDpcdFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZ2V0X3RyZWVcdCAgICAgID0gXHUwMDI2ZGV2dG1wZnNfZ2V0X3RyZWU7XG4gNDc1Olx0XHRkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZSAgICAgID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0cHV0X2ZzX2NvbnRleHQoZmMpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIDA7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdC8qXG4gNDgzOlx0ICogQ3JlYXRlIGRldnRtcGZzIGluc3RhbmNlLCBkcml2ZXItY29yZSBkZXZpY2VzIHdpbGwgYWRkIHRoZWlyIGRldmljZVxuIDQ4NDpcdCAqIG5vZGVzIGhlcmUuXG4gNDg1Olx0ICovXG4gNDg2Olx0aW50IF9faW5pdCBkZXZ0bXBmc19pbml0KHZvaWQpXG4gNDg3Olx0e1xuIDQ4ODpcdFx0Y2hhciBvcHRzW10gPSBcJiMzNDttb2RlPTA3NTVcJiMzNDs7XG4gNDg5Olx0XHRpbnQgZXJyO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0bW50ID0gdmZzX2tlcm5fbW91bnQoXHUwMDI2aW50ZXJuYWxfZnNfdHlwZSwgMCwgXCYjMzQ7ZGV2dG1wZnNcJiMzNDssIG9wdHMpO1xuIDQ5MjpcdFx0aWYgKElTX0VSUihtbnQpKSB7XG4gNDkzOlx0XHRcdHByX2VycihcJiMzNDt1bmFibGUgdG8gY3JlYXRlIGRldnRtcGZzICVsZFxcblwmIzM0OywgUFRSX0VSUihtbnQpKTtcbiA0OTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIobW50KTtcbiA0OTU6XHRcdH1cbiA0OTY6XHRcbiA0OTc6XHRcdGVyciA9IGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0KCk7XG4gNDk4Olx0XHRpZiAoZXJyKSB7XG4gNDk5Olx0XHRcdHByX2VycihcJiMzNDt1bmFibGUgdG8gY29uZmlndXJlIGRldnRtcGZzIHR5cGUgJWRcXG5cJiMzNDssIGVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0YCBlc3NlbnRpYWxseSBsaW5rcyB0aGUgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBwb2ludGVyLiBJdCBzZXRzIGBkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZWAgdG8gdGhlIHVuZGVybHlpbmcgYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCDigJMgd2hpY2ggaXMgZWl0aGVyIGBzaG1lbWAgb3IgYHJhbWZzYCwgSSYjMzk7ZCBhc3N1bWUuICBUaGVyZWZvcmUsIHdoZW4gYGRldnRtcGZzX2dldF90cmVlYCBjYWxscyBgZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmVgLCBpdCYjMzk7cyBhY3R1YWxseSBjYWxsaW5nIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB1bmRlcm5lYXRoLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgbGlrZWx5IHRvIGZpeCBhIGJ1Zywgb3IgbWF5YmUgdG8gYXBwbHkgbW91bnQgb3B0aW9ucyB0byBhbiBhbHJlYWR5IG1vdW50ZWQgZGV2dG1wZnMgaW5zdGFuY2UuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHVzZXItcmVhY2hhYmxlLCBwcmltYXJpbHkgdGhyb3VnaCBgbW91bnRgIG9yIHBvdGVudGlhbGx5IGBmc2NvbmZpZ2AsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBleHBvc2VkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBzaG91bGQgYmUgYGRldnRtcGZzX2dldF90cmVlYC4KCkkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfREVWVE1QRlNgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZUTVBGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxPWNvbmZpZyBVRVZFTlRfSEVMUEVSX1BBVEhcbi0tXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjMxOmNvbmZpZyBERVZUTVBGU1xuZHJpdmVycy9iYXNlL0tjb25maWctMzItXHRib29sIFwmIzM0O01haW50YWluIGEgZGV2dG1wZnMgZmlsZXN5c3RlbSB0byBtb3VudCBhdCAvZGV2XCYjMzQ7XG4tLVxuZHJpdmVycy9iYXNlL0tjb25maWctNDktXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzo1MDpjb25maWcgREVWVE1QRlNfTU9VTlRcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtBdXRvbW91bnQgZGV2dG1wZnMgYXQgL2RldiwgYWZ0ZXIgdGhlIGtlcm5lbCBtb3VudGVkIHRoZSByb290ZnNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy02NC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjY1OmNvbmZpZyBERVZUTVBGU19TQUZFXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7VXNlIG5vc3VpZCxub2V4ZWMgbW91bnQgb3B0aW9ucyBvbiBkZXZ0bXBmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGhlcmUuCgoqKk5hdmlnYXRpbmcgdGhlIERldnRtcGZzIExhbmRzY2FwZSoqCgpSaWdodCwgc28gYERFVlRNUEZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGllY2UuIEdvdCBpdC4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLiBPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gYGRldnRtcGZzX2dldF90cmVlYCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgaW50bywgYW5kIHRoYXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jYC4gUGVyZmVjdC4gTm93LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL01ha2VmaWxlYCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGxpbmtlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2dG1wZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19BVVhJTElBUllfQlVTKSAmIzQzOz0gYXV4aWxpYXJ5Lm9cbmRyaXZlcnMvYmFzZS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfREVWVE1QRlMpXHQmIzQzOz0gZGV2dG1wZnMub1xuZHJpdmVycy9iYXNlL01ha2VmaWxlLTEyLW9iai15XHRcdFx0JiM0Mzs9IHBvd2VyL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg5CgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogNTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gaGVyZSBzZWVtcyB0byBiZSBgREVWVE1QRlNgLCB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBtYWtlIHN1cmUgYGRldnRtcGZzX2dldF90cmVlYCBpc24mIzM5O3QgaW5saW5lZCwgYXMgdGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHByZWZlciBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LiBBbmQgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGNoZWNrIGZpcnN0LgoKTGV0IG1lIHNlZSwgJiMzNDtzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlLi4uJiMzNDsgWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCB3YWl0IGEgbWludXRlLCB0aGUgYWRkcmVzcyBpcyB0YWtlbiBieSB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6IGBkZXZ0bXBmc19jb250ZXh0X29wcy5nZXRfdHJlZSA9ICZhbXA7ZGV2dG1wZnNfZ2V0X3RyZWU7YC4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCwgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoYXQmIzM5O3MgZmluZS4gQWx0aG91Z2gsIEkgZGlkIGJyaWVmbHkgY29uc2lkZXIgd2hldGhlciB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlIGZ1bmN0aW9uIEkgY291bGQgdXNlLCBidXQgbm8sIHRoaXMgaXMgdGhlIHJpZ2h0IG9uZSwgdGhlIGNoYW5nZSBpcyByaWdodCBoZXJlLgoKSSYjMzk7dmUgcmUtcmVhZCB0aGUgY29kZSB0byBiZSBjZXJ0YWluOgpgYGBjCkBAIC04MCw2ICYjNDM7ODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJYXRvbWljX2luYygmYW1wO3NiLSZndDtzX2FjdGl2ZSk7CiAJZG93bl93cml0ZSgmYW1wO3NiLSZndDtzX3Vtb3VudCk7CiAJZmMtJmd0O3Jvb3QgPSBkZ2V0KHNiLSZndDtzX3Jvb3QpOwomIzQzOwomIzQzOwlpZiAoZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUpIHsKJiM0MzsJCWludCBlcnIgPSBmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZShmYyk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZHB1dChmYy0mZ3Q7cm9vdCk7CiYjNDM7CQkJZmMtJmd0O3Jvb3QgPSBOVUxMOwomIzQzOwkJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CmBgYApSaWdodCwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHRoZSBjYWxsIHRvIGByZWNvbmZpZ3VyZWAuIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMgd2hlbiBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZSBpcyBtb3VudGVkLCBhbmQgdGhhdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaC4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgIENvbmZpZ3M6IGBERVZUTVBGU2AKKiAgIEZvY3VzU3ltYm9sczogYGRldnRtcGZzX2dldF90cmVlYAoqICAgUmVhc29uaW5nOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZUTVBGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldnRtcGZzX2dldF90cmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVlRNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2dG1wZnNfZ2V0X3RyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTk6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWFhMWY1MjIwOTQ2MmFmMDM5YmQxYjAxMTc2MzQ0YTM1MzYyZWVlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE5OjU1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwppbmRleCBhZWYwZmNjNmFiYTFlLi5mMDc5OGZjMWJjMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwpAQCAtODAsNiAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCWF0b21pY19pbmMoJmFtcDtzYi0mZ3Q7c19hY3RpdmUpOwogCWRvd25fd3JpdGUoJmFtcDtzYi0mZ3Q7c191bW91bnQpOwogCWZjLSZndDtyb290ID0gZGdldChzYi0mZ3Q7c19yb290KTsKJiM0MzsKJiM0MzsJaWYgKGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlKSB7CiYjNDM7CQlpbnQgZXJyID0gZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUoZmMpOwomIzQzOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWRwdXQoZmMtJmd0O3Jvb3QpOwomIzQzOwkJCWZjLSZndDtyb290ID0gTlVMTDsKJiM0MzsJCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZ0bXBmcyBSZWNvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCBpbiBgZHJpdmVycy9iYXNlL2RldnRtcGZzLmNgLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgY2FsbCwgYGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlYCwgd2l0aGluIHRoZSBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MuIFRoZSBjb2RlIG5vdyBjaGVja3MgaWYgYSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIGV4aXN0cyBpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBvcGVyYXRpb24gc3RydWN0dXJlIChgZmMtJmd0O29wc2ApIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGl0IGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nOiBpZiBgcmVjb25maWd1cmVgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBwYXRjaCBjb3JyZWN0bHkgY2xlYW5zIHVwIGJ5IHJlbGVhc2luZyB0aGUgcm9vdCBpbm9kZSAoYGZjLSZndDtyb290YCkgYW5kIGRlYWN0aXZhdGluZyB0aGUgc3VwZXJibG9jayBiZWZvcmUgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlLgoKTG9va2luZyBhdCB0aGUgZGlmZiBkaXJlY3RseSwgdGhlIGNvZGUgc2VlbXMgc291bmQgaW4gaXRzIGJhc2ljIHN0cnVjdHVyZToKCmBgYGMKIAlhdG9taWNfaW5jKCZhbXA7c2ItJmd0O3NfYWN0aXZlKTsKIAlkb3duX3dyaXRlKCZhbXA7c2ItJmd0O3NfdW1vdW50KTsKIAlmYy0mZ3Q7cm9vdCA9IGRnZXQoc2ItJmd0O3Nfcm9vdCk7CiYjNDM7CiYjNDM7CWlmIChmYy0mZ3Q7b3BzLSZndDtyZWNvbmZpZ3VyZSkgewomIzQzOwkJaW50IGVyciA9IGZjLSZndDtvcHMtJmd0O3JlY29uZmlndXJlKGZjKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkcHV0KGZjLSZndDtyb290KTsKJiM0MzsJCQlmYy0mZ3Q7cm9vdCA9IE5VTEw7CiYjNDM7CQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KYGBgCgpUaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgZm9yIHJlY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSBwcmV0dHkgdHlwaWNhbDogdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgbWVtb3J5IGxlYWtzLiBIb3dldmVyLCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIHByb2JsZW1zIHRoYXQgS0FTQU4sIEttZW1sZWFrLCBhbmQgb3RoZXIgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgY2F0Y2ggd2l0aG91dCBhIHByb2JsZW0uCgpCZWNhdXNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLi4uIFllcCwgdGhlIGBlcnJgIHZhcmlhYmxlIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGRpcmVjdGx5IGZyb20gdGhlIHJldHVybiBvZiBgZmMtJmd0O29wcy0mZ3Q7cmVjb25maWd1cmUoZmMpYC4gT2theSwgYWxsIGNsZWFyLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGZ1bmN0aW9uIHRvIGNhbGwgYGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NTo1Ny41NzgxMzYyOTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3NTE1OTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU1OjU3LjU3ODE0MDgwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNzk3MzQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTk6NTU6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xcbmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xcbkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2c2ItXFx1MDAzZXNfYWN0aXZlKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gXFx0ZmMtXFx1MDAzZXJvb3QgPSBkZ2V0KHNiLVxcdTAwM2VzX3Jvb3QpO1xcbitcXG4rXFx0aWYgKGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlKSB7XFxuK1xcdFxcdGludCBlcnIgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZShmYyk7XFxuK1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRwdXQoZmMtXFx1MDAzZXJvb3QpO1xcbitcXHRcXHRcXHRmYy1cXHUwMDNlcm9vdCA9IE5VTEw7XFxuK1xcdFxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTU6NTkuMzA2NzQ3ODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU4MDY1MTM4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZ0bXBmc19nZXRfdHJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkZXZ0bXBmc19nZXRfdHJlZWAgdG8gY2FsbCBgcmVjb25maWd1cmVgIHdoZW4gbW91bnRpbmcgYW4gZXhpc3RpbmcgZGV2dG1wZnMgaW5zdGFuY2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYG1vdW50YCBzeXN0ZW0gY2FsbCBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhYTFmNTIyMDk0NjJhZjAzOWJkMWIwMTE3NjM0NGEzNTM2MmVlZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxOTo1NTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbmluZGV4IGFlZjBmY2M2YWJhMWUuLmYwNzk4ZmMxYmMzNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcbkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdGF0b21pY19pbmMoXHUwMDI2c2ItXHUwMDNlc19hY3RpdmUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gXHRmYy1cdTAwM2Vyb290ID0gZGdldChzYi1cdTAwM2VzX3Jvb3QpO1xuK1xuK1x0aWYgKGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZSkge1xuK1x0XHRpbnQgZXJyID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKTtcbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRwdXQoZmMtXHUwMDNlcm9vdCk7XG4rXHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4rXHRcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU1OjU5LjMwNjc0OTIxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDY0MzQyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AuIEl0IGxvb2tzIGxpa2Ugd2UndmUgaW50cm9kdWNlZCBhIGNoZWNrIGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBhIGNhbGwgdG8gYGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZWAgd2l0aGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBjbGVhciB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gaXRzZWxmLlxuXG5GaXJzdCwgbGV0IG1lIGNvbmZpcm0gdGhhdCBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseS4gYGRldnRtcGZzX2dldF90cmVlYCBpcywgYXMgdGhlIG5hbWUgaW1wbGllcywgdGhlIGBnZXRfdHJlZWAgb3BlcmF0aW9uIGZvciB0aGUgYGRldnRtcGZzYCBmaWxlc3lzdGVtLiBSaWdodC4gYGRldnRtcGZzYCBpcyB0aGF0IHZpcnR1YWwgZmlsZXN5c3RlbSB1c2VkIGZvciB0aGUgYC9kZXZgIGRpcmVjdG9yeS4gT2theSwgY2FuIHVzZXJzcGFjZSBtb3VudCB0aGlzIHRoaW5nPyBZZXAsIGBtb3VudCAtdCBkZXZ0bXBmcyBkZXZ0bXBmcyAvZGV2YCBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBleGFjdGx5IGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgZG9pbmcgYW5kIHdoYXQgdGhpcyBuZXcgYHJlY29uZmlndXJlYCBjYWxsIHNpZ25pZmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgbW91bnRpbmcgb3IgcmVtb3VudGluZyBhIGBkZXZ0bXBmc2AgaW5zdGFuY2UuIFRoaXMgYHJlY29uZmlndXJlYCBmdW5jdGlvbiBtdXN0IGJlIHNvbWUgc29ydCBvZiBpbml0aWFsaXphdGlvbiBvciBhZGp1c3RtZW50IHN0ZXAgdGhhdCB3ZSdyZSBub3cgdHJpZ2dlcmluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBmY2AgYW5kIGl0cyBgb3BzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjA0LjYxMzE4NTQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIyMTIwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2dG1wZnNfZ2V0X3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9NjU9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGludGVybmFsX2ZzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy03NS0vKiBTaW1wbHkgdGFrZSBhIHJlZiBvbiB0aGUgZXhpc3RpbmcgbW91bnQgKi9cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYzo3NjpzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy03Ny17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz00NjA9c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtNDczLVxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9tb25vbGl0aGljO1xcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjQ3NDpcXHRkZXZ0bXBmc19jb250ZXh0X29wcy5nZXRfdHJlZVxcdCAgICAgID0gXFx1MDAyNmRldnRtcGZzX2dldF90cmVlO1xcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTQ3NS1cXHRkZXZ0bXBmc19jb250ZXh0X29wcy5yZWNvbmZpZ3VyZSAgICAgID0gZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjA1LjE5NTQwMTY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Nzg1MTU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZ0bXBmcyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBkZXZ0bXBmc19nZXRfdHJlZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCByaWdodCwgYGRldnRtcGZzX2dldF90cmVlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZGV2dG1wZnMgZmlsZSBzeXN0ZW0uXCIgVGhlIHBhdGNo4oCZcyBjcnVjaWFsIGNoYW5nZSBpbnZvbHZlcyBjYWxsaW5nIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNhbGwuIEJlZm9yZSBmdWxseSBhc3Nlc3NpbmcgdGhlIGNoYW5nZSwgSSB3aWxsIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250ZXh0IHN0cnVjdHVyZSwgYGZjYCwgaXMgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgYGZjLVx1MDAzZW9wc2AgcG9pbnRzIHRvLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBkZXZ0bXBmcyBmaWxlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2Ygc3RydWN0dXJlIGByZWNvbmZpZ3VyZWAgaXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIHB1cnBvc2Ugb2YgdGhpcyByZWNvbmZpZ3VyYXRpb24uIElzIGl0IGFib3V0IGhvdHBsdWcgZXZlbnRzPyBSZXNvdXJjZSBsaW1pdHM/IEl0IGFsbCBkZXBlbmRzIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MDguOTczOTIwMDI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTk3MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldnRtcGZzX2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYz05OT1zdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmMtMTAxLS8qIENhbGwgdGhlIHVuZGVybHlpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHNldCB0byBvdXIgb3BzICovXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM6MTAyOnN0YXRpYyBpbnQgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy0xMDMte1xcbi0tXFxuZHJpdmVycy9iYXNlL2RldnRtcGZzLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZfZnNfdHlwZSA9IHtcXG5kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYy0xMTktXFx0Lm5hbWUgPSBcXFwiZGV2dG1wZnNcXFwiLFxcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jOjEyMDpcXHQuaW5pdF9mc19jb250ZXh0ID0gZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jLTEyMS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjowOS4wMTk1MjA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzE2Mjk3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipEZWNvbnN0cnVjdGluZyBkZXZ0bXBmcyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgIGFuZCBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRhZGF0YSBmb3IgYSBuZXcgYGRldnRtcGZzYCBpbnN0YW5jZS4gSXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCBiZWZvcmUgd2UgY2FuIG1vdW50IGl0LlxuXG5UaGVuLCBJJ2xsIG1vdmUgb24gdG8gYGRldnRtcGZzX2dldF90cmVlYC4gVGhpcyBoYXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY3JlYXRlcyB0aGUgcm9vdCBpbm9kZSBmb3IgdGhlIG1vdW50ZWQgYGRldnRtcGZzYC4gSXQgc2hvdWxkIHRha2UgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUsIGFuZCBsaW5raW5nIHRoYXQgc3RydWN0dXJlIHdpdGggYW55IGFzc29jaWF0ZWQgcGFyYW1ldGVycy4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWwgaW5vZGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAsIHNldHRpbmcgcGVybWlzc2lvbnMsIGFuZCBwcm9iYWJseSBkZWZpbmluZyB0aGUgaW5pdGlhbCBkZXZpY2Ugbm9kZXMgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHRoZSBpbml0IHByb2Nlc3MgbmVlZHMuIEVzc2VudGlhbGx5LCB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiBmaWxlc3lzdGVtIGluc3RhbmNlIGdldHMgcHV0IHRvZ2V0aGVyIG9uIHRoZSBibG9jayBkZXZpY2UgaW4gbWVtb3J5LlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGNvbnRleHQgY3JlYXRlZCBieSBgZGV2dG1wZnNfaW5pdF9mc19jb250ZXh0YCBpcyB0aGVuIHBhc3NlZCB0byBhbmQgdXNlZCBieSBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBtb3VudC4gS25vd2luZyB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGV2dG1wZnNgIGdldHMgZnJvbSBhIGtlcm5lbCBjb21waWxlIG9wdGlvbiB0byBhIHdvcmtpbmcgZmlsZXN5c3RlbSBtb3VudGVkIG9uIGAvZGV2YC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTIuOTUxMTUzODM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaW50ZXJuYWxfZnNfdHlwZSA9IHtcXG4gIDY2OlxcdFxcdC5uYW1lID0gXFxcImRldnRtcGZzXFxcIixcXG4gIDY3OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNcXG4gIDY4OlxcdFxcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXFxuICA2OTpcXHQjZWxzZVxcbiAgNzA6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IHJhbWZzX2luaXRfZnNfY29udGV4dCxcXG4gIDcxOlxcdCNlbmRpZlxcbiAgNzI6XFx0XFx0LmtpbGxfc2IgPSBraWxsX2Fub25fc3VwZXIsXFxuICA3MzpcXHR9O1xcbiAgNzQ6XFx0XFxuICA3NTpcXHQvKiBTaW1wbHkgdGFrZSBhIHJlZiBvbiB0aGUgZXhpc3RpbmcgbW91bnQgKi9cXG4gIDc2OlxcdHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG1udC1cXHUwMDNlbW50X3NiO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZzYi1cXHUwMDNlc19hY3RpdmUpO1xcbiAgODE6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gIDgyOlxcdFxcdGZjLVxcdTAwM2Vyb290ID0gZGdldChzYi1cXHUwMDNlc19yb290KTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0aWYgKGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlKSB7XFxuICA4NTpcXHRcXHRcXHRpbnQgZXJyID0gZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmUoZmMpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuICA4ODpcXHRcXHRcXHRcXHRkcHV0KGZjLVxcdTAwM2Vyb290KTtcXG4gIDg5OlxcdFxcdFxcdFxcdGZjLVxcdTAwM2Vyb290ID0gTlVMTDtcXG4gIDkwOlxcdFxcdFxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4gIDkxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA5MjpcXHRcXHRcXHR9XFxuICA5MzpcXHRcXHR9XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdHJldHVybiAwO1xcbiAgOTY6XFx0fVxcbiAgOTc6XFx0XFxuICA5ODpcXHQvKiBPcHMgYXJlIGZpbGxlZCBpbiBkdXJpbmcgaW5pdCBkZXBlbmRpbmcgb24gdW5kZXJseWluZyBzaG1lbSBvciByYW1mcyB0eXBlICovXFxuICA5OTpcXHRzdGF0aWMgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBkZXZ0bXBmc19jb250ZXh0X29wcyA9IHt9O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBDYWxsIHRoZSB1bmRlcmx5aW5nIGluaXRpYWxpemF0aW9uIGFuZCBzZXQgdG8gb3VyIG9wcyAqL1xcbiAxMDI6XFx0c3RhdGljIGludCBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0aW50IHJldDtcXG4gMTA1OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNcXG4gMTA2OlxcdFxcdHJldCA9IHNobWVtX2luaXRfZnNfY29udGV4dChmYyk7XFxuIDEwNzpcXHQjZWxzZVxcbiAxMDg6XFx0XFx0cmV0ID0gcmFtZnNfaW5pdF9mc19jb250ZXh0KGZjKTtcXG4gMTA5OlxcdCNlbmRpZlxcbiAxMTA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDExMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmRldnRtcGZzX2NvbnRleHRfb3BzO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTE2OlxcdH1cXG4gMTE3OlxcdFxcbiAxMTg6XFx0c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGRldl9mc190eXBlID0ge1xcbiAxMTk6XFx0XFx0Lm5hbWUgPSBcXFwiZGV2dG1wZnNcXFwiLFxcbiAxMjA6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IGRldnRtcGZzX2luaXRfZnNfY29udGV4dCxcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdHN0YXRpYyBpbnQgZGV2dG1wZnNfc3VibWl0X3JlcShzdHJ1Y3QgcmVxICpyZXEsIGNvbnN0IGNoYXIgKnRtcClcXG4gMTI0OlxcdHtcXG4gMTI1OlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cmVxLVxcdTAwM2Vkb25lKTtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXFfbG9jayk7XFxuIDEyODpcXHRcXHRyZXEtXFx1MDAzZW5leHQgPSByZXF1ZXN0cztcXG4gMTI5OlxcdFxcdHJlcXVlc3RzID0gcmVxO1xcbiAxMzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlcV9sb2NrKTtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0d2FrZV91cF9wcm9jZXNzKHRocmVhZCk7XFxuIDEzMzpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZyZXEtXFx1MDAzZWRvbmUpO1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRrZnJlZSh0bXApO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRyZXR1cm4gcmVxLVxcdTAwM2VlcnI7XFxuIDEzODpcXHR9XFxuIDEzOTpcXHRcXG4gMTQwOlxcdGludCBkZXZ0bXBmc19jcmVhdGVfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDE0MTpcXHR7XFxuIDE0MjpcXHRcXHRjb25zdCBjaGFyICp0bXAgPSBOVUxMO1xcbiAxNDM6XFx0XFx0c3RydWN0IHJlcSByZXE7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmICghdGhyZWFkKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHJlcS5tb2RlID0gMDtcXG4gMTQ5OlxcdFxcdHJlcS51aWQgPSBHTE9CQUxfUk9PVF9VSUQ7XFxuIDE1MDpcXHRcXHRyZXEuZ2lkID0gR0xPQkFMX1JPT1RfR0lEO1xcbiAxNTE6XFx0XFx0cmVxLm5hbWUgPSBkZXZpY2VfZ2V0X2Rldm5vZGUoZGV2LCBcXHUwMDI2cmVxLm1vZGUsIFxcdTAwMjZyZXEudWlkLCBcXHUwMDI2cmVxLmdpZCwgXFx1MDAyNnRtcCk7XFxuIDE1MjpcXHRcXHRpZiAoIXJlcS5uYW1lKVxcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGlmIChyZXEubW9kZSA9PSAwKVxcbiAxNTY6XFx0XFx0XFx0cmVxLm1vZGUgPSAwNjAwO1xcbiAxNTc6XFx0XFx0aWYgKGlzX2Jsb2NrZGV2KGRldikpXFxuIDE1ODpcXHRcXHRcXHRyZXEubW9kZSB8PSBTX0lGQkxLO1xcbiAxNTk6XFx0XFx0ZWxzZVxcbiAxNjA6XFx0XFx0XFx0cmVxLm1vZGUgfD0gU19JRkNIUjtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0cmVxLmRldiA9IGRldjtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cmV0dXJuIGRldnRtcGZzX3N1Ym1pdF9yZXEoXFx1MDAyNnJlcSwgdG1wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTIuOTUxMzE5Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4ODI5MTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGRldnRtcGZzIFJlY29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgY2FsbCB0byBgZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKWAgd2l0aGluIGBkZXZ0bXBmc19nZXRfdHJlZWAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgY2FsbGVkIHdoZW4gYGRldnRtcGZzYCBpcyBtb3VudGVkIOKAkyB3aGljaCBoYXBwZW5zIGJvdGggZHVyaW5nIGJvb3QgYW5kLCBjcnVjaWFsbHksIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHdpdGggYG1vdW50IC10IGRldnRtcGZzIC4uLmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gYSB1c2VyICphY3R1YWxseSogdHJpZ2dlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGw/XG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNhbGwgY2hhaW4gdG8gYmUgc3VyZS4gIGBkZXZ0bXBmc19nZXRfdHJlZWAgaXMgdGhlIGBnZXRfdHJlZWAgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGBkZXZ0bXBmc19jb250ZXh0X29wc2AuIFdoZW4gYSB1c2VyIGNhbGxzIGBtb3VudCAtdCBkZXZ0bXBmcyAuLi5gLCB0aGUga2VybmVsIGNhbGxzIGBkZXZ0bXBmc19pbml0X2ZzX2NvbnRleHRgLCB3aGljaCBzZXRzIGBmYy1cdTAwM2VvcHNgIHRvIGBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wc2AuIFRoZW4sIHRoZSBzdGFuZGFyZCBgdmZzX2dldF90cmVlYCBjYWxsIHdpbGwgZXhlY3V0ZSBgZmMtXHUwMDNlb3BzLVx1MDAzZWdldF90cmVlKGZjKWAuIFNvLCB5ZXMsIGBkZXZ0bXBmc19nZXRfdHJlZWAgKmlzKiByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gU28sIGFkZGluZyB0aGlzIGByZWNvbmZpZ3VyZWAgY2FsbCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbkJ1dCwgaGFuZyBvbiwgYGZjLVx1MDAzZW9wc2AgaXMgc2V0IHRvIGBcdTAwMjZkZXZ0bXBmc19jb250ZXh0X29wc2AuICBEb2VzIGBkZXZ0bXBmc19jb250ZXh0X29wc2AgYWN0dWFsbHkgKmRlZmluZSogYSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIHBvaW50ZXI/ICBJIG5lZWQgdG8gY2hlY2sgaG93IGBkZXZ0bXBmc19jb250ZXh0X29wc2AgaXMgc2V0IHVwLiAgU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgd2hldGhlciB0aGlzIG5ldyBgcmVjb25maWd1cmVgIGNhbGwgaXMgYWN0dWFsbHkgZ29pbmcgdG8gZG8gYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjoxOC42Mzk2MTM3NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL2RldnRtcGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdGNvbXBsZXRlKFxcdTAwMjZzZXR1cF9kb25lKTtcXG4gNDUxOlxcdFxcdGlmIChlcnIpXFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTM6XFx0XFx0ZGV2dG1wZnNfd29ya19sb29wKCk7XFxuIDQ1NDpcXHRcXHRyZXR1cm4gMDtcXG4gNDU1OlxcdH1cXG4gNDU2OlxcdFxcbiA0NTc6XFx0LypcXG4gNDU4OlxcdCAqIEdldCB0aGUgdW5kZXJseWluZyAoc2htZW0vcmFtZnMpIGNvbnRleHQgb3BzIHRvIGJ1aWxkIG91cnNcXG4gNDU5OlxcdCAqL1xcbiA0NjA6XFx0c3RhdGljIGludCBkZXZ0bXBmc19jb25maWd1cmVfY29udGV4dCh2b2lkKVxcbiA0NjE6XFx0e1xcbiA0NjI6XFx0XFx0c3RydWN0IGZzX2NvbnRleHQgKmZjO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRmYyA9IGZzX2NvbnRleHRfZm9yX3JlY29uZmlndXJlKG1udC1cXHUwMDNlbW50X3Jvb3QsIG1udC1cXHUwMDNlbW50X3NiLVxcdTAwM2VzX2ZsYWdzLFxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0TVNfUk1UX01BU0spO1xcbiA0NjY6XFx0XFx0aWYgKElTX0VSUihmYykpXFxuIDQ2NzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmYyk7XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdC8qIFNldCB1cCBkZXZ0bXBmc19jb250ZXh0X29wcyBiYXNlZCBvbiB1bmRlcmx5aW5nIHR5cGUgKi9cXG4gNDcwOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLmZyZWVcXHQgICAgICA9IGZjLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWU7XFxuIDQ3MTpcXHRcXHRkZXZ0bXBmc19jb250ZXh0X29wcy5kdXBcXHQgICAgICA9IGZjLVxcdTAwM2VvcHMtXFx1MDAzZWR1cDtcXG4gNDcyOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX3BhcmFtICAgICAgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9wYXJhbTtcXG4gNDczOlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnBhcnNlX21vbm9saXRoaWMgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VwYXJzZV9tb25vbGl0aGljO1xcbiA0NzQ6XFx0XFx0ZGV2dG1wZnNfY29udGV4dF9vcHMuZ2V0X3RyZWVcXHQgICAgICA9IFxcdTAwMjZkZXZ0bXBmc19nZXRfdHJlZTtcXG4gNDc1OlxcdFxcdGRldnRtcGZzX2NvbnRleHRfb3BzLnJlY29uZmlndXJlICAgICAgPSBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0cHV0X2ZzX2NvbnRleHQoZmMpO1xcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0LypcXG4gNDgzOlxcdCAqIENyZWF0ZSBkZXZ0bXBmcyBpbnN0YW5jZSwgZHJpdmVyLWNvcmUgZGV2aWNlcyB3aWxsIGFkZCB0aGVpciBkZXZpY2VcXG4gNDg0OlxcdCAqIG5vZGVzIGhlcmUuXFxuIDQ4NTpcXHQgKi9cXG4gNDg2OlxcdGludCBfX2luaXQgZGV2dG1wZnNfaW5pdCh2b2lkKVxcbiA0ODc6XFx0e1xcbiA0ODg6XFx0XFx0Y2hhciBvcHRzW10gPSBcXFwibW9kZT0wNzU1XFxcIjtcXG4gNDg5OlxcdFxcdGludCBlcnI7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdG1udCA9IHZmc19rZXJuX21vdW50KFxcdTAwMjZpbnRlcm5hbF9mc190eXBlLCAwLCBcXFwiZGV2dG1wZnNcXFwiLCBvcHRzKTtcXG4gNDkyOlxcdFxcdGlmIChJU19FUlIobW50KSkge1xcbiA0OTM6XFx0XFx0XFx0cHJfZXJyKFxcXCJ1bmFibGUgdG8gY3JlYXRlIGRldnRtcGZzICVsZFxcXFxuXFxcIiwgUFRSX0VSUihtbnQpKTtcXG4gNDk0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1udCk7XFxuIDQ5NTpcXHRcXHR9XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdGVyciA9IGRldnRtcGZzX2NvbmZpZ3VyZV9jb250ZXh0KCk7XFxuIDQ5ODpcXHRcXHRpZiAoZXJyKSB7XFxuIDQ5OTpcXHRcXHRcXHRwcl9lcnIoXFxcInVuYWJsZSB0byBjb25maWd1cmUgZGV2dG1wZnMgdHlwZSAlZFxcXFxuXFxcIiwgZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MTguNjM5Njg3NDU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzgxNzIzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBkZXZ0bXBmcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGV2dG1wZnNfY29uZmlndXJlX2NvbnRleHRgIGVzc2VudGlhbGx5IGxpbmtzIHRoZSBgcmVjb25maWd1cmVgIGZ1bmN0aW9uIHBvaW50ZXIuIEl0IHNldHMgYGRldnRtcGZzX2NvbnRleHRfb3BzLnJlY29uZmlndXJlYCB0byB0aGUgdW5kZXJseWluZyBgZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlYCDigJMgd2hpY2ggaXMgZWl0aGVyIGBzaG1lbWAgb3IgYHJhbWZzYCwgSSdkIGFzc3VtZS4gIFRoZXJlZm9yZSwgd2hlbiBgZGV2dG1wZnNfZ2V0X3RyZWVgIGNhbGxzIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgLCBpdCdzIGFjdHVhbGx5IGNhbGxpbmcgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHVuZGVybmVhdGguIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBsaWtlbHkgdG8gZml4IGEgYnVnLCBvciBtYXliZSB0byBhcHBseSBtb3VudCBvcHRpb25zIHRvIGFuIGFscmVhZHkgbW91bnRlZCBkZXZ0bXBmcyBpbnN0YW5jZS5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBJdCdzIHVzZXItcmVhY2hhYmxlLCBwcmltYXJpbHkgdGhyb3VnaCBgbW91bnRgIG9yIHBvdGVudGlhbGx5IGBmc2NvbmZpZ2AsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBleHBvc2VkLiBUaGUgcHJpbWFyeSBmb2N1cyBmb3IgdGVzdGluZyBzaG91bGQgYmUgYGRldnRtcGZzX2dldF90cmVlYC5cblxuSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0RFVlRNUEZTYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIExldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxOTo1NjoyMi45MTc4NjIwMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODk3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZUTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMT1jb25maWcgVUVWRU5UX0hFTFBFUl9QQVRIXFxuLS1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzozMTpjb25maWcgREVWVE1QRlNcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJNYWludGFpbiBhIGRldnRtcGZzIGZpbGVzeXN0ZW0gdG8gbW91bnQgYXQgL2RldlxcXCJcXG4tLVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTQ5LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjUwOmNvbmZpZyBERVZUTVBGU19NT1VOVFxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkF1dG9tb3VudCBkZXZ0bXBmcyBhdCAvZGV2LCBhZnRlciB0aGUga2VybmVsIG1vdW50ZWQgdGhlIHJvb3Rmc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjY1OmNvbmZpZyBERVZUTVBGU19TQUZFXFxuZHJpdmVycy9iYXNlL0tjb25maWctNjYtXFx0Ym9vbCBcXFwiVXNlIG5vc3VpZCxub2V4ZWMgbW91bnQgb3B0aW9ucyBvbiBkZXZ0bXBmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MjIuOTk2NzYyMzA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTY2NTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKk5hdmlnYXRpbmcgdGhlIERldnRtcGZzIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBgREVWVE1QRlNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwaWVjZS4gR290IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwuIE9rYXksIGxldCdzIHRyYWNlIHRoaXMuIGBkZXZ0bXBmc19nZXRfdHJlZWAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgaW50bywgYW5kIHRoYXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jYC4gUGVyZmVjdC4gTm93LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL01ha2VmaWxlYCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGxpbmtlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjI2LjMxMzQxNTM3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MDg0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2dG1wZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQVVYSUxJQVJZX0JVUykgKz0gYXV4aWxpYXJ5Lm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0RFVlRNUEZTKVxcdCs9IGRldnRtcGZzLm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGUtMTItb2JqLXlcXHRcXHRcXHQrPSBwb3dlci9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MjYuMzY0MjI5NTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NzE0MTc1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYERFVlRNUEZTYCwgdGhhdCdzIHRoZSBvbmx5IG9uZSBJIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgZGV2dG1wZnNfZ2V0X3RyZWVgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBtYWtlIHN1cmUgYGRldnRtcGZzX2dldF90cmVlYCBpc24ndCBpbmxpbmVkLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgcHJlZmVyIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQuIEFuZCB0aGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBjaGVjayBmaXJzdC5cblxuTGV0IG1lIHNlZSwgXCJzdGF0aWMgaW50IGRldnRtcGZzX2dldF90cmVlLi4uXCIgWWVzLCBpdCdzIHN0YXRpYy4gQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBhZGRyZXNzIGlzIHRha2VuIGJ5IHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIHN0cnVjdHVyZTogYGRldnRtcGZzX2NvbnRleHRfb3BzLmdldF90cmVlID0gXHUwMDI2ZGV2dG1wZnNfZ2V0X3RyZWU7YC4gVGhhdCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLCBhbmQgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gdGhhdCdzIGZpbmUuIEFsdGhvdWdoLCBJIGRpZCBicmllZmx5IGNvbnNpZGVyIHdoZXRoZXIgdGhlcmUgd2FzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBmdW5jdGlvbiBJIGNvdWxkIHVzZSwgYnV0IG5vLCB0aGlzIGlzIHRoZSByaWdodCBvbmUsIHRoZSBjaGFuZ2UgaXMgcmlnaHQgaGVyZS5cblxuSSd2ZSByZS1yZWFkIHRoZSBjb2RlIHRvIGJlIGNlcnRhaW46XG5gYGBjXG5AQCAtODAsNiArODAsMTggQEAgc3RhdGljIGludCBkZXZ0bXBmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRhdG9taWNfaW5jKFx1MDAyNnNiLVx1MDAzZXNfYWN0aXZlKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2c2ItXHUwMDNlc191bW91bnQpO1xuIFx0ZmMtXHUwMDNlcm9vdCA9IGRnZXQoc2ItXHUwMDNlc19yb290KTtcbitcbitcdGlmIChmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUpIHtcbitcdFx0aW50IGVyciA9IGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZShmYyk7XG4rXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkcHV0KGZjLVx1MDAzZXJvb3QpO1xuK1x0XHRcdGZjLVx1MDAzZXJvb3QgPSBOVUxMO1xuK1x0XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG5gYGBcblJpZ2h0LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhlIGNhbGwgdG8gYHJlY29uZmlndXJlYC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucyB3aGVuIGFuIGV4aXN0aW5nIGRldnRtcGZzIGluc3RhbmNlIGlzIG1vdW50ZWQsIGFuZCB0aGF0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGl0IGFzIHN1Y2guXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgQ29uZmlnczogYERFVlRNUEZTYFxuKiAgIEZvY3VzU3ltYm9sczogYGRldnRtcGZzX2dldF90cmVlYFxuKiAgIFJlYXNvbmluZzogVGhpcyBwYXRjaCBtb2RpZmllcyBgZGV2dG1wZnNfZ2V0X3RyZWVgIHRvIGNhbGwgYHJlY29uZmlndXJlYCB3aGVuIG1vdW50aW5nIGFuIGV4aXN0aW5nIGRldnRtcGZzIGluc3RhbmNlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtb3VudGAgc3lzdGVtIGNhbGwgYW5kIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg5LCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjM1LjAzNTY0OTg4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjA4MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldnRtcGZzX2dldF90cmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRldnRtcGZzX2dldF90cmVlYCB0byBjYWxsIGByZWNvbmZpZ3VyZWAgd2hlbiBtb3VudGluZyBhbiBleGlzdGluZyBkZXZ0bXBmcyBpbnN0YW5jZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbW91bnRgIHN5c3RlbSBjYWxsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgaGFuZGxpbmcgbW91bnQgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTEzMjY2ODQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQwMDIxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTE0MDA5Njg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MzkyNzM3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZGV2dG1wZnNfZ2V0X3RyZWVgIGZ1bmN0aW9uIHRvIGNhbGwgYGZjLVxcdTAwM2VvcHMtXFx1MDAzZXJlY29uZmlndXJlYCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIHJldHVybmVkIGJ5IGl0LiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHJlY29uZmlndXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWFhMWY1MjIwOTQ2MmFmMDM5YmQxYjAxMTc2MzQ0YTM1MzYyZWVlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE5OjU1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuaW5kZXggYWVmMGZjYzZhYmExZS4uZjA3OThmYzFiYzM0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY1xuQEAgLTgwLDYgKzgwLDE4IEBAIHN0YXRpYyBpbnQgZGV2dG1wZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0YXRvbWljX2luYyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnNiLVx1MDAzZXNfdW1vdW50KTtcbiBcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4rXG4rXHRpZiAoZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKSB7XG4rXHRcdGludCBlcnIgPSBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpO1xuK1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZHB1dChmYy1cdTAwM2Vyb290KTtcbitcdFx0XHRmYy1cdTAwM2Vyb290ID0gTlVMTDtcbitcdFx0XHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTk6NTY6MzUuMTE0MDEwOTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzkyNDk3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2dG1wZnMgUmVjb25maWd1cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGljaCBtb2RpZmllcyBgZGV2dG1wZnNfZ2V0X3RyZWVgIGluIGBkcml2ZXJzL2Jhc2UvZGV2dG1wZnMuY2AsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGEgbmV3IGNhbGwsIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmVgLCB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnRpbmcgcHJvY2Vzcy4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiBhIGByZWNvbmZpZ3VyZWAgZnVuY3Rpb24gZXhpc3RzIGluIHRoZSBmaWxlc3lzdGVtJ3Mgb3BlcmF0aW9uIHN0cnVjdHVyZSAoYGZjLVx1MDAzZW9wc2ApIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGl0IGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nOiBpZiBgcmVjb25maWd1cmVgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBwYXRjaCBjb3JyZWN0bHkgY2xlYW5zIHVwIGJ5IHJlbGVhc2luZyB0aGUgcm9vdCBpbm9kZSAoYGZjLVx1MDAzZXJvb3RgKSBhbmQgZGVhY3RpdmF0aW5nIHRoZSBzdXBlcmJsb2NrIGJlZm9yZSByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgZGlyZWN0bHksIHRoZSBjb2RlIHNlZW1zIHNvdW5kIGluIGl0cyBiYXNpYyBzdHJ1Y3R1cmU6XG5cbmBgYGNcbiBcdGF0b21pY19pbmMoXHUwMDI2c2ItXHUwMDNlc19hY3RpdmUpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gXHRmYy1cdTAwM2Vyb290ID0gZGdldChzYi1cdTAwM2VzX3Jvb3QpO1xuK1xuK1x0aWYgKGZjLVx1MDAzZW9wcy1cdTAwM2VyZWNvbmZpZ3VyZSkge1xuK1x0XHRpbnQgZXJyID0gZmMtXHUwMDNlb3BzLVx1MDAzZXJlY29uZmlndXJlKGZjKTtcbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRwdXQoZmMtXHUwMDNlcm9vdCk7XG4rXHRcdFx0ZmMtXHUwMDNlcm9vdCA9IE5VTEw7XG4rXHRcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5UaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgZm9yIHJlY29uZmlndXJhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHByZXR0eSB0eXBpY2FsOiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBtZW1vcnkgbGVha3MuIEhvd2V2ZXIsIHRoZXNlIGFyZSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiwgS21lbWxlYWssIGFuZCBvdGhlciBtZW1vcnkgc2FmZXR5IHRvb2xzIHNob3VsZCBjYXRjaCB3aXRob3V0IGEgcHJvYmxlbS5cblxuQmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guLi4gWWVwLCB0aGUgYGVycmAgdmFyaWFibGUgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSB0aGUgcmV0dXJuIG9mIGBmYy1cdTAwM2VvcHMtXHUwMDNlcmVjb25maWd1cmUoZmMpYC4gT2theSwgYWxsIGNsZWFyLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE5OjU2OjQyLjc1MzI2Mzk0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBkZXZ0bXBmc19nZXRfdHJlZWAgZnVuY3Rpb24gdG8gY2FsbCBgZmMtXFx1MDAzZW9wcy1cXHUwMDNlcmVjb25maWd1cmVgIGlmIGl0IGlzIGRlZmluZWQsIGFuZCBoYW5kbGVzIGFueSBlcnJvcnMgcmV0dXJuZWQgYnkgaXQuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgcmVjb25maWd1cmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGRldnRtcGZzX2dldF90cmVlYCBmdW5jdGlvbiB0byBjYWxsIGBmYy1cXHUwMDNlb3BzLVxcdTAwM2VyZWNvbmZpZ3VyZWAgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIGhhbmRsZXMgYW55IGVycm9ycyByZXR1cm5lZCBieSBpdC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCByZWNvbmZpZ3VyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcjv4h[1] Phase: Succeeded StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 19:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 19:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2] Phase: Succeeded StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 19:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 19:57:10 +0000 UTC FinishedAt: 2026-08-23 19:57:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcjv4h/series-workflowcjv4h-convert-artifact-895204509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 19:57:20 +0000 UTC FinishedAt: 2026-08-23 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 19:57:20 +0000 UTC FinishedAt: 2026-08-23 20:13:39 +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:*993550c0-2bf2-4fac-9426-72f153b86531,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-workflowcjv4h/series-workflowcjv4h-convert-artifact-895204509/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": "7d9a1bbe-0b36-449f-9ee0-1b51d45c6712", "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-workflowcjv4h/series-workflowcjv4h-build-action-907029971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 19:57:20 +0000 UTC FinishedAt: 2026-08-23 20:13:29 +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:*993550c0-2bf2-4fac-9426-72f153b86531,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-workflowcjv4h/series-workflowcjv4h-convert-artifact-895204509/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": "7d9a1bbe-0b36-449f-9ee0-1b51d45c6712", "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-workflowcjv4h/series-workflowcjv4h-build-action-907029971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 20:13:39 +0000 UTC FinishedAt: 2026-08-23 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 20:13:39 +0000 UTC FinishedAt: 2026-08-23 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 20:13:39 +0000 UTC FinishedAt: 2026-08-23 20:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 20:13:39 +0000 UTC FinishedAt: 2026-08-23 20:13:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowcjv4h/series-workflowcjv4h-convert-artifact-2339331448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 20:13:49 +0000 UTC FinishedAt: 2026-08-23 20:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 20:13:49 +0000 UTC FinishedAt: 2026-08-23 20:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9a1bbe-0b36-449f-9ee0-1b51d45c6712,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-workflowcjv4h/series-workflowcjv4h-build-action-907029971/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-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 20:15:54 +0000 UTC FinishedAt: 2026-08-23 20:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 20:15:54 +0000 UTC FinishedAt: 2026-08-23 20:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 20:15:54 +0000 UTC FinishedAt: 2026-08-23 20:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 20:15:54 +0000 UTC FinishedAt: 2026-08-23 20:32:07 +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:*993550c0-2bf2-4fac-9426-72f153b86531,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-workflowcjv4h/series-workflowcjv4h-convert-artifact-2339331448/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": "90351410-157a-4c7d-b552-3be5dbd1b450", "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-workflowcjv4h/series-workflowcjv4h-build-action-353960548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 20:15:54 +0000 UTC FinishedAt: 2026-08-23 20:31:57 +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:*993550c0-2bf2-4fac-9426-72f153b86531,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-workflowcjv4h/series-workflowcjv4h-convert-artifact-2339331448/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": "90351410-157a-4c7d-b552-3be5dbd1b450", "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-workflowcjv4h/series-workflowcjv4h-build-action-353960548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 20:32:07 +0000 UTC FinishedAt: 2026-08-23 20:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 20:32:07 +0000 UTC FinishedAt: 2026-08-23 20:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 20:32:07 +0000 UTC FinishedAt: 2026-08-23 20:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 20:32:07 +0000 UTC FinishedAt: 2026-08-23 20:34:00 +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:*90351410-157a-4c7d-b552-3be5dbd1b450,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-workflowcjv4h/series-workflowcjv4h-build-action-353960548/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-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"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:*7d9a1bbe-0b36-449f-9ee0-1b51d45c6712,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90351410-157a-4c7d-b552-3be5dbd1b450,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-workflowcjv4h/series-workflowcjv4h-build-action-907029971/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-workflowcjv4h/series-workflowcjv4h-build-action-353960548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 20:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 20:34:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"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-workflowcjv4h/series-workflowcjv4h-convert-artifact-3192032465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 20:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 20:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 20:34:10 +0000 UTC FinishedAt: 2026-08-23 20:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 20:34:20 +0000 UTC FinishedAt: 2026-08-23 23:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjv4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["devtmpfs_get_tree"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVTMPFS"],"series_id":"ff4d171a-9be4-4114-8ad3-3d2afdc34537","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 20:34:20 +0000 UTC FinishedAt: 2026-08-23 23:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9a1bbe-0b36-449f-9ee0-1b51d45c6712,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90351410-157a-4c7d-b552-3be5dbd1b450,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-workflowcjv4h/series-workflowcjv4h-build-action-907029971/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-workflowcjv4h/series-workflowcjv4h-build-action-353960548/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-workflowcjv4h/series-workflowcjv4h-convert-artifact-3192032465/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,}