Name: series-workflowk8chc Phase: Succeeded StartedAt: 2026-08-22 11:02:01 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[0] Phase: Succeeded StartedAt: 2026-08-22 11:02:01 +0000 UTC FinishedAt: 2026-08-22 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 11:02:01 +0000 UTC FinishedAt: 2026-08-22 11:56:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "68d8c6532659168430e489bb659c0d41de7d75fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "68d8c6532659168430e489bb659c0d41de7d75fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "0725f52f-711e-4358-89d5-510d555030bf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "net_devmem_get_binding", "net_devmem_bind_dmabuf", "net_devmem_bind_dmabuf_to_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhlZDc2MWQ2M2Y4YzU2YTUzMDA4NWNiOGQ5ODQ3ZDM4NGJjNjljNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMTo1MzoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5mNDAzODMwYWY2NWY0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTE2Miw2ICYjNDM7MTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XG4mIzQzO1x0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWQ3NjFkNjNmOGM1NmE1MzAwODVjYjhkOTg0N2QzODRiYzY5YzYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTE6NTM6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmY0MDM4MzBhZjY1ZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMTYyLDYgJiM0MzsxMTYyLDEwIEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCQliaW5kaW5nID0gTlVMTDsKIAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KJiM0MzsJCQkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewomIzQzOwkJCQkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQkJCX0KIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAodW5saWtlbHkobXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1NQTElDRV9QQUdFUykgJmFtcDsmYW1wOyBzaXplKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXB2NC90Y3AuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCB0aGlzIGNoZWNrIHdpdGhpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb246CgpgYGBjCiAJCQkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewogCQkJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgcmVqZWN0aW5nIGFueXRoaW5nICpvdGhlciogdGhhbiB6ZXJvLWNvcHkgKGBNU0dfWkVST0NPUFlgKSB3aXRoaW4gdGhpcyBmdW5jdGlvbiBub3cuJiMzNDsgVGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IgaXMgcHJldHR5IGNsZWFyOyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHNheWluZyAmIzM0O3RoaXMgaXNuJiMzOTt0IHN1cHBvcnRlZC4mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGU/IFdoYXQmIzM5O3MgdGhlIGludGVuZGVkIGVmZmVjdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhpcyBjaGFuZ2UgZnVsbHksIHNvIEkgd2lsbCBub3cgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGxpbmVzIGFyb3VuZCBsaW5lIDExNjIgaW4gYG5ldC9pcHY0L3RjcC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHRcdGVyciA9IC1FTk9CVUZTO1xuMTE1MTpcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE1MjpcdFx0XHRcdH1cbjExNTM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNTQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE1NTpcdFx0XHRcdGVsc2VcbjExNTY6XHRcdFx0XHRcdHVhcmdfdG9fbXNnemModWFyZyktXHUwMDNlemVyb2NvcHkgPSAwO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbjExNTk6XHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuMTE2MDpcdFx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuMTE2MTpcdFx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuMTE2MjpcdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbjExNjM6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2NDpcdFx0XHRcdFx0fVxuMTE2NTpcdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuMTE2NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjExNjc6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2ODpcdFx0XHRcdFx0fVxuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcdFx0fVxuMTE3MTpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE3MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNzM6XHRcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4xMTc0Olx0XHR9XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuMTE3NzpcdFx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuMTE3ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE3OTpcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgU2VuZG1zZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNoZWNrOiBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgIHdpdGhpbiB0aGF0IGV4aXN0aW5nIGJsb2NrIHRoYXQgbG9va3MgYXQgYHNvY2tjX2VycmAgYW5kIGBzb2NrYy5kbWFidWZfaWRgLiBUaGlzIGluc3RhbnRseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBkZXZtZW0gVENQYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCBpbiBUQ1AuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0IGFib3V0IGl0LiBJdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBwYXRoLiBUaGlzIGtpbmQgb2YgbW9kaWZpY2F0aW9uIGlzIHByZWNpc2VseSB3aGF0IEkgbmVlZCB0byBjb25zaWRlciBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGFsdGVyaW5nIGhvdyBUQ1Agc2VuZG1zZyBiZWhhdmVzLCBhbmQgdGhhdCAqYWx3YXlzKiB3YXJyYW50cyBhIGNsb3NlciBsb29rLgoKVGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgZGV2bWVtIFRDUGAuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdCB0byBiZSBhY3RpdmUuIFRoYXQgd2lsbCBpbmZvcm0gaG93IEkgc2V0IHVwIGFueSB0ZXN0IGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2dldF9iaW5kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTM3OT12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxubmV0L2NvcmUvZGV2bWVtLmM6Mzg0OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2Rldm1lbS5jLTM4NS1cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE1NT1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG5uZXQvY29yZS9kZXZtZW0uaC0yMzAte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTE1OC1cdFx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XG5uZXQvaXB2NC90Y3AuYzoxMTU5Olx0XHRcdFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTYwLVx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHF1ZXN0aW9uLCBidXQgdGhlIGFuc3dlciBjb3VsZCBsaWUgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVzZSB0aGUgY29uZmlnIHN5c3RlbSB0byBzZWFyY2ggZm9yIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBgZmluZGAgdG8gcGlucG9pbnQgYW55IGRpcmVjdCBtZW50aW9ucyBvZiBpdCwgdGhlbiB0cmFjZSBpdCBiYWNrIHRvIHRoZSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiByZXNwb25zaWJsZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBvcHRpb24uIElzIGl0IGEgbW9kdWxlLCBvciBidWlsdC1pbj8gV2hhdCBhcmUgdGhlIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBjb3VsZCBsZWFkIGRvd24gYSByYWJiaXQgaG9sZSBkZXBlbmRpbmcgb24gd2hhdCB0aGF0IGNvbmZpZyBvcHRpb24gZG9lcyBleGFjdGx5LCBidXQgYXQgdGhlIHZlcnkgbGVhc3QsIG15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IGluaXRpYWwgS2NvbmZpZyBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg0LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODU6ICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg2LSAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9NDA1PWluY29taW5nIGRhdGEgYW5kIHZhbGlkYXRlcyBpdCBhcyBzdWNoLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBsYXVuY2hcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjQwNjpuY2Rldm1lbSBvbiB0aGUgc2VydmVyIGJ5OjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTQwNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM1LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM2OiAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzctICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTc2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTc3Olx0XHRcdGlmIChjdHgtXHUwMDNlZGV2bWVtX29ubHkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU3OC1cdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NDQzPWRybV9wYWdlbWFwX21pZ3JhdGVfcmVtb3RlX3RvX2xvY2FsKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NDktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NTA6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ1MS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz00NzQ9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzgtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDc5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTA2PXN0cnVjdCBtaWdyYXRlX3JhbmdlX2xvYyB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTA5LVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxMDpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MTEtfTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2MjE6XHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjIyLVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRwYWdlbWFwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTQ9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTExNjpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMgPSBkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2VvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE3LVx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjE2PXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLVx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMyLVx0c3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xNDAyPXZvaWQgZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDAzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MDQ6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQwNS1cdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIHNpemVfdCBzaXplLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz03ODM9c3RhdGljIGludCB4ZV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtODA1LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgZHBhZ2VtYXBfZGV2bWVtX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy04MDctXHQuZGV2bWVtX3JlbGVhc2UgPSB4ZV9zdm1fZGV2bWVtX3JlbGVhc2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTk3MT1zdGF0aWMgYm9vbCB4ZV9zdm1fcmFuZ2VfaXNfdmFsaWQoc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTcyLVx0XHRcdFx0ICBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5NzM6XHRcdFx0XHQgIGJvb2wgZGV2bWVtX29ubHksXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzgtXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2V0aWxlX2ludmFsaWRhdGVkKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5Nzk6XHRcdCghZGV2bWVtX29ubHkgfHwgeGVfc3ZtX3JhbmdlX2hhc19wYWdlbWFwKHJhbmdlLCBkcGFnZW1hcCkpKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05ODAtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xMDUwPXN0YXRpYyBpbnQgeGVfZHJtX3BhZ2VtYXBfcG9wdWxhdGVfbW0oc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTA5Ni1cdFx0ZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoXHUwMDI2Ym8tXHUwMDNlZGV2bWVtX2FsbG9jYXRpb24sIGRldiwgbW0sXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTA5NzpcdFx0XHRcdFx0XHUwMDI2ZHBhZ2VtYXBfZGV2bWVtX29wcywgZHBhZ2VtYXAsIGVuZCAtIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEwOTgtXHRcdFx0XHRcdHByZV9taWdyYXRlX2ZlbmNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTIwNj1zdGF0aWMgaW50IF9feGVfc3ZtX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYSAqdm1hLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE1LVx0XHQuY2hlY2tfcGFnZXNfdGhyZXNob2xkID0gZGV2bWVtX3Bvc3NpYmxlID8gU1pfNjRLIDogMCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjE2Olx0XHQuZGV2bWVtX29ubHkgPSBuZWVkX3ZyYW0gXHUwMDI2XHUwMDI2IGRldm1lbV9wb3NzaWJsZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE3LVx0XHQudGltZXNsaWNlX21zID0gbmVlZF92cmFtIFx1MDAyNlx1MDAyNiBkZXZtZW1fcG9zc2libGUgP1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjI1LVx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBndF90b190aWxlKGd0KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjI2Olx0aW50IG1pZ3JhdGVfdHJ5X2NvdW50ID0gY3R4LmRldm1lbV9vbmx5ID8gMyA6IDE7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTIyNy1cdGt0aW1lX3Qgc3RhcnQgPSB4ZV9ndF9zdGF0c19rdGltZV9nZXQoKSwgYmluZF9zdGFydCwgZ2V0X3BhZ2VzX3N0YXJ0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjQwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNDE6XHRkcGFnZW1hcCA9IGN0eC5kZXZtZW1fb25seSA/IHhlX3RpbGVfbG9jYWxfcGFnZW1hcCh0aWxlKSA6XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI0Mi1cdFx0eGVfdm1hX3Jlc29sdmVfcGFnZW1hcCh2bWEsIHRpbGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTE6XHRpZiAoY3R4LmRldm1lbV9vbmx5IFx1MDAyNlx1MDAyNiAhcmFuZ2UtXHUwMDNlYmFzZS5wYWdlcy5mbGFncy5taWdyYXRlX2Rldm1lbSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUyLVx0XHRyZXR1cm4gLUVBQ0NFUztcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTQ6XHRpZiAoeGVfc3ZtX3JhbmdlX2lzX3ZhbGlkKHJhbmdlLCB0aWxlLCBjdHguZGV2bWVtX29ubHksIGRwYWdlbWFwKSkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTUtXHRcdHhlX3N2bV9yYW5nZV92YWxpZF9mYXVsdF9jb3VudF9zdGF0c19pbmNyKGd0LCByYW5nZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzAtXHRcdGlmIChlcnIpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjcxOlx0XHRcdGlmIChtaWdyYXRlX3RyeV9jb3VudCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3Mi1cdFx0XHRcdGRybV9kYmcoXHUwMDI2dm0tXHUwMDNleGUtXHUwMDNlZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjc2LVx0XHRcdFx0LypcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjc3Olx0XHRcdFx0ICogSW4gdGhlIGRldm1lbS1vbmx5IGNhc2UsIG1peGVkIG1hcHBpbmdzIG1heVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzgtXHRcdFx0XHQgKiBiZSBmb3VuZC4gVGhlIGdldF9wYWdlcyBmdW5jdGlvbiB3aWxsIGZpeFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjgxLVx0XHRcdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTI4MjpcdFx0XHRcdGlmIChjdHguZGV2bWVtX29ubHkpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI4My1cdFx0XHRcdFx0Z290byBnZXRfcGFnZXM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEzMDItXHRcdGN0eC50aW1lc2xpY2VfbXMgXHUwMDNjXHUwMDNjPSAxO1x0LyogRG91YmxlIHRpbWVzbGljZSBpZiB3ZSBoYXZlIHRvIHJldHJ5ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTMwMzpcdFx0aWYgKG1pZ3JhdGVfdHJ5X2NvdW50IFx1MDAzZSAwIHx8ICFjdHguZGV2bWVtX29ubHkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMzA0LVx0XHRcdGRybV9kYmcoXHUwMDI2dm0tXHUwMDNleGUtXHUwMDNlZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTIwPWludCB4ZV9wYWdlbWFwX2NhY2hlX2NyZWF0ZShzdHJ1Y3QgeGVfdGlsZSAqdGlsZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzNi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2Rldm1lbV9vcGVuKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5Mzgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTcyPXN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5OTgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTk5OTpcdGRwYWdlbWFwID0geGVfZGV2bWVtX29wZW4odG9feGVfZGV2aWNlKGRybSksIHJlZ2lvbl9pbnN0YW5jZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMjAwMC1cdGRybV9kZXZfZXhpdChpZHgpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0yMDI9c3RydWN0IGRybV9ncHVzdm0ge1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yMzYtICogQGRldm1lbV9wb3NzaWJsZTogcG9zc2libGUgdG8gdXNlIGRldmljZSBtZW1vcnlcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyMzc6ICogQGRldm1lbV9vbmx5OiB1c2Ugb25seSBkZXZpY2UgbWVtb3J5XG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMjM4LSAqIEBhbGxvd19taXhlZDogQWxsb3cgbWl4ZWQgbWFwcGluZ3MgaW4gZ2V0IHBhZ2VzLiBNaXhpbmcgYmV0d2VlbiBzeXN0ZW0gYW5kXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTI0ND1zdHJ1Y3QgZHJtX2dwdXN2bV9jdHgge1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTAtXHR1bnNpZ25lZCBpbnQgZGV2bWVtX3Bvc3NpYmxlIDoxO1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjI1MTpcdHVuc2lnbmVkIGludCBkZXZtZW1fb25seSA6MTtcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTItXHR1bnNpZ25lZCBpbnQgYWxsb3dfbWl4ZWQgOjE7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0xNzU9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbTtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE3Ny0vKipcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTc4OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIC0gT3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIEdQVSBTVk0gZGV2aWNlIG1lbW9yeVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0xNzktICpcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE4NC0gKi9cbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTg1OnN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIHtcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTg2LVx0LyoqXG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zMTc9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSB7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zMjAtXHRzdHJ1Y3QgY29tcGxldGlvbiBkZXRhY2hlZDtcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzIxOlx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcztcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzIyLVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oPTM1MT12b2lkIGRybV9wYWdlbWFwX2Rldm1lbV9pbml0KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTItXHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNTM6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTQtXHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBzaXplX3Qgc2l6ZSxcbi0tXG5saWIvdGVzdF9obW0uYz01OD1NT0RVTEVfUEFSTV9ERVNDKHNwbV9hZGRyX2RldjEsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjAtXG5saWIvdGVzdF9obW0uYzo2MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBkbWlycm9yX2Rldm1lbV9vcHM7XG5saWIvdGVzdF9obW0uYy02Mi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgZG1pcnJvcl9taW5fb3BzO1xuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU5Ni1cdGRldm1lbS1cdTAwM2VwYWdlbWFwLm5yX3JhbmdlID0gMTtcbmxpYi90ZXN0X2htbS5jOjU5NzpcdGRldm1lbS1cdTAwM2VwYWdlbWFwLm9wcyA9IFx1MDAyNmRtaXJyb3JfZGV2bWVtX29wcztcbmxpYi90ZXN0X2htbS5jLTU5OC1cdGRldm1lbS1cdTAwM2VwYWdlbWFwLm93bmVyID0gbWRldmljZTtcbi0tXG5saWIvdGVzdF9obW0uYz0xNzMyPXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2bWVtX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqaGVhZCwgc3RydWN0IGZvbGlvICp0YWlsKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3NjUtXG5saWIvdGVzdF9obW0uYzoxNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRtaXJyb3JfZGV2bWVtX29wcyA9IHtcbmxpYi90ZXN0X2htbS5jLTE3NjctXHQuZm9saW9fZnJlZVx0PSBkbWlycm9yX2Rldm1lbV9mcmVlLFxuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19ORVRfREVWTUVNKSAmIzQzOz0gZGV2bWVtLm9cbm5ldC9jb3JlL01ha2VmaWxlLTUzLW9iai0kKENPTkZJR19ERUJVR19ORVQpICYjNDM7PSBsb2NrX2RlYnVnLm9cbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0yOT1zdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyhuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgWEFfRkxBR1NfQUxMT0MxKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTMwLVxubmV0L2NvcmUvZGV2bWVtLmM6MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzO1xubmV0L2NvcmUvZGV2bWVtLmMtMzItXG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE0NC1cdFx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxubmV0L2NvcmUvZGV2bWVtLmM6MTQ1Olx0XHRcdC5tcF9vcHNcdFx0PSBcdTAwMjZkbWFidWZfZGV2bWVtX29wcyxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0Ni1cdFx0fTtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xNTY9aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTYxLVx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxubmV0L2NvcmUvZGV2bWVtLmM6MTYyOlx0XHQubXBfb3BzXHRcdD0gXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXG5uZXQvY29yZS9kZXZtZW0uYy0xNjMtXHR9O1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTUyND1zdGF0aWMgdm9pZCBtcF9kbWFidWZfZGV2bWVtX3VuaW5zdGFsbCh2b2lkICptcF9wcml2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTU0NC1cbm5ldC9jb3JlL2Rldm1lbS5jOjU0NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9wcm92aWRlcl9vcHMgZG1hYnVmX2Rldm1lbV9vcHMgPSB7XG5uZXQvY29yZS9kZXZtZW0uYy01NDYtXHQuaW5pdFx0XHRcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk9NTM9ZGVmIHJlcXVpcmVfZGV2bWVtKGNmZywgcnhfcGFnZV9zaXplPVJYX1BBR0VfU0laRV9ERUZBVUxUKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk6NTQ6ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Byb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbiYjMzk7dCBzdXBwb3J0ZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5LTU1LSAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIFBST0JFX1JYX1BBR0VfU0laRVM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEltcGxlbWVudGF0aW9uIHdpdGggYENPTkZJR19ORVRfREVWTUVNYCBDb25zaWRlcmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIGNsZWFyOiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBzcGFya3MgYSBzcGVjaWZpYyBsaW5lIG9mIGlucXVpcnkuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpbXBsaWNhdGlvbiB0aGF0IGNvbmZpZyBoYXMgb24gdGhlIHRjcCBzZW5kIHBhdGgsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYXBwaW5nLiBTaW5jZSB0aGUga2V5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIHZlcnkgc3BlY2lmaWM6IEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIG1pZ2h0IGJlIHVzZWQgaW4gdGhhdCBmdW5jdGlvbiBvciBpdHMgY2FsbGVlcywgcHJvYmFibHkgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IGFjY2Vzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbmV0X2Rldm1lbWAgaGFzIGJlZW4gc2FmZWx5IGhhbmRsZWQsIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2Ugc2VjdXJpdHkgcmlza3MuIEl0JiMzOTtzIGEgcXVpY2sgdGFjdGljYWwgYXNzZXNzbWVudDsgbGV0JiMzOTtzIGdldCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdD0xMz11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfREVMQVlFREFDS0xPQ0tFRCAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIsdGNwX2RlbGFja190aW1lclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0OjE0OnVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORyAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9wdXNoLHRjcF9zZW5kbXNnX2xvY2tlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0LTE1LXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BGUk9NWkVST1dJTkRPV0FEViAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zZWxlY3Rfd2luZG93LHRjcF90cmFuc21pdC1za2Jcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jPTMyMz1zdGF0aWMgaW50IHNpd190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBwYWdlICoqcGFnZSwgaW50IG9mZnNldCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0Ni1cdFx0bG9ja19zb2NrKHNrKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM6MzQ3Olx0XHRydiA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBieXRlcyk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0OC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0zNjc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL25ldC90Y3AuaDozNjg6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMzY5LWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmg9Mjg5PVRSQUNFX0VWRU5UKHRjcF9yZXRyYW5zbWl0X3N5bmFjayxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaC0zMzQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaDozMzU6VFJBQ0VfRVZFTlQodGNwX3NlbmRtc2dfbG9ja2VkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM2LVx0VFBfUFJPVE8oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxua2VybmVsL2JwZi9idGYuYz02NjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjczMC1cdHsgXCYjMzQ7dGNwX3NlbmRfcmVzZXRcJiMzNDssIDB4MTEgfSxcbmtlcm5lbC9icGYvYnRmLmM6NjczMTpcdHsgXCYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkXCYjMzQ7LCAweDEwMCB9LFxua2VybmVsL2JwZi9idGYuYy02NzMyLVx0LyogdGVncmFfYXBiX2RtYSAqL1xuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz0xMDYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xMDg1LVx0LnJlYWRfc2tiXHQgICA9IHRjcF9yZWFkX3NrYixcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDg2Olx0LnNlbmRtc2dfbG9ja2VkICAgID0gdGNwX3NlbmRtc2dfbG9ja2VkLFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXHQucGVla19sZW5cdCAgID0gdGNwX3BlZWtfbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xubmV0L2lwdjQvdGNwLmMtMTExNS1cbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3AuYy0xMTE3LXtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMjQ0LVxubmV0L2lwdjQvdGNwLmM6MTI0NTpcdFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcbm5ldC9pcHY0L3RjcC5jLTEyNDYtXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ0Ny19XG5uZXQvaXB2NC90Y3AuYzoxNDQ4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zZW5kbXNnX2xvY2tlZCk7XG5uZXQvaXB2NC90Y3AuYy0xNDQ5LVxubmV0L2lwdjQvdGNwLmM9MTQ1MD1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NTQtXHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6MTQ1NTpcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcbm5ldC9pcHY0L3RjcC5jLTE0NTYtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xMjItXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTIzOlx0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2l6ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTI0LVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODEtXHQuc3BsaWNlX2VvZlx0ICAgPSBpbmV0X3NwbGljZV9lb2YsXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY4MjpcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjgzLVx0LnNwbGljZV9yZWFkXHQgICA9IHRjcF9zcGxpY2VfcmVhZCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTE5NC1cbm5ldC90bHMvdGxzX21haW4uYzoxOTU6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBzaXplKTtcbm5ldC90bHMvdGxzX21haW4uYy0xOTYtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTI5OT1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9wa3RfaW5mbyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNDAtXHRcdCAqICYjMzk7TVNHX1pFUk9DT1BZJiMzOTsgZmxhZyBoYW5kbGluZyBoZXJlIGlzIGJhc2VkIG9uIHRoZSBzYW1lIGZsYWdcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzozNDE6XHRcdCAqIGhhbmRsaW5nIGZyb20gJiMzOTt0Y3Bfc2VuZG1zZ19sb2NrZWQoKSYjMzk7LlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTM0Mi1cdFx0ICovXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz0yMTI9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMS1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzoyMzI6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yMzMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYz0xMTc9c3RhdGljIGJvb2wgYnBmX3Rlc3RfZGVsYXkoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE4Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg4OlNFQyhcJiMzNDtmZW50cnkvdGNwX3NlbmRtc2dfbG9ja2VkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE5MC1cdCAgICAgc2l6ZV90IHNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIFNlbmQgUGF0aCB3aXRoIFplcm9Db3B5IGFuZCBEZXZtZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBUQ1Agc2VuZGluZyBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgYnkgYHRjcF9zZW5kbXNnYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzZXQuIFJpZ2h0LCBhbmQgdGhpcyBwYXRoIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgZW5hYmxlZC4KCk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiB3YXMgdG8gZm9jdXMgb24gYHRjcF9zZW5kbXNnX2xvY2tlZGAgb3IgYHRjcF9zZW5kbXNnYC4gQnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IGxpc3RpbmcgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmlzKiBkZWZpbml0ZWx5IGEgaG90IHBhdGguIE9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGlzIGNoYW5nZSByZWxhdGVzIHRvLiBUaGUgcHJvbXB0IHN1Z2dlc3RzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHVzYWdlLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gVGhpcyBpcyB3aGVyZSBgbmV0X2Rldm1lbWAgY29tZXMgaW50byBwbGF5LiBTaW5jZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGhvdC1wYXRoIGFuZCB0aGUgY2hhbmdlIGlzICphYm91dCogZGV2bWVtLCBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZGV2bWVtIGZ1bmN0aW9uIEkgY2FuIGZvY3VzIG9uPyBMZXQmIzM5O3Mgc2VlLi4uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGlubGluZSwgZGVwZW5kaW5nIG9uIGBDT05GSUdfTkVUX0RFVk1FTWAuIExldCBtZSBjaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9Mzc5PXZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0zODMtXG5uZXQvY29yZS9kZXZtZW0uYzozODQ6c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uaC0xNTctc3RydWN0IG5ldF9pb3YgKlxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIyOTpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGlzIHNwZWNpZmljIGNvZGUgbW9kaWZpY2F0aW9uLiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZmVlbHMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyByZWFsbHkgc3BlY2lmaWMgdG8gdGhlIGBkZXZtZW1gIHBhdGggd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4sIGFuZCB1bmxpa2UgYSByZWFsbHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBhY3R1YWxseSBub24temVyby4gVGhhdCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIHRyeSBhbmQgZ3VpZGUgdGhlIGZ1enplci4gCgpXYWl0IGEgbWludXRlLCBJIHNlZSBpdCBub3cuIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyBhY3R1YWxseSBjYWxsZWQgKmltbWVkaWF0ZWx5IGJlZm9yZSogdGhlIGNvZGUgdGhhdCB3YXMgY2hhbmdlZC4gTGV0IG1lIHB1bGwgdGhhdCBibG9jayB1cCBhZ2FpbjoKCmBgYGMKCQkJCWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkKSB7CgkJCQkJYmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7CgkJCQkJaWYgKElTX0VSUihiaW5kaW5nKSkgewoJCQkJCQllcnIgPSBQVFJfRVJSKGJpbmRpbmcpOwoJCQkJCQliaW5kaW5nID0gTlVMTDsKCQkJCQkJZ290byBvdXRfZXJyOwoJCQkJCX0KCQkJCQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7CgkJCQkJCWVyciA9IC1FT1BOT1RTVVBQOwoJCQkJCQlnb3RvIG91dF9lcnI7CgkJCQkJfQoJCQkJfQpgYGAKCk9rYXksIHNvIHRoZSBwbGFuIGlzIGZvcm1pbmcuIEZvY3VzaW5nIHRoZSBmdXp6ZXIgb24gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIHNob3VsZCBiZSBhIGRpcmVjdCB3YXkgdG8gaGl0IHRoaXMgYWx0ZXJlZCBjb2RlIHBhdGguIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgd2lsbCBiZSB3aGF0IGlzIGludm9sdmVkIHdpdGggYHNvY2tjLmRtYWJ1Zl9pZGAgYmVpbmcgbm9uLXplcm8uCgpBbm90aGVyIGF2ZW51ZSBjb3VsZCBiZSB0byBmb2N1cyBvbiBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgb3Igd2hhdGV2ZXIgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgc2V0dXAgb2YgdGhlIGRtYWJ1ZiBiaW5kaW5nLiBJIHNob3VsZCBjaGVjayBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGZvciBhbnkgb3RoZXIgZGV2bWVtIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0xMjY9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxubmV0L2NvcmUvZGV2bWVtLmM6MTU2OmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTE4OD1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmMtMTkwLVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD05ND1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uaC05Ni1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNzg6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVx0XHRcdFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk0LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1Olx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYobmV0ZGV2LCBOVUxMLCBkbWFfZGV2LCBETUFfRlJPTV9ERVZJQ0UsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTYtXHRcdFx0XHRcdCBkbWFidWZfZmQsIG5pb3Zfc2hpZnQsIHByaXYsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVx0Zm9yX2VhY2hfc2V0X2JpdChyeHFfaWR4LCByeHFfYml0bWFwLCBuZXRkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XHRcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVx0XHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNzE9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzc6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihiaW5kX2Rldixcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzOC1cdFx0XHRcdFx0IGJpbmRfZGV2ICE9IG5ldGRldiA/IG5ldGRldiA6IE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORVRfREVWTUVNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHR3byBrZXkgc3ltYm9scyBoZXJlLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYC4gVGhleSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCB0aGUgb2J2aW91cyBjb25maWcgYXNzb2NpYXRlZCB3aXRoIHRoZW0gaXMgYE5FVF9ERVZNRU1gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IEkmIzM5O20gYSBiaXQgY3VyaW91czogSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5PyBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2NvcmUvS2NvbmZpZ2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgTkVUX0RFVk1FTWAgc3ltYm9sLiBTZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIG9yIG90aGVyIGNsdWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIG51Z2dldHMgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTkVUX0RFVk1FTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfREVWTUVNYCBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9LY29uZmlnYCBhcyBhIGBkZWZfYm9vbCB5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3Igc29tZXRoaW5nIGxpa2UgZGV2aWNlIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gQnV0LCBJIGRvbiYjMzk7dCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBsaWtlIG1lbW9yeSBtYXBwaW5nLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY5IG9mIGBuZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIGEgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpdCBjYXJyaWVzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgZGVmYXVsdCBzdGF0ZSwgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBhbmQgbWF5YmUgcG9pbnRlcnMgdG8gcmVsYXRlZCBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZyBvcHRpb25zIG1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBtYWludGFpbmVycyBjb25zaWRlcmVkIHdoZW4gc2V0dGluZyBpdCBhcyBhIGRlZmF1bHQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IHRoZSAmIzM0O3doeSYjMzQ7IGFuZCBub3QganVzdCB0aGUgJiMzNDt3aGF0JiMzNDsgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE5FVF9SRURJUkVDVFxuICA2MTpcdFx0Ym9vbFxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBTS0JfREVDUllQVEVEXG4gIDY0Olx0XHRib29sXG4gIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqRGVwZW5kZW5jaWVzIGFuZCBEZWZhdWx0czogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBsZWFucyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBiYXNpYy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGJ1aWxkLCBvciBpZiBpdCByZXF1aXJlcyBleHBsaWNpdCBlbmFibGluZy4gSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgcGhhbnRvbSBpc3N1ZXMgaWYgaXQmIzM5O3MganVzdCBzb21ldGhpbmcgSSBvdmVybG9va2VkIGluIG15IHNldHVwLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIEkgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSBpdCBpbiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYSBCb29sZWFuIENvbmZpZ3VyYXRpb24gVmFyaWFibGUqKgoKT2theSwgc28gYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2xlYW4uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZHJpdmVyLCBhbmQgaXQmIzM5O3MgYXJvdW5kIGxpbmUgMjE1IHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgaXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdG8gZW5hYmxlL2Rpc2FibGUgaXQuIExldCYjMzk7cyBnZXQgdG8gdGhhdCBLY29uZmlnIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgR0VORVJJQ19BUkNIX1RPUE9MT0dZXG4gMjI2Olx0XHRib29sXG4gMjI3Olx0XHRoZWxwXG4gMjI4Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBhcmNoaXRlY3R1cmVzIGNvbW1vbiB0b3BvbG9neSBjb2RlOiBlLmcuLCBwYXJzaW5nXG4gMjI5Olx0XHQgIENQVSBjYXBhY2l0eSBpbmZvcm1hdGlvbiBmcm9tIERULCB1c2FnZSBvZiBzdWNoIGluZm9ybWF0aW9uIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIERNQSBTaGFyZWQgQnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERNQV9TSEFSRURfQlVGRkVSYCBkZWZhdWx0cyB0byAmIzM5O24mIzM5OywgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG1vdmUsIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gZW5zdXJlIHdlIGNhbiBjb250cm9sIHRoYXQgc2V0dGluZy4KCldhaXQgYSBzZWNvbmQuLi5JIGp1c3Qgc3BvdHRlZCB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0IGl0ICpkZXBlbmRzKiBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IGNoYW5nZXMgdGhpbmdzISBJdCBtZWFucyBgTkVUX0RFVk1FTWAgd2lsbCAqb25seSogYmUgZW5hYmxlZCBpZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGFsc28gZW5hYmxlZC4gU28sIHllYWgsIGFic29sdXRlbHkuIEFkZGluZyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsIHRvIGVuc3VyZSBgTkVUX0RFVk1FTWAgY2FuIGV2ZW4gYmUgdXNlZC4gVGhhdCBkZXBlbmRlbmN5IGlzIGEgc2lnbmlmaWNhbnQgZmFjdG9yIGluIGRyaXZpbmcgb3VyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBib3RoIGNhbiBiZSB1c2VkLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYFBBR0VfUE9PTGAgYW5kIHNlZSB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSwgYnV0IHRoaXMgZ2l2ZXMgbWUgYSBzb2xpZCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgNDkxIG1pZ2h0IGhvbGQgdGhlIGtleS4gSSBkb24mIzM5O3QgcmVjYWxsIHRoZSBleGFjdCBjb250ZXh0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIGJ1dCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhIHNwZWNpZmljIGJsb2NrIG9mIGxvZ2ljIHBlcnRhaW5pbmcgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgbG9jYXRlZCB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCB0aGVpciBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhlIEtjb25maWcgZmlsZSBhbmQgbWFwIG91dCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODU6XHRcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXG4gNDg2Olx0XG4gNDg3Olx0Y29uZmlnIE5FVF9ERVZMSU5LXG4gNDg4Olx0XHRib29sXG4gNDg5Olx0XHRkZWZhdWx0IG5cbiA0OTA6XHRcbiA0OTE6XHRjb25maWcgUEFHRV9QT09MXG4gNDkyOlx0XHRib29sXG4gNDkzOlx0XG4gNDk0Olx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xuIDQ5NTpcdFx0ZGVmYXVsdCBuXG4gNDk2Olx0XHRib29sIFwmIzM0O1BhZ2UgcG9vbCBzdGF0c1wmIzM0O1xuIDQ5NzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiA0OTg6XHRcdGhlbHBcbiA0OTk6XHRcdCAgRW5hYmxlIHBhZ2UgcG9vbCBzdGF0aXN0aWNzIHRvIHRyYWNrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgcmVjeWNsaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gYFBBR0VfUE9PTGAgaXMgYSBib29sZWFuLCBhbmQgZGVmYXVsdHMgdG8gJiMzOTtuJiMzOTsuIEkga25vdyBkcml2ZXJzIHR5cGljYWxseSBzZWxlY3QgaXQuIFRvIHBsYXkgaXQgc2FmZSwgSSBpbml0aWFsbHkgdGhvdWdodCBvZiBqdXN0IGFkZGluZyBpdCB0byBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgKm1hbnkqIGRyaXZlcnMsIGp1c3QgbGlzdGluZyBpdCBtaWdodCBiZSBhIG1vcmUgcm9idXN0IGFwcHJvYWNoLgoKVGhlbiBJIHJlYWxpemVkIGEgY3J1Y2lhbCBwb2ludDogYFBBR0VfUE9PTGAgbGFja3MgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGEgdXNlciBjYW4mIzM5O3QgZXhwbGljaXRseSBlbmFibGUgaXQgdGhyb3VnaCBgbWVudWNvbmZpZ2AuIEl0ICpoYXMqIHRvIGJlIHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBTbywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgc29tZXRoaW5nIHdlIGNhbiBjb250cm9sIGVuYWJsZXMgaXQsIG9yIGlmIGxpc3RpbmcgaXQgd2lsbCBzdWZmaWNlIChzeXprYWxsZXIgY2FuIGhhbmRsZSBjb25maWdzIHdpdGhvdXQgcHJvbXB0cyBpZiB0aGV5JiMzOTtyZSBpbmRpcmVjdGx5IHNlbGVjdGVkLCBidXQgbGlzdGluZyB0aGUgc2VsZWN0aW5nIGNvbmZpZywgb3IgbGlzdGluZyBpdCBpdHNlbGYsIHdvdWxkIGJlIHByZWZlcmFibGUpLgoKQWhhISBgUEFHRV9QT09MYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNQUM4MDIxMWAgYW5kIG51bWVyb3VzIEV0aGVybmV0IGRyaXZlcnMuIEludGVyZXN0aW5nLiBTbywgbGV0JiMzOTtzIGFkZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCB0byBvdXIgbGlzdC4KCldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNoZWNrIGBETUFfU0hBUkVEX0JVRkZFUmAuIEl0IGFsc28gc2VlbXMgdG8gbGFjayBhIGRpcmVjdCBwcm9tcHQuIE9rYXksIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYGRyaXZlcnMvYmFzZS9LY29uZmlnYC4gWXVwLCBgY29uZmlnIERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGBib29sYCB3aXRoIGEgYGRlZmF1bHQgbmAgYW5kIG5vIGRpcmVjdCBwcm9tcHQuIEl0JiMzOTtzICpkZWZpbml0ZWx5KiBzZWxlY3RlZCBieSBvdGhlciBjb25maWdzLiBOb3csIHdoYXQgc2VsZWN0cyBgRE1BX1NIQVJFRF9CVUZGRVJgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6JiMzOTtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM5OyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnPTY9Y29uZmlnIERSTV9BQ0NFTF9IQUJBTkFMQUJTXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXHRzZWxlY3QgSFdNT05cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NTI9Y29uZmlnIERNQUJVRl9LVU5JVF9URVNUXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXHRkZXBlbmRzIG9uIEtVTklUXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTYwPW1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTMtXHRzZWxlY3QgSTJDXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXHRzZWxlY3QgU1lOQ19GSUxFXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz01MT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU4LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTE5PWNvbmZpZyBWSURFT0JVRjJfVk1BTExPQ1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yNC1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXHRzZWxlY3QgSU9NTVVfSU9WQVxuLS1cbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVx0ZGVwZW5kcyBvbiBSUE1TR1xuZHJpdmVycy9taXNjL0tjb25maWc6MzA1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXHRzZWxlY3QgUUNPTV9TQ01cbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG5kcml2ZXJzL3RlZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE5MzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cdGRlcGVuZHMgb24gWEVOX0dOVERFViBcdTAwMjZcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVx0aGVscFxuLS1cbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXG4tLVxuc2FtcGxlcy9LY29uZmlnLTIzMy1cdHNlbGVjdCBWRklPX01ERVZcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcbi0tXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cdGRlcGVuZHMgb24gSEFTX0RNQVxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlndXJlIHRoZXNlIGtlcm5lbCBvcHRpb25zIHVzaW5nIHN5emthbGxlciYjMzk7cyBgc3l6LWtjb25mYCB0b29sLiBgRE1BQlVGX0hFQVBTYCBvciBgU1lOQ19GSUxFYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGNob2ljZXMsIHRoZXkgc2VlbSBlYXN5IHRvIGRlYWwgd2l0aCwgYnV0IGhvbGQgb24sIGBORVRfREVWTUVNYCBsb29rcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBgZGVmX2Jvb2wgeWAgc28gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGl0ICpkZXBlbmRzIG9uKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgY29tcGxleC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgaWYgSSBqdXN0IGxpc3QgYE5FVF9ERVZNRU1gLCBgc3l6LWtjb25mYCBzaG91bGQgYXV0b21hdGljYWxseSBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZW5hYmxlIGRlcGVuZGVuY2llcyB3aGVuIGl0IGNhbi4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkby4gSG93ZXZlciwgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgZG9uJiMzOTt0IGhhdmUgcHJvbXB0cy4gVGhhdCBtZWFucyBgc3l6LWtjb25mYCBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgdGhlbSBkaXJlY3RseSB1bmxlc3MgdGhleSYjMzk7cmUgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFdlJiMzOTtyZSBnZXR0aW5nIGludG8gYSBwb3RlbnRpYWwgZWRnZSBjYXNlIHRoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHBsYXkgaXQgc2FmZSBmb3Igbm93LiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgd2lsbCBqdXN0IGxpc3QgYE5FVF9ERVZNRU1gLCBgRE1BQlVGX0hFQVBTYCwgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IHNlZW1zIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gYnJldml0eSBhbmQgY292ZXJpbmcgdGhlIGJhc2VzLgoKV2FpdCBhIHNlY29uZCwgd2hhdCAqZG9lcyogc2VsZWN0IGBQQUdFX1BPT0xgPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIHRoYXQgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBzZWxlY3Rpb24gY2hhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGxlYXZpbmcgYW55dGhpbmcgaW1wb3J0YW50IG91dC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBjYW4mIzM5O3QgaWdub3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM3Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ4Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnOjU0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cdHNlbGVjdCBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiA2NEJJVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6ODE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVx0c2VsZWN0IEJST0FEQ09NX1BIWSBpZiBBUkNIX0JDTTI4MzVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6Mjc2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXHRzZWxlY3QgRklYRURfUEhZXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVx0aW1wbHkgUEFHRV9QT09MX1NUQVRTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo5NTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cdHNlbGVjdCBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6MTU0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6MTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcJiMzNDsgaWYgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NTk9Y29uZmlnIE1WTkVUQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjU6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctOS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cdHNlbGVjdCBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMzpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cdHNlbGVjdCBDUkMzMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cdHNlbGVjdCBQQ1NfWFBDU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cdHNlbGVjdCBGV19MT0FERVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cdHNlbGVjdCBNRkRfU1lTQ09OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIHByb3ZpZGVkIGNsdWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nLCBpdCBzZWVtcyBsaWtlIGBQQUdFX1BPT0xgIGlzIGEgZ2l2ZW4uIEkga25vdyBgQlBGX1NZU0NBTExgIHVzdWFsbHkgdHJpZ2dlcnMgaXQgaWYgYE5FVGAgaXMgZW5hYmxlZCwgYW5kIGBWRVRIYCBhbHNvIGluY2x1ZGVzIGl0LiBTaW5jZSBgQlBGX1NZU0NBTExgIGlzIGEgY29tbW9uIGRlZmF1bHQgaW4gc3l6a2FsbGVyLCBgUEFHRV9QT09MYCBpcyBhbG1vc3QgY2VydGFpbmx5IGVuYWJsZWQuCgpOb3csIHdoYXQgZWxzZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBETUFfU0hBUkVEX0JVRkZFUmAuIEkga25vdyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgRE1BQlVGX0hFQVBTYCwgYFNZTkNfRklMRWAsIGBEUk1gLCBgVVNCX0ZfRlNgLCBgVkZJT19NREVWYCwgZXRjLiBUbyBiZSBvbiB0aGUgc2FmZSBzaWRlLCBsZXQmIzM5O3MgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBvZiB0aGUgcHJvbXB0LCBJIG11c3QgbGlzdCB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIG91dHB1dCBhcnJheSB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LiBTbyBmYXIsIHRoZSBsaXN0IGlzIGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSBpZiBgTkVUX0RFVk1FTWAgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGhlcmUsIGFuZCBub3QgYWRkIGFueXRoaW5nIHJlZHVuZGFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIFRDUC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbnRyb2R1Y2VzIGEgYHNvY2tjLmRtYWJ1Zl9pZGAgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gV2hlcmUgaXMgYHNvY2tjLmRtYWJ1Zl9pZGAgc2V0PyBJIHNob3VsZCB0cmFjayB0aGlzIHZhbHVlIGRvd24gYW5kIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHNvY2tjLmRtYWJ1Zl9pZGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYWJ1Zl9pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xMDM9dGhlIG5ldGxpbmsgQVBJOjpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjAtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjE6XHRkbWFidWZfaWQgPSByc3AtXHUwMDNlaWQ7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjItXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjMtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjQ6VGhlIG5ldGxpbmsgQVBJIHJldHVybnMgYSBkbWFidWZfaWQ6IGEgdW5pcXVlIElEIHRoYXQgcmVmZXJzIHRvIHRoaXMgZG1hYnVmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjUtdGhhdCBoYXMgYmVlbiBib3VuZC5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xNTY9U2V0dXAmIzM5OywgYW5kIHRoZSBrZXJuZWwgc2lnbmFscyBzdWNoIHRvIHRoZSB1c2VyIHZpYSB0aGUgU0NNX0RFVk1FTV8qIGNtc2dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjgtXHRcdFx0XHQgKlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY5Olx0XHRcdFx0ICogZG1hYnVmX2Ntc2ctXHUwMDNlZG1hYnVmX2lkIGlzIHRoZSBkbWFidWYgdGhlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNzAtXHRcdFx0XHQgKiBmcmFnIGxhbmRlZCBvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xOTg9QXBwbGljYXRpb25zIG1heSByZWNlaXZlIDIgY21zZ3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjAwLS0gU0NNX0RFVk1FTV9ETUFCVUY6IHRoaXMgaW5kaWNhdGVzIHRoZSBmcmFnbWVudCBsYW5kZWQgaW4gdGhlIGRtYWJ1ZiBpbmRpY2F0ZWRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMTogIGJ5IGRtYWJ1Zl9pZC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yNTA9VGhlIHVzZXIgbXVzdCBiaW5kIGEgVFggZG1hYnVmIHRvIGEgZ2l2ZW4gTklDIHVzaW5nIHRoZSBuZXRsaW5rIEFQSTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjYzLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY0OiAgICAgICAgdHhfZG1hYnVmX2lkID0gcnNwLVx1MDAzZWlkO1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY3OlRoZSBuZXRsaW5rIEFQSSByZXR1cm5zIGEgZG1hYnVmX2lkOiBhIHVuaXF1ZSBJRCB0aGF0IHJlZmVycyB0byB0aGlzIGRtYWJ1ZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY4LXRoYXQgaGFzIGJlZW4gYm91bmQuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MzA1PVRoZSBleGFtcGxlIGJlbG93IHNlbmRzIDEwMjQgYnl0ZXMgZnJvbSBvZmZzZXQgMTAwIGludG8gdGhlIGRtYWJ1ZiwgYW5kIDIwNDhcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMwNjpmcm9tIG9mZnNldCAyMDAwIGludG8gdGhlIGRtYWJ1Zi4gVGhlIGRtYWJ1ZiB0byBzZW5kIGZyb20gaXMgdHhfZG1hYnVmX2lkOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMwNy1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMjgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDozMjk6ICAgICAgICooKF9fdTMyICopQ01TR19EQVRBKGNtc2cpKSA9IHR4X2RtYWJ1Zl9pZDtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMzMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MTMzPXN0YXRpYyB2b2lkIGRtYWJ1Zl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTE0Ny1cdFx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2dmdwdS1cdTAwM2VvYmplY3RfaWRyLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjE0ODpcdFx0XHRcdFx0ICAgZG1hYnVmX29iai1cdTAwM2VkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTE0OS1cdFx0XHRcdGtmcmVlKGRtYWJ1Zl9vYmotXHUwMDNlaW5mbyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jPTM3Mj1waWNrX2RtYWJ1Zl9ieV9udW0oc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHUzMiBpZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMzc5LVx0XHRkbWFidWZfb2JqID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmosIGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjM4MDpcdFx0aWYgKGRtYWJ1Zl9vYmotXHUwMDNlZG1hYnVmX2lkID09IGlkKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMzgxLVx0XHRcdHJldCA9IGRtYWJ1Zl9vYmo7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jPTQwND1pbnQgaW50ZWxfdmdwdV9xdWVyeV9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdm9pZCAqYXJncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDI4LVx0XHR1cGRhdGVfZmJfaW5mbyhnZnhfcGxhbmVfaW5mbywgXHUwMDI2ZmJfaW5mbyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDI5Olx0XHRnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQgPSBkbWFidWZfb2JqLVx1MDAzZWRtYWJ1Zl9pZDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00MzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ0MS1cdFx0XHQgICAgdmdwdS1cdTAwM2VpZCwga3JlZl9yZWFkKFx1MDAyNmRtYWJ1Zl9vYmotXHUwMDNla3JlZiksXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDQyOlx0XHRcdCAgICBnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ0My1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZncHUtXHUwMDNlZG1hYnVmX2xvY2spO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00NzEtXHRcdGdvdG8gb3V0X2ZyZWVfaW5mbztcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo0NzI6XHRnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQgPSByZXQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDczOlx0ZG1hYnVmX29iai1cdTAwM2VkbWFidWZfaWQgPSByZXQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDc0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDAtLyogVG8gYXNzb2NpYXRlIGFuIGV4cG9zZWQgZG1hYnVmIHdpdGggdGhlIGRtYWJ1Zl9vYmogKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1MDE6aW50IGludGVsX3ZncHVfZ2V0X2RtYWJ1ZihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MTEtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTEyOlx0ZG1hYnVmX29iaiA9IHBpY2tfZG1hYnVmX2J5X251bSh2Z3B1LCBkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxMy1cdGlmIChkbWFidWZfb2JqID09IE5VTEwpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1MTQ6XHRcdGd2dF92Z3B1X2VycihcJiMzNDtpbnZhbGlkIGRtYWJ1ZiBpZDolZFxcblwmIzM0OywgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MTUtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTU1Mi1cdFx0ICAgIFwmIzM0OyAgICAgICAgZmlsZSBjb3VudDogJWxkLCBHRU0gcmVmOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1NTM6XHRcdCAgICB2Z3B1LVx1MDAzZWlkLCBkbWFidWZfb2JqLVx1MDAzZWRtYWJ1Zl9pZCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01NTQtXHRcdCAgICBrcmVmX3JlYWQoXHUwMDI2ZG1hYnVmX29iai1cdTAwM2VrcmVmKSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9NTcyPXZvaWQgaW50ZWxfdmdwdV9kbWFidWZfY2xlYW51cChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTgxLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjU4MjpcdFx0aWRyX3JlbW92ZShcdTAwMjZ2Z3B1LVx1MDAzZW9iamVjdF9pZHIsIGRtYWJ1Zl9vYmotXHUwMDNlZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODMtXHRcdGxpc3RfZGVsKHBvcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5oPTU5PXN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmoge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaC02MS1cdHN0cnVjdCBpbnRlbF92Z3B1X2ZiX2luZm8gKmluZm87XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg6NjI6XHRfX3UzMiBkbWFidWZfaWQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNjMtXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaD02OD1pbnQgaW50ZWxfdmdwdV9xdWVyeV9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdm9pZCAqYXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg6Njk6aW50IGludGVsX3ZncHVfZ2V0X2RtYWJ1ZihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNzAtdm9pZCBpbnRlbF92Z3B1X2RtYWJ1Zl9jbGVhbnVwKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYz0xMjU5PXN0YXRpYyBsb25nIGludGVsX3ZncHVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZmlvX2RldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xMzY0LVx0XHRtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzNjU6XHRcdFx0XHQgICAgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNjYtXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkbWFidWYsICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNzctXHR9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0RFVklDRV9HRVRfR0ZYX0RNQUJVRikge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM6MTM3ODpcdFx0X191MzIgZG1hYnVmX2lkO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM3OS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODA6XHRcdGlmIChnZXRfdXNlcihkbWFidWZfaWQsIChfX3UzMiBfX3VzZXIgKilhcmcpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM4MS1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODI6XHRcdHJldHVybiBpbnRlbF92Z3B1X2dldF9kbWFidWYodmdwdSwgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzODMtXHR9XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTE5MjQ9c3RydWN0IHNvY2tjbV9jb29raWUge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0xOTI5LVx0dTMyIHByaW9yaXR5O1xuaW5jbHVkZS9uZXQvc29jay5oOjE5MzA6XHR1MzIgZG1hYnVmX2lkO1xuaW5jbHVkZS9uZXQvc29jay5oLTE5MzEtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmg9MjM9c3RydWN0IGRtYWJ1Zl9jbXNnIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMjktXHRcdFx0XHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaDozMDpcdF9fdTMyICBkbWFidWZfaWQ7XHQvKiBkbWFidWYgaWQgdGhpcyBmcmFnIGJlbG9uZ3MgdG8uICovXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMzEtXHRfX3UzMiBmbGFncztcdFx0LyogQ3VycmVudGx5IHVudXNlZC4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODExPXN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04MzEtXHRcdF9fdTMyIHJlZ2lvbl9pbmRleDtcdC8qIHJlZ2lvbiBpbmRleCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4MzI6XHRcdF9fdTMyIGRtYWJ1Zl9pZDtcdC8qIGRtYS1idWYgaWQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMzLVx0fTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg0Mi0gKiBSZXR1cm4gYSBuZXcgZG1hLWJ1ZiBmaWxlIGRlc2NyaXB0b3IgZm9yIGFuIGV4cG9zZWQgZ3Vlc3QgZnJhbWVidWZmZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODQzOiAqIGRlc2NyaWJlZCBieSB0aGUgcHJvdmlkZWQgZG1hYnVmX2lkLiBUaGUgZG1hYnVmX2lkIGlzIHJldHVybmVkIGZyb20gVkZJT19cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODQ0LSAqIERFVklDRV9RVUVSWV9HRlhfUExBTkUgYXMgYSB0b2tlbiBvZiB0aGUgZXhwb3NlZCBndWVzdCBmcmFtZWJ1ZmZlci5cbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0zODQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGV2bWVtLmM6Mzg1Olx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG5uZXQvY29yZS9kZXZtZW0uYy0zODYte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM5MS1cbm5ldC9jb3JlL2Rldm1lbS5jOjM5MjpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYoZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTM5My1cdGlmICghYmluZGluZyB8fCAhYmluZGluZy1cdTAwM2V0eF92ZWMpIHtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTU2Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjI4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMTE1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2NvcmUvc29jay5jOjMxMTY6XHRcdHNvY2tjLVx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xubmV0L2NvcmUvc29jay5jLTMxMTctXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTE0Ny1cdFx0XHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxubmV0L2lwdjQvdGNwLmM6MTE0ODpcdFx0XHRcdFx0XHQgICAgIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNDktXHRcdFx0aWYgKCF1YXJnKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTE1Ny1cbm5ldC9pcHY0L3RjcC5jOjExNTg6XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTc1LVxubmV0L2lwdjQvdGNwLmM6MTE3NjpcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3AuYy0xMTc3LVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI1MDM9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI2MDItXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XG5uZXQvaXB2NC90Y3AuYzoyNjAzOlx0XHRcdFx0ZG1hYnVmX2Ntc2cuZG1hYnVmX2lkID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChuaW92KTtcbm5ldC9pcHY0L3RjcC5jLTI2MDQtXG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTEwMT1zdGF0aWMgaW50IG1ib2Noc19xdWVyeV9nZnhfcGxhbmUoc3RydWN0IG1kZXZfc3RhdGUgKm1kZXZfc3RhdGUsXG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTEzNC1cdFx0cGxhbmUtXHUwMDNlc2l6ZVx0ICAgICAgPSAwO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTEzNTpcdFx0cGxhbmUtXHUwMDNlZG1hYnVmX2lkICAgICAgPSAwO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTEzNi1cdFx0Z290byBkb25lO1xuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTEtXHRwbGFuZS1cdTAwM2VzaXplXHQgICAgICA9IGRtYWJ1Zi1cdTAwM2Vtb2RlLnNpemU7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMTUyOlx0cGxhbmUtXHUwMDNlZG1hYnVmX2lkICAgICAgPSBkbWFidWYtXHUwMDNlaWQ7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTUzLVxuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTUtXHRpZiAocGxhbmUtXHUwMDNlZHJtX3BsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSBcdTAwMjZcdTAwMjZcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTY6XHQgICAgbWRldl9zdGF0ZS1cdTAwM2VhY3RpdmVfaWQgIT0gcGxhbmUtXHUwMDNlZG1hYnVmX2lkKSB7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTU3LVx0XHRkZXZfZGJnKG1kZXZfc3RhdGUtXHUwMDNldmRldi5kZXYsIFwmIzM0OyVzOiBwcmltYXJ5OiAlZCA9XHUwMDNlICVkXFxuXCYjMzQ7LFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1ODpcdFx0XHRfX2Z1bmNfXywgbWRldl9zdGF0ZS1cdTAwM2VhY3RpdmVfaWQsIHBsYW5lLVx1MDAzZWRtYWJ1Zl9pZCk7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMTU5Olx0XHRtZGV2X3N0YXRlLVx1MDAzZWFjdGl2ZV9pZCA9IHBsYW5lLVx1MDAzZWRtYWJ1Zl9pZDtcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNjAtXHR9XG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTE4OD1zdGF0aWMgbG9uZyBtYm9jaHNfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNjYtXHR7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMjY3Olx0XHR1MzIgZG1hYnVmX2lkO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI2OC1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjEyNjk6XHRcdGlmIChnZXRfdXNlcihkbWFidWZfaWQsIChfX3UzMiBfX3VzZXIgKilhcmcpKVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI3MC1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNzEtXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMjcyOlx0XHRyZXR1cm4gbWJvY2hzX2dldF9nZnhfZG1hYnVmKG1kZXZfc3RhdGUsIGRtYWJ1Zl9pZCk7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMjczLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTAxPXN0YXRpYyB1bnNpZ25lZCBpbnQgaWZpbmRleDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDM6c3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0LXN0YXRpYyBpbnQgd2FpdHRpbWVfbXMgPSA1MDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz02OTg9c3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMxLVx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2dvdCBkbWFidWYgaWQ9JWRcXG5cJiMzNDssIHJzcC1cdTAwM2VpZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjczMjpcdGRtYWJ1Zl9pZCA9IHJzcC1cdTAwM2VpZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9NzQ2PXN0YXRpYyBpbnQgYmluZF90eF9xdWV1ZSh1bnNpZ25lZCBpbnQgaWZpbmRleCwgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTc3NC1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtnb3QgdHggZG1hYnVmIGlkPSVkXFxuXCYjMzQ7LCByc3AtXHUwMDNlaWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo3NzU6XHR0eF9kbWFidWZfaWQgPSByc3AtXHUwMDNlaWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTc3Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMS1cdFx0XHRmcHJpbnRmKHN0ZGVycixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAxMjpcdFx0XHRcdFwmIzM0O3JlY2VpdmVkIGZyYWdfcGFnZT0lbGx1LCBpbl9wYWdlX29mZnNldD0lbGx1LCBmcmFnX29mZnNldD0lbGx1LCBmcmFnX3NpemU9JXUsIHRva2VuPSV1LCB0b3RhbF9yZWNlaXZlZD0lbHUsIGRtYWJ1Zl9pZD0ldVxcblwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMy1cdFx0XHRcdGRtYWJ1Zl9jbXNnLVx1MDAzZWZyYWdfb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxNi1cdFx0XHRcdGRtYWJ1Zl9jbXNnLVx1MDAzZWZyYWdfc2l6ZSwgZG1hYnVmX2Ntc2ctXHUwMDNlZnJhZ190b2tlbixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAxNzpcdFx0XHRcdHRvdGFsX3JlY2VpdmVkLCBkbWFidWZfY21zZy1cdTAwM2VkbWFidWZfaWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDE4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE5Olx0XHRcdGlmIChkbWFidWZfY21zZy1cdTAwM2VkbWFidWZfaWQgIT0gZG1hYnVmX2lkKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEwMjA6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7cmVjZWl2ZWQgb24gd3JvbmcgZG1hYnVmX2lkOiBmbG93IHN0ZWVyaW5nIGVycm9yXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAyMS1cdFx0XHRcdGdvdG8gZXJyX2Nsb3NlX2NsaWVudDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzOTE6XHRcdGRkbWFidWYgPSB0eF9kbWFidWZfaWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERNQS1CVUYgSURzIHdpdGggU0NNX0RFVk1FTV9ETUFCVUYqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBleGFjdGx5IGBzb2NrYy5kbWFidWZfaWRgIGdldHMgc2V0IHdpdGhpbiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGhhcHBlbmluZyBkdXJpbmcgYSBgc2VuZG1zZ2Agb3BlcmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX3NvY2tfY21zZ19zZW5kYCwgbGlrZWx5IHdoZW4gYSBjb250cm9sIG1lc3NhZ2Ugb2YgdHlwZSBgU0NNX0RFVk1FTV9ETUFCVUZgIChvciBzb21ldGhpbmcgYW5hbG9nb3VzKSBpcyBlbmNvdW50ZXJlZC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYENNU0dfREFUQShjbXNnKWAgbWFjcm8gaXMgaW52b2x2ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQgbWUganVtcCBpbnRvIHRoZSBjb2RlIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTE2LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyBhcm91bmQgdGhlIGNtc2cgaGFuZGxpbmcgbG9naWMuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgYW5zd2VyJiMzOTtzIGluIHRoZXJlLiBJIGJldCBpdCBpcyBzZXQgd2hlbiB0aGUgY21zZyBpcyBoYW5kbGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwMDpcdFx0XHRzb2NrYy1cdTAwM2V0c2ZsYWdzIHw9IFNPQ0tDTV9GTEFHX1RTX09QVF9JRDtcbjMxMDE6XHRcdFx0YnJlYWs7XG4zMTAyOlx0XHQvKiBTQ01fUklHSFRTIGFuZCBTQ01fQ1JFREVOVElBTFMgYXJlIHNlbWFudGljYWxseSBpbiBTT0xfVU5JWC4gKi9cbjMxMDM6XHRcdGNhc2UgU0NNX1JJR0hUUzpcbjMxMDQ6XHRcdGNhc2UgU0NNX0NSRURFTlRJQUxTOlxuMzEwNTpcdFx0XHRicmVhaztcbjMxMDY6XHRcdGNhc2UgU09fUFJJT1JJVFk6XG4zMTA3Olx0XHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcbjMxMDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDk6XHRcdFx0aWYgKCFza19zZXRfcHJpb19hbGxvd2VkKHNrLCAqKHUzMiAqKUNNU0dfREFUQShjbXNnKSkpXG4zMTEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjMxMTE6XHRcdFx0c29ja2MtXHUwMDNlcHJpb3JpdHkgPSAqKHUzMiAqKUNNU0dfREFUQShjbXNnKTtcbjMxMTI6XHRcdFx0YnJlYWs7XG4zMTEzOlx0XHRjYXNlIFNDTV9ERVZNRU1fRE1BQlVGOlxuMzExNDpcdFx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXG4zMTE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTE2Olx0XHRcdHNvY2tjLVx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xuMzExNzpcdFx0XHRicmVhaztcbjMxMTg6XHRcdGRlZmF1bHQ6XG4zMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEyMDpcdFx0fVxuMzEyMTpcdFx0cmV0dXJuIDA7XG4zMTIyOlx0fVxuMzEyMzpcdEVYUE9SVF9TWU1CT0woX19zb2NrX2Ntc2dfc2VuZCk7XG4zMTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgU0NNX0RFVk1FTV9ETUFCVUZgICppcyogaW5kZWVkIHVzZWQgaW4gYHNlbmRtc2dgIHRvIHBhc3MgdGhlIGBkbWFidWZfaWRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCB0aGF0IGAtRU9QTk9UU1VQUGAgcmV0dXJuIHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWAgYW5kIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enogdGFyZ2V0LiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIEkgcmVtZW1iZXIgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIHRoZSBvbmUgY2FsbGVkIHdoZW4gd2UgYmluZCB0aGUgZG1hYnVmIHRvIHRoZSBuZXRkZXYsIHdoaWxlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBnZXRzIGNhbGxlZCBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gU2luY2UgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGlzIGEgcmVhbCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIHdoZW4gYENPTkZJR19ORVRfREVWTUVNYCBpcyBlbmFibGVkLCB0aGF0IGxvb2tzIHByb21pc2luZyBhcyBhIGZvY3VzIHN5bWJvbC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBBaCwgaXQmIzM5O3Mgbm90IHN0YXRpYzoKCmBgYGMKc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLAoJCQkJCQkJIHVuc2lnbmVkIGludCBkbWFidWZfaWQpCmBgYAoKUGVyZmVjdCwgdGhhdCBtYWtlcyBpdCBhIGdyZWF0IGNob2ljZS4gSSBhbHNvIGNvbnNpZGVyZWQgYF9fc29ja19jbXNnX3NlbmRgLCBidXQgdGhhdCYjMzk7cyBqdXN0IHRvbyBnZW5lcmljLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBidXQgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gSSYjMzk7ZCBwcmVmZXIgdG8gYXZvaWQgZm9jdXNpbmcgb24gc29tZXRoaW5nIHNvIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHVubGVzcyBpdCBiZWNvbWVzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgYWxzbyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBiaW5kaW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHRcdHJldHVybiAwO1xuIDE4MjpcdFxuIDE4MzpcdGVycl9jbG9zZV9yeHE6XG4gMTg0Olx0XHRuZXRpZl9tcF9jbG9zZV9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMpO1xuIDE4NTpcdFx0cmV0dXJuIGVycjtcbiAxODY6XHR9XG4gMTg3Olx0XG4gMTg4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE4OTpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiAxOTA6XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gMTkxOlx0XHRcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXG4gMTkyOlx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiAxOTM6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAxOTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxOTU6XHR7XG4gMTk2Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAxOTc6XHRcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXHUwMDNjXHUwMDNjIG5pb3Zfc2hpZnQ7XG4gMTk4Olx0XHRzdGF0aWMgdTMyIGlkX2FsbG9jX25leHQ7XG4gMTk5Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkZvY3VzaW5nIEluOiBETUEgQnVmZmVyIEJpbmRpbmcqKgoKT2theSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCwgY2VudHJhbCBwb2ludCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIERNQSBidWZmZXIgYmluZGluZyBwcm9jZXNzIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgbWVtb3J5IHNwYWNlLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIHRoYXQgb25lIG91dC4KCkFuZCwgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIHRoZW4gbWFuYWdlZCBpbiB0aGUgcXVldWUsIHNvIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYmluZGluZyBhbmQgcXVldWluZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgd2lsbCBiZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0XHRuZXRpZl9tcF9jbG9zZV9yeHEoYmluZGluZy1cdTAwM2VkZXYsIHJ4cV9pZHgsIFx1MDAyNm1wX3BhcmFtcyk7XG4gMTUxOlx0XHR9XG4gMTUyOlx0XG4gMTUzOlx0XHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmluZGluZy1cdTAwM2VyZWYpO1xuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHRpbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbiAxNTc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAxNTg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTU5Olx0e1xuIDE2MDpcdFx0c3RydWN0IHBwX21lbW9yeV9wcm92aWRlcl9wYXJhbXMgbXBfcGFyYW1zID0ge1xuIDE2MTpcdFx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxuIDE2MjpcdFx0XHQubXBfb3BzXHRcdD0gXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXG4gMTYzOlx0XHR9O1xuIDE2NDpcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuIDE2NTpcdFx0dTMyIHhhX2lkeDtcbiAxNjY6XHRcdGludCBlcnI7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAoYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0ICE9IFBBR0VfU0hJRlQpXG4gMTY5Olx0XHRcdG1wX3BhcmFtcy5yeF9wYWdlX3NpemUgPSAxVSBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAyNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRGV2bWVtIFRDUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGRldm1lbSBUQ1AgcGF0Y2ggYW5kIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMuIEl0IGxvb2tzIGxpa2UgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBmdW5jdGlvbiwgYnV0IHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAKCk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUsIHRoZSBwYXRjaCByZWxpZXMgb24gYSBmZXcgY3JpdGljYWwgY29uZmlnczoKCiogICBgTkVUX0RFVk1FTWAKKiAgIGBETUFfU0hBUkVEX0JVRkZFUmAKKiAgIGBQQUdFX1BPT0xgCgpJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBgTkVUX0RFVk1FTWAgKmRlcGVuZHMgb24qIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYW5kICpzZWxlY3RzKiBgR0VORVJJQ19BTExPQ0FUT1JgLiBUaGF0IGNvbmZpcm1zIHRoYXQgc2ltcGx5IGVuYWJsaW5nIGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgIHByb3ZpZGVzIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uCgpOb3csIHRoZSBhY3R1YWwgY2hhbmdlIGlzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyBhZGRpbmcgdGhpcyBuZXcgY2hlY2s6CgpgYGBjCiAgICBpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCkgewogICAgCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpOwogICAgCWlmIChJU19FUlIoYmluZGluZykpIHsKICAgIAkJZXJyID0gUFRSX0VSUihiaW5kaW5nKTsKICAgIAkJYmluZGluZyA9IE5VTEw7CiAgICAJCWdvdG8gb3V0X2VycjsKICAgIAl9CiAgICAJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewogICAgCQllcnIgPSAtRU9QTk9UU1VQUDsKICAgIAkJZ290byBvdXRfZXJyOwogICAgCX0KICAgIH0KYGBgCgpFZmZlY3RpdmVseSwgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzbiYjMzk7dCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGUgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGl0JiMzOTtzIHdpdGhpbiB0aGUgY29yZSBUQ1AgYHNlbmRtc2dgIHBhdGggYW5kIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBmZWF0dXJlLCBhY2Nlc3NpYmxlIHZpYSB1c2Vyc3BhY2UgYHNlbmRtc2dgIGFuZCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJIG1hZGUgc3VyZSBgTkVUX0RFVk1FTWAgZG9lc24mIzM5O3QgcmVseSBvbiBgWERQX1NPQ0tFVFNgIG9yIGFueXRoaW5nIHVuZXhwZWN0ZWQuIEFsc28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYFNDTV9ERVZNRU1fRE1BQlVGYCBjYW4gYmUgdXNlZCB3aXRob3V0IGBORVRfREVWTUVNYC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIHRvIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NNX0RFVk1FTV9ETUFCVUYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTU2PVNldHVwJiMzOTssIGFuZCB0aGUga2VybmVsIHNpZ25hbHMgc3VjaCB0byB0aGUgdXNlciB2aWEgdGhlIFNDTV9ERVZNRU1fKiBjbXNnczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTU5LVx0XHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9TT0NLRVQgfHxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE2MDpcdFx0XHRcdChjbS1cdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9ETUFCVUYgXHUwMDI2XHUwMDI2XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjEtXHRcdFx0XHQgY20tXHUwMDNlY21zZ190eXBlICE9IFNDTV9ERVZNRU1fTElORUFSKSlcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjUtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNjY6XHRcdFx0aWYgKGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fREVWTUVNX0RNQUJVRikge1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY3LVx0XHRcdFx0LyogRnJhZyBsYW5kZWQgaW4gZG1hYnVmLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE5OS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMDotIFNDTV9ERVZNRU1fRE1BQlVGOiB0aGlzIGluZGljYXRlcyB0aGUgZnJhZ21lbnQgbGFuZGVkIGluIHRoZSBkbWFidWYgaW5kaWNhdGVkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDEtICBieSBkbWFidWZfaWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MjEyPUZyZWVpbmcgZnJhZ3Ncbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMTQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMTU6RnJhZ3MgcmVjZWl2ZWQgdmlhIFNDTV9ERVZNRU1fRE1BQlVGIGFyZSBwaW5uZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSB0aGUgdXNlclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE2LXByb2Nlc3NlcyB0aGUgZnJhZy4gVGhlIHVzZXIgbXVzdCByZXR1cm4gdGhlIGZyYWcgdG8gdGhlIGtlcm5lbCB2aWFcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yOTM9U2VuZGluZyBkYXRhXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjk1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6Mjk2OkRldm1lbSBkYXRhIGlzIHNlbnQgdXNpbmcgdGhlIFNDTV9ERVZNRU1fRE1BQlVGIGNtc2cuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yOTctXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MzA2PWZyb20gb2Zmc2V0IDIwMDAgaW50byB0aGUgZG1hYnVmLiBUaGUgZG1hYnVmIHRvIHNlbmQgZnJvbSBpcyB0eF9kbWFidWZfaWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyNS0gICAgICAgY21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMyNjogICAgICAgY21zZy1cdTAwM2VjbXNnX3R5cGUgPSBTQ01fREVWTUVNX0RNQUJVRjtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyNy0gICAgICAgY21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xuLS1cbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDUtI2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQ3LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1Ni0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTc6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTU4LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQxLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0MHg0MDRGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0My0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0MHg0MDUwXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTEzOC0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUYgICAgICAgICAweDAwNThcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MC0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRCAgICAgICAweDAwNTlcbi0tXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTQwLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0NzlcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDE6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0Mi0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0ODBcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMTEyLVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2suYzozMTEzOlx0Y2FzZSBTQ01fREVWTUVNX0RNQUJVRjpcbm5ldC9jb3JlL3NvY2suYy0zMTE0LVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0MC0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQxOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcdFNPX0RFVk1FTV9ETUFCVUZcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDItI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcdDgwXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz04NDc9c3RhdGljIGludCBkb19zZXJ2ZXIoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk4MS1cdFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBTT0xfU09DS0VUIHx8XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjk4MjpcdFx0XHQgICAgKGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0RNQUJVRiBcdTAwMjZcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtOTgzLVx0XHRcdCAgICAgY20tXHUwMDNlY21zZ190eXBlICE9IFNDTV9ERVZNRU1fTElORUFSKSkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTI3NT1zdGF0aWMgaW50IGRvX2NsaWVudChzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4Ny1cdFx0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTM4ODpcdFx0Y21zZy1cdTAwM2VjbXNnX3R5cGUgPSBTQ01fREVWTUVNX0RNQUJVRjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4OS1cdFx0Y21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkxNAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA4NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBkZXZtZW1gIFRDUCBGZWF0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIGhvdyB0aGUgYFNDTV9ERVZNRU1fRE1BQlVGYCBjb250cm9sIG1lc3NhZ2UgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYF9fc29ja19jbXNnX3NlbmRgIHBhcnNlcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc29ja2MuZG1hYnVmX2lkYCB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29uZGl0aW9uYWwuIFRoZSByZWFsIGNydXggb2YgdGhpcyBsaWVzIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuCgpJZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzICpub3QqIGVuYWJsZWQsIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCB3aWxsIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGlzIGlzIHRoZSBrZXkuIFdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCwgdGhlIHdob2xlIG1vZGlmaWVkIHNlY3Rpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgZWZmZWN0aXZlbHkgYnlwYXNzZWQgYmVjYXVzZSB0aGUgY2hlY2sgYGlmIChJU19FUlIoYmluZGluZykpYCB3aWxsIGltbWVkaWF0ZWx5IGhpdCB0aGUgZXJyb3IgY2FzZSBiZWZvcmUgcmVhY2hpbmcgdGhlIGNoZWNrIGZvciBgemMgIT0gTVNHX1pFUk9DT1BZYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgKmFic29sdXRlbHkqIHJlcXVpcmVkIHRvIGV2ZW4gcmVhY2ggdGhlIGxvZ2ljIHdoZXJlIHRoZSBgTVNHX1pFUk9DT1BZYCBjaGVjayBpcyBpbnRyb2R1Y2VkLiBUaGlzIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgcmVsYXRlZCB0byB0aGUgZGV2bWVtIFRDUCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgaWYgYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYFdvcnRoRnV6emluZzogdHJ1ZWAgZ2l2ZW4gdGhpcy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhbGlkYXRpb24gc3RlcC4gVGhlIGtleSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6IGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBhcmUgZm9yICpiaW5kaW5nKiB0aGUgRE1BIGJ1ZmZlciB0byB0aGUgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgdGhlIHNldHVwIHBoYXNlIGZvciBkZXZtZW0gVENQLiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgaXMgdGhlbiBjYWxsZWQgZHVyaW5nIGBzZW5kbXNnYCB0byB2YWxpZGF0ZSB0aGUgZG1hYnVmIElELiBFeGNlbGxlbnQsIHRoZXNlIGFyZSBleGFjdGx5IHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgc3RhdGljPyBOb3BlLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIGV4cG9ydGVkLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSwgYXMgaXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBkbWFidWYuCgpGaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbGlzdCBhbGwgdGhyZWUgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHJldHVybiAtRU9QTk9UU1VQUCBpZiBkbWFidWYgaXMgdXNlZCB3aXRob3V0IE1TR19aRVJPQ09QWSBzdXBwb3J0ICh3aGVuIGB6YyAhPSBNU0dfWkVST0NPUFlgKS4gVGhpcyBpcyBhIGxvZ2ljIGFuZCBmZWF0dXJlIHN1cHBvcnQgY2hlY2sgdGhhdCBwcmV2ZW50cyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zIHdoZW4gdXNpbmcgZG1hYnVmcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayB3b3VsZCBsaWtlbHkgYmUgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA0NTU0NDFmMWI2OTQ5Li5mNDAzODMwYWY2NWY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTE2Miw2ICYjNDM7MTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCQkJYmluZGluZyA9IE5VTEw7CiAJCQkJCWdvdG8gb3V0X2VycjsKIAkJCQl9CiYjNDM7CQkJCWlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHsKJiM0MzsJCQkJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJCQkJZ290byBvdXRfZXJyOwomIzQzOwkJCQl9CiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19TUExJQ0VfUEFHRVMpICZhbXA7JmFtcDsgc2l6ZSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBTZW5kIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoaXMgZnVuY3Rpb24sIGFzIEkgcmVjYWxsLCBpcyB0aGUgY29yZSBvZiB0aGUgVENQIHNlbmQgcGF0aCBvbiB0aGUgSVB2NCBzdGFjay4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6CgpgYGBjCgkJCQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7CgkJCQkJZXJyID0gLUVPUE5PVFNVUFA7CgkJCQkJZ290byBvdXRfZXJyOwoJCQkJfQpgYGAKClRoaXMgaXMgYmVpbmcgaW5zZXJ0ZWQgd2l0aGluIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZWFscyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBiaW5kaW5nYCwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2Ygc29ja2V0LWxldmVsIGJpbmRpbmcgY29uZmlndXJhdGlvbiBvciBwb3NzaWJseSBhZGRyZXNzIHNlbGVjdGlvbi4gIEl0IHNlZW1zIHRvIGJlIG5lc3RlZCB3aXRoaW4gYSBsYXJnZXIgYGlmYCBibG9jaywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBzb2NrZXQgaXMgY29uZmlndXJlZC4gTW9yZSBjb250ZXh0IGlzIG5lZWRlZCB0byBzZWUgd2hhdCBgYmluZGluZ2AgcmVmZXJzIHRvIGhlcmUuCgpUaGUga2V5IHBhcnQsIGhvd2V2ZXIsIGlzIHRoZSBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgIGNoZWNrLiAgSWYgYHpjYCBpc24mIzM5O3QgYE1TR19aRVJPQ09QWWAsIHRoZW4gYW4gYC1FT1BOT1RTVVBQYCBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHdlIGp1bXAgdG8gYG91dF9lcnJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY29kZSBwYXRoIGlzIGJlaW5nIGV4cGxpY2l0bHkgKmxpbWl0ZWQqIHRvIG9ubHkgaGFuZGxpbmcgemVyby1jb3B5IG9wZXJhdGlvbnMuICBTbywgdGhpcyBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgbG9naWMgd2l0aGluIHRoaXMgYmxvY2sgb2YgY29kZSBpcyAqb25seSogYXBwbGljYWJsZSBpbiB0aGUgY29udGV4dCBvZiB6ZXJvLWNvcHksIGFuZCBvdGhlciBzZW5kIHBhdGhzIHdpbGwgaGl0IHRoaXMgJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgZXJyb3IsIGluZGljYXRpbmcgYSBmZWF0dXJlIHRoYXQgaXMgbm90IGltcGxlbWVudGVkICh5ZXQpLCBvciBpbnRlbmRlZCBvbmx5IGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGxhcmdlciBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgYHpjYCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0NC1cbm5ldC9pcHY0L3RjcC5jOjEyNDU6XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG5uZXQvaXB2NC90Y3AuYy0xMjQ2LVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NDctfVxubmV0L2lwdjQvdGNwLmM6MTQ0ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xubmV0L2lwdjQvdGNwLmMtMTQ0OS1cbm5ldC9pcHY0L3RjcC5jPTE0NTA9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDU0LVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjE0NTU6XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XG5uZXQvaXB2NC90Y3AuYy0xNDU2LVx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb3JlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBuZXQvaXB2NC90Y3AuY2Ag4oCTIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTE2Mi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgYSBzcGVjaWZpYyBiZWhhdmlvciByZWxhdGVkIHRvIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBwZXJoYXBzIHJlbGF0ZWQgdG8gY29uZ2VzdGlvbiBjb250cm9sLCB3aW5kb3dpbmcsIG9yIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIGxpbmUgbnVtYmVyIGJlY2F1c2UgSSYjMzk7bSBlaXRoZXI6CgoqICAgQ2hhc2luZyBkb3duIGEgbGVhZCBmcm9tIGEgcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb24sIGEgcGVyZm9ybWFuY2UgcmVwb3J0LCBvciBldmVuIGEgY3Jhc2ggZHVtcCwgYW5kIHRoaXMgbGluZSBpcyBmbGFnZ2VkIGFzIGludGVyZXN0aW5nLgoqICAgRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBUQ1AgZmVhdHVyZSB0aGF0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgd2l0aCwgYmUgdGhhdCBmb3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIG9yIHVuZGVyc3RhbmRpbmcgYmVoYXZpb3VyIGluIHNvbWUgdW51c3VhbCBzY2VuYXJpbyBJJiMzOTt2ZSBnb3QgaW4gbWluZC4KKiAgIFJldmlld2luZyB0aGUgY29kZSBhcyBwYXJ0IG9mIGEgZ2VuZXJhbCBhdWRpdCBvciBhbiBpbnZlc3RpZ2F0aW9uIGludG8gYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgoKVGhlIHNwZWNpZmljIGNvbnRleHQgYXJvdW5kIGxpbmUgMTE2MiBpcyB0aGUga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIChsaWtlbHkgYHN0cnVjdCBzb2NrYCwgYHN0cnVjdCB0Y3Bfc29ja2AsIGFuZCBtYXliZSBldmVuIGBzdHJ1Y3Qgc2tfYnVmZmApLCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBpbW1lZGlhdGVseSBzY2FuIGZvcjoKCiogICBDb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIG15IHRlc3QgY2FzZXMuCiogICBDcml0aWNhbCByZXNvdXJjZSBhbGxvY2F0aW9ucyBvciByZWxlYXNlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoqICAgQW55IHVudXN1YWwgb3IgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy4KKiAgIERhdGEgcmFjZXMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW1tZWRpYXRlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBpbXBvcnRhbnQsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBUQ1Agc3RhY2suIEkmIzM5O20gYXJtZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIFRDUC9JUCwgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaG9wZWZ1bGx5LCBzb21lIHByaW9yIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSB0byBtYWtlIHNlbnNlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTVNHX1pFUk9DT1BZKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE0MTpcdFx0XHRpZiAobXNnLVx1MDAzZW1zZ191YnVmKSB7XG4xMTQyOlx0XHRcdFx0dWFyZyA9IG1zZy1cdTAwM2Vtc2dfdWJ1ZjtcbjExNDM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNDQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE0NTpcdFx0XHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcbjExNDY6XHRcdFx0XHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XG4xMTQ3Olx0XHRcdFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcbjExNDk6XHRcdFx0XHRpZiAoIXVhcmcpIHtcbjExNTA6XHRcdFx0XHRcdGVyciA9IC1FTk9CVUZTO1xuMTE1MTpcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE1MjpcdFx0XHRcdH1cbjExNTM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNTQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE1NTpcdFx0XHRcdGVsc2VcbjExNTY6XHRcdFx0XHRcdHVhcmdfdG9fbXNnemModWFyZyktXHUwMDNlemVyb2NvcHkgPSAwO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbjExNTk6XHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuMTE2MDpcdFx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuMTE2MTpcdFx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuMTE2MjpcdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbjExNjM6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2NDpcdFx0XHRcdFx0fVxuMTE2NTpcdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuMTE2NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjExNjc6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2ODpcdFx0XHRcdFx0fVxuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcdFx0fVxuMTE3MTpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE3MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNzM6XHRcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4xMTc0Olx0XHR9XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuMTE3NzpcdFx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuMTE3ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE3OTpcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTgwOlx0XHR9XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxuMTE4MzpcdFx0XHQgICAgIGluZXRfdGVzdF9iaXQoREVGRVJfQ09OTkVDVCwgc2spKSBcdTAwMjZcdTAwMjZcbjExODQ6XHRcdCAgICAhdHAtXHUwMDNlcmVwYWlyKSB7XG4xMTg1Olx0XHRcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xuMTE4NjpcdFx0XHRpZiAoZXJyID09IC1FSU5QUk9HUkVTUyBcdTAwMjZcdTAwMjYgY29waWVkX3N5biBcdTAwM2UgMClcbjExODc6XHRcdFx0XHRnb3RvIG91dDtcbjExODg6XHRcdFx0ZWxzZSBpZiAoZXJyKVxuMTE4OTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwOAoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFplcm8tQ29weSBhbmQgZG1hYnVmIEludGVyYWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHRoaXMgY29uZGl0aW9uYWwgY2hlY2ssIHNwZWNpZmljYWxseSBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgLCB3aGVyZSBgemNgIGlzIGEgZmxhZyBhbmQgYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc2V0LCBsb29rcyBsaWtlIGEgY29udHJvbCBmbG93IGNoYW5nZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCBleHBvc2VzIG9yIGZpeGVzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3Igd3JpdGUuCgpIb3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoaXMgY2hlY2sgaXMgdGhlcmUgdG8gZW5mb3JjZSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB6ZXJvLWNvcHkgKGBNU0dfWkVST0NPUFlgKSBpcyBhY3R1YWxseSBlbmFibGVkIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIGEgZG1hYnVmIChgc29ja2MuZG1hYnVmX2lkYCkuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgZGVzaWduZWQgdG8gcHJldmVudCB0aGUgdXNlIG9mIGBkbWFidWZgIHVubGVzcyB6ZXJvLWNvcHkgaXMgc3VwcG9ydGVkLiBTcGVjaWZpY2FsbHksIGlmIHplcm8tY29weSBpcyAqbm90KiBzdXBwb3J0ZWQsIHRoZW4gdGhlIGBzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOyBORVRJRl9GX1NHYCBpcyBmYWxzZS4gVGhpcyBtZWFucyB0aGF0IHdlIGV4cGVjdCBgemNgIHdpbGwgYmUgc2V0IHRvIDAuCgpJZiBgemNgIGlzIDAsIHRoZW4gdGhlIGRhdGEgd291bGQgYmUgY29waWVkIGluc3RlYWQgb2YgdXNpbmcgdGhlIHplcm8tY29weSBwYXRoLiBUaGUgcmVhc29uIGZvciB0aGlzIHBhdGNoIGlzIHRoYXQgZG1hYnVmIGRhdGEgKmNhbm5vdCogYmUgY29waWVkIGluIHRoZSBzYW1lIHdheSwgb3IgbWF5YmUgbW9yZSBhY2N1cmF0ZWx5LCBpdCYjMzk7cyBzaW1wbHkgbm90IHN1cHBvcnRlZC4gVGhpcyBpbmRpY2F0ZXMgYSBsb2dpYyBidWcgb3IsIG1vcmUgbGlrZWx5LCBhIGNoZWNrIGZvciBhbiB1bnN1cHBvcnRlZCBmZWF0dXJlIGNvbWJpbmF0aW9uLCByYXRoZXIgdGhhbiBhbnkgYXR0ZW1wdCB0byBkZWFsIHdpdGggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZGlyZWN0bHkuCgpJbXBvcnRhbnRseSwgYHpjYCBpcyBpbml0aWFsaXplZCBsb2NhbGx5LCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQmIzM5O3MgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBLTVNBTi4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgcG9wdWxhdGVkIGZyb20gdGhlIGBjbXNnaGRyYCBwYXJzaW5nLCB3aGljaCBJIGFtIGNvbWZvcnRhYmxlIHdpdGguIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhbiBlcnJvciByZXR1cm4gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBydWxlIG91dCB0aGlzIHNwZWNpZmljIGNoYW5nZSBhcyBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpXaGlsZSBLQVNBTiBvciBnZW5lcmFsIGZ1enppbmcgKm1pZ2h0KiB1bmNvdmVyIGNyYXNoZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpZiBgZG1hYnVmYCBpcyBhdHRlbXB0ZWQgd2l0aG91dCB6ZXJvLWNvcHkgc3VwcG9ydCwgdGhlc2UgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoxOC42MzI2NDAwODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MzM2Mjk5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjE4LjYzMjY0NTA4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTIwNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhlZDc2MWQ2M2Y4YzU2YTUzMDA4NWNiOGQ5ODQ3ZDM4NGJjNjljNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTE6NTM6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmY0MDM4MzBhZjY1ZjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMTYyLDYgKzExNjIsMTAgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdGJpbmRpbmcgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xcbitcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoyMC4wMjQzNzE3OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQxNDE1MjEwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uZjQwMzgzMGFmNjVmNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjIsNiArMTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjIwLjAyNDM3MzI2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTA1NDY4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgbmV0L2lwdjQvdGNwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW50cm9kdWNlZCB0aGlzIGNoZWNrIHdpdGhpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb246XG5cbmBgYGNcbiBcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbiBcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoZXkncmUgZXhwbGljaXRseSByZWplY3RpbmcgYW55dGhpbmcgKm90aGVyKiB0aGFuIHplcm8tY29weSAoYE1TR19aRVJPQ09QWWApIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIG5vdy5cIiBUaGUgYC1FT1BOT1RTVVBQYCBlcnJvciBpcyBwcmV0dHkgY2xlYXI7IHRoZXkncmUgZXhwbGljaXRseSBzYXlpbmcgXCJ0aGlzIGlzbid0IHN1cHBvcnRlZC5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT8gV2hhdCdzIHRoZSBpbnRlbmRlZCBlZmZlY3Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoaXMgY2hhbmdlIGZ1bGx5LCBzbyBJIHdpbGwgbm93IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBsaW5lcyBhcm91bmQgbGluZSAxMTYyIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTM6MjMuOTE0OTIyMjY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE1MjpcXHRcXHRcXHRcXHR9XFxuMTE1MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNTQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE1NTpcXHRcXHRcXHRcXHRlbHNlXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHR1YXJnX3RvX21zZ3pjKHVhcmcpLVxcdTAwM2V6ZXJvY29weSA9IDA7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbjExNTk6XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xcbjExNjI6XFx0XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IE5VTEw7XFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE2NDpcXHRcXHRcXHRcXHRcXHR9XFxuMTE2NTpcXHRcXHRcXHRcXHRcXHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XFxuMTE2NjpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY5OlxcdFxcdFxcdFxcdH1cXG4xMTcwOlxcdFxcdFxcdH1cXG4xMTcxOlxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE3MjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNzM6XFx0XFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbjExNzQ6XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjZcXG4xMTc3OlxcdFxcdCAgICAoIShmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XFxuMTE3ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNzk6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoyMy45MTUxMDM0NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjI1MTcwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBTZW5kbXNnIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjazogYGlmICh6YyAhPSBNU0dfWkVST0NPUFkpYCB3aXRoaW4gdGhhdCBleGlzdGluZyBibG9jayB0aGF0IGxvb2tzIGF0IGBzb2NrY19lcnJgIGFuZCBgc29ja2MuZG1hYnVmX2lkYC4gVGhpcyBpbnN0YW50bHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBkZXZtZW0gVENQYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCBpbiBUQ1AuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0J3MgcmlnaHQgaW4gdGhlIGNvcmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aC4gVGhpcyBraW5kIG9mIG1vZGlmaWNhdGlvbiBpcyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuIFdlJ3JlIGFsdGVyaW5nIGhvdyBUQ1Agc2VuZG1zZyBiZWhhdmVzLCBhbmQgdGhhdCAqYWx3YXlzKiB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBkZXZtZW0gVENQYC4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIGJlIGFjdGl2ZS4gVGhhdCB3aWxsIGluZm9ybSBob3cgSSBzZXQgdXAgYW55IHRlc3QgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTM6MzIuMTQwMjc2MTM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5MDUxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1OC1cXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzozMy42OTUxODU4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTg1NjA0MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBuZXQvY29yZS9kZXZtZW0uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHF1ZXN0aW9uLCBidXQgdGhlIGFuc3dlciBjb3VsZCBsaWUgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVzZSB0aGUgY29uZmlnIHN5c3RlbSB0byBzZWFyY2ggZm9yIGRlcGVuZGVuY2llcy4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBmaW5kYCB0byBwaW5wb2ludCBhbnkgZGlyZWN0IG1lbnRpb25zIG9mIGl0LCB0aGVuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9uIHJlc3BvbnNpYmxlLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgb3B0aW9uLiBJcyBpdCBhIG1vZHVsZSwgb3IgYnVpbHQtaW4/IFdoYXQgYXJlIHRoZSBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbSBhbnRpY2lwYXRpbmcgdGhpcyBjb3VsZCBsZWFkIGRvd24gYSByYWJiaXQgaG9sZSBkZXBlbmRpbmcgb24gd2hhdCB0aGF0IGNvbmZpZyBvcHRpb24gZG9lcyBleGFjdGx5LCBidXQgYXQgdGhlIHZlcnkgbGVhc3QsIG15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IGluaXRpYWwgS2NvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzozOC4yODA3OTE0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ3OTY3NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1lbS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg0LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg1OiAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg2LSAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9NDA1PWluY29taW5nIGRhdGEgYW5kIHZhbGlkYXRlcyBpdCBhcyBzdWNoLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBsYXVuY2hcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDo0MDY6bmNkZXZtZW0gb24gdGhlIHNlcnZlciBieTo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtNDA3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM1LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzNjogICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzctICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1NzYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTc3OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTc4LVxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz00NDM9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDQ5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NTA6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDUxLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTQ3ND1kcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc4LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0Nzk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MDY9c3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUwOS1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxMDpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUxMS19O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjIxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMgPSBkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMi1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZWRwYWdlbWFwO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTExND1pbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTY6XFx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyA9IGRldm1lbV9hbGxvY2F0aW9uLVxcdTAwM2VvcHM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExNy1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSBzdGF0ZSA9IHt9O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxNj1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLVxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjMxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTIzMi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTQwMj12b2lkIGRybV9wYWdlbWFwX2Rldm1lbV9pbml0KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MDMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MDQ6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MDUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz03ODM9c3RhdGljIGludCB4ZV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy04MDUtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgZHBhZ2VtYXBfZGV2bWVtX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtODA3LVxcdC5kZXZtZW1fcmVsZWFzZSA9IHhlX3N2bV9kZXZtZW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz05NzE9c3RhdGljIGJvb2wgeGVfc3ZtX3JhbmdlX2lzX3ZhbGlkKHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6OTczOlxcdFxcdFxcdFxcdCAgYm9vbCBkZXZtZW1fb25seSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTc0LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzgtXFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2V0aWxlX2ludmFsaWRhdGVkKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5Nzk6XFx0XFx0KCFkZXZtZW1fb25seSB8fCB4ZV9zdm1fcmFuZ2VfaGFzX3BhZ2VtYXAocmFuZ2UsIGRwYWdlbWFwKSkpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05ODAtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTEwNTA9c3RhdGljIGludCB4ZV9kcm1fcGFnZW1hcF9wb3B1bGF0ZV9tbShzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEwOTYtXFx0XFx0ZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoXFx1MDAyNmJvLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbiwgZGV2LCBtbSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTA5NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZHBhZ2VtYXBfZGV2bWVtX29wcywgZHBhZ2VtYXAsIGVuZCAtIHN0YXJ0LFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMDk4LVxcdFxcdFxcdFxcdFxcdHByZV9taWdyYXRlX2ZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xMjA2PXN0YXRpYyBpbnQgX194ZV9zdm1faGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdm1hICp2bWEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTIxNS1cXHRcXHQuY2hlY2tfcGFnZXNfdGhyZXNob2xkID0gZGV2bWVtX3Bvc3NpYmxlID8gU1pfNjRLIDogMCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTIxNjpcXHRcXHQuZGV2bWVtX29ubHkgPSBuZWVkX3ZyYW0gXFx1MDAyNlxcdTAwMjYgZGV2bWVtX3Bvc3NpYmxlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE3LVxcdFxcdC50aW1lc2xpY2VfbXMgPSBuZWVkX3ZyYW0gXFx1MDAyNlxcdTAwMjYgZGV2bWVtX3Bvc3NpYmxlID9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjI1LVxcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gZ3RfdG9fdGlsZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyMjY6XFx0aW50IG1pZ3JhdGVfdHJ5X2NvdW50ID0gY3R4LmRldm1lbV9vbmx5ID8gMyA6IDE7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyMjctXFx0a3RpbWVfdCBzdGFydCA9IHhlX2d0X3N0YXRzX2t0aW1lX2dldCgpLCBiaW5kX3N0YXJ0LCBnZXRfcGFnZXNfc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI0MC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTI0MTpcXHRkcGFnZW1hcCA9IGN0eC5kZXZtZW1fb25seSA/IHhlX3RpbGVfbG9jYWxfcGFnZW1hcCh0aWxlKSA6XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNDItXFx0XFx0eGVfdm1hX3Jlc29sdmVfcGFnZW1hcCh2bWEsIHRpbGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTE6XFx0aWYgKGN0eC5kZXZtZW1fb25seSBcXHUwMDI2XFx1MDAyNiAhcmFuZ2UtXFx1MDAzZWJhc2UucGFnZXMuZmxhZ3MubWlncmF0ZV9kZXZtZW0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTItXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTQ6XFx0aWYgKHhlX3N2bV9yYW5nZV9pc192YWxpZChyYW5nZSwgdGlsZSwgY3R4LmRldm1lbV9vbmx5LCBkcGFnZW1hcCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI1NS1cXHRcXHR4ZV9zdm1fcmFuZ2VfdmFsaWRfZmF1bHRfY291bnRfc3RhdHNfaW5jcihndCwgcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzAtXFx0XFx0aWYgKGVycikge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjcxOlxcdFxcdFxcdGlmIChtaWdyYXRlX3RyeV9jb3VudCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzItXFx0XFx0XFx0XFx0ZHJtX2RiZyhcXHUwMDI2dm0tXFx1MDAzZXhlLVxcdTAwM2Vkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3Ni1cXHRcXHRcXHRcXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjc3OlxcdFxcdFxcdFxcdCAqIEluIHRoZSBkZXZtZW0tb25seSBjYXNlLCBtaXhlZCBtYXBwaW5ncyBtYXlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3OC1cXHRcXHRcXHRcXHQgKiBiZSBmb3VuZC4gVGhlIGdldF9wYWdlcyBmdW5jdGlvbiB3aWxsIGZpeFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyODEtXFx0XFx0XFx0XFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyODI6XFx0XFx0XFx0XFx0aWYgKGN0eC5kZXZtZW1fb25seSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI4My1cXHRcXHRcXHRcXHRcXHRnb3RvIGdldF9wYWdlcztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMzAyLVxcdFxcdGN0eC50aW1lc2xpY2VfbXMgXFx1MDAzY1xcdTAwM2M9IDE7XFx0LyogRG91YmxlIHRpbWVzbGljZSBpZiB3ZSBoYXZlIHRvIHJldHJ5ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEzMDM6XFx0XFx0aWYgKG1pZ3JhdGVfdHJ5X2NvdW50IFxcdTAwM2UgMCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEzMDQtXFx0XFx0XFx0ZHJtX2RiZyhcXHUwMDI2dm0tXFx1MDAzZXhlLVxcdTAwM2Vkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTkyMD1pbnQgeGVfcGFnZW1hcF9jYWNoZV9jcmVhdGUoc3RydWN0IHhlX3RpbGUgKnRpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzNi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTkzNzpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kZXZtZW1fb3BlbihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzOC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTk3Mj1zdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5OTgtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE5OTk6XFx0ZHBhZ2VtYXAgPSB4ZV9kZXZtZW1fb3Blbih0b194ZV9kZXZpY2UoZHJtKSwgcmVnaW9uX2luc3RhbmNlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMjAwMC1cXHRkcm1fZGV2X2V4aXQoaWR4KTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0yMDI9c3RydWN0IGRybV9ncHVzdm0ge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTIzNi0gKiBAZGV2bWVtX3Bvc3NpYmxlOiBwb3NzaWJsZSB0byB1c2UgZGV2aWNlIG1lbW9yeVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyMzc6ICogQGRldm1lbV9vbmx5OiB1c2Ugb25seSBkZXZpY2UgbWVtb3J5XFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTIzOC0gKiBAYWxsb3dfbWl4ZWQ6IEFsbG93IG1peGVkIG1hcHBpbmdzIGluIGdldCBwYWdlcy4gTWl4aW5nIGJldHdlZW4gc3lzdGVtIGFuZFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTI0ND1zdHJ1Y3QgZHJtX2dwdXN2bV9jdHgge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTI1MC1cXHR1bnNpZ25lZCBpbnQgZGV2bWVtX3Bvc3NpYmxlIDoxO1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyNTE6XFx0dW5zaWduZWQgaW50IGRldm1lbV9vbmx5IDoxO1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTItXFx0dW5zaWduZWQgaW50IGFsbG93X21peGVkIDoxO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0xNzU9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTc3LS8qKlxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTc4OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIC0gT3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIEdQVSBTVk0gZGV2aWNlIG1lbW9yeVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTc5LSAqXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE4NC0gKi9cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oOjE4NTpzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyB7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0xODYtXFx0LyoqXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oPTMxNz1zdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtIHtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzIwLVxcdHN0cnVjdCBjb21wbGV0aW9uIGRldGFjaGVkO1xcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzIxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zMjItXFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg9MzUxPXZvaWQgZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzUzOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTM1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIHNpemVfdCBzaXplLFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTg9TU9EVUxFX1BBUk1fREVTQyhzcG1fYWRkcl9kZXYxLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNjAtXFxubGliL3Rlc3RfaG1tLmM6NjE6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzO1xcbmxpYi90ZXN0X2htbS5jLTYyLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkbWlycm9yX21pbl9vcHM7XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU5Ni1cXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAubnJfcmFuZ2UgPSAxO1xcbmxpYi90ZXN0X2htbS5jOjU5NzpcXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAub3BzID0gXFx1MDAyNmRtaXJyb3JfZGV2bWVtX29wcztcXG5saWIvdGVzdF9obW0uYy01OTgtXFx0ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLm93bmVyID0gbWRldmljZTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3MzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzY1LVxcbmxpYi90ZXN0X2htbS5jOjE3NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xcbmxpYi90ZXN0X2htbS5jLTE3NjctXFx0LmZvbGlvX2ZyZWVcXHQ9IGRtaXJyb3JfZGV2bWVtX2ZyZWUsXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5uZXQvY29yZS9NYWtlZmlsZS01My1vYmotJChDT05GSUdfREVCVUdfTkVUKSArPSBsb2NrX2RlYnVnLm9cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTI5PXN0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdzLCBYQV9GTEFHU19BTExPQzEpO1xcbm5ldC9jb3JlL2Rldm1lbS5jLTMwLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3Byb3ZpZGVyX29wcyBkbWFidWZfZGV2bWVtX29wcztcXG5uZXQvY29yZS9kZXZtZW0uYy0zMi1cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0NC1cXHRcXHRcXHQubXBfcHJpdlxcdD0gYmluZGluZyxcXG5uZXQvY29yZS9kZXZtZW0uYzoxNDU6XFx0XFx0XFx0Lm1wX29wc1xcdFxcdD0gXFx1MDAyNmRtYWJ1Zl9kZXZtZW1fb3BzLFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0Ni1cXHRcXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTU2PWludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTYxLVxcdFxcdC5tcF9wcml2XFx0PSBiaW5kaW5nLFxcbm5ldC9jb3JlL2Rldm1lbS5jOjE2MjpcXHRcXHQubXBfb3BzXFx0XFx0PSBcXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTYzLVxcdH07XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz01MjQ9c3RhdGljIHZvaWQgbXBfZG1hYnVmX2Rldm1lbV91bmluc3RhbGwodm9pZCAqbXBfcHJpdixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0NC1cXG5uZXQvY29yZS9kZXZtZW0uYzo1NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xcbm5ldC9jb3JlL2Rldm1lbS5jLTU0Ni1cXHQuaW5pdFxcdFxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtX2xpYi5weT01Mz1kZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9UlhfUEFHRV9TSVpFX0RFRkFVTFQpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk6NTQ6ICAgIFxcXCJcXFwiXFxcIlByb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbid0IHN1cHBvcnRlZC5cXFwiXFxcIlxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5LTU1LSAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIFBST0JFX1JYX1BBR0VfU0laRVM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQwLjQyODc2NzMxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjY5OTk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEltcGxlbWVudGF0aW9uIHdpdGggYENPTkZJR19ORVRfREVWTUVNYCBDb25zaWRlcmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgY2xlYXI6IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHNwYXJrcyBhIHNwZWNpZmljIGxpbmUgb2YgaW5xdWlyeS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGltcGxpY2F0aW9uIHRoYXQgY29uZmlnIGhhcyBvbiB0aGUgdGNwIHNlbmQgcGF0aCwgZXNwZWNpYWxseSByZWdhcmRpbmcgbWVtb3J5IG1hcHBpbmcuIFNpbmNlIHRoZSBrZXkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gYG5ldC9pcHY0L3RjcC5jYC4gTXkgZm9jdXMgd2lsbCBiZSB2ZXJ5IHNwZWNpZmljOiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIG1pZ2h0IGJlIHVzZWQgaW4gdGhhdCBmdW5jdGlvbiBvciBpdHMgY2FsbGVlcywgcHJvYmFibHkgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IGFjY2Vzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbmV0X2Rldm1lbWAgaGFzIGJlZW4gc2FmZWx5IGhhbmRsZWQsIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2Ugc2VjdXJpdHkgcmlza3MuIEl0J3MgYSBxdWljayB0YWN0aWNhbCBhc3Nlc3NtZW50OyBsZXQncyBnZXQgaW4gdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQ0LjE5NTc2ODkwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDI2NjU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0PTEzPXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VEICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9kZWxhY2tfdGltZXJfaGFuZGxlcix0Y3BfZGVsYWNrX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0OjE0OnVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORyAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9wdXNoLHRjcF9zZW5kbXNnX2xvY2tlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdC0xNS11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfVENQRlJPTVpFUk9XSU5ET1dBRFYgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc2VsZWN0X3dpbmRvdyx0Y3BfdHJhbnNtaXQtc2tiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jPTMyMz1zdGF0aWMgaW50IHNpd190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBwYWdlICoqcGFnZSwgaW50IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ2LVxcdFxcdGxvY2tfc29jayhzayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYzozNDc6XFx0XFx0cnYgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2csIGJ5dGVzKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0OC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MzY3PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjM2ODppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMzY5LWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaD0yODk9VFJBQ0VfRVZFTlQodGNwX3JldHJhbnNtaXRfc3luYWNrLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM0LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oOjMzNTpUUkFDRV9FVkVOVCh0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM2LVxcdFRQX1BST1RPKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NzMwLVxcdHsgXFxcInRjcF9zZW5kX3Jlc2V0XFxcIiwgMHgxMSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6NjczMTpcXHR7IFxcXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcXFwiLCAweDEwMCB9LFxcbmtlcm5lbC9icGYvYnRmLmMtNjczMi1cXHQvKiB0ZWdyYV9hcGJfZG1hICovXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDg1LVxcdC5yZWFkX3NrYlxcdCAgID0gdGNwX3JlYWRfc2tiLFxcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDg2OlxcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cXHQucGVla19sZW5cXHQgICA9IHRjcF9wZWVrX2xlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExMTUtXFxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvaXB2NC90Y3AuYy0xMTE3LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEyNDQtXFxubmV0L2lwdjQvdGNwLmM6MTI0NTpcXHRcXHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xcbm5ldC9pcHY0L3RjcC5jLTEyNDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDQ3LX1cXG5uZXQvaXB2NC90Y3AuYzoxNDQ4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zZW5kbXNnX2xvY2tlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTQ0OS1cXG5uZXQvaXB2NC90Y3AuYz0xNDUwPWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDU0LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6MTQ1NTpcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XFxubmV0L2lwdjQvdGNwLmMtMTQ1Ni1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTIyLVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTIzOlxcdFxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZ2hkciwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyNC1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MS1cXHQuc3BsaWNlX2VvZlxcdCAgID0gaW5ldF9zcGxpY2VfZW9mLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjgyOlxcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4My1cXHQuc3BsaWNlX3JlYWRcXHQgICA9IHRjcF9zcGxpY2VfcmVhZCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xNjg9aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xOTQtXFxubmV0L3Rscy90bHNfbWFpbi5jOjE5NTpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2csIHNpemUpO1xcbm5ldC90bHMvdGxzX21haW4uYy0xOTYtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9Mjk5PXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9zZW5kX3BrdF9pbmZvKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMzQwLVxcdFxcdCAqICdNU0dfWkVST0NPUFknIGZsYWcgaGFuZGxpbmcgaGVyZSBpcyBiYXNlZCBvbiB0aGUgc2FtZSBmbGFnXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjM0MTpcXHRcXHQgKiBoYW5kbGluZyBmcm9tICd0Y3Bfc2VuZG1zZ19sb2NrZWQoKScuXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTM0Mi1cXHRcXHQgKi9cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9MjEyPXN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMS1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMzI6XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnaGRyLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMy1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM9MTE3PXN0YXRpYyBib29sIGJwZl90ZXN0X2RlbGF5KHN0cnVjdCBicGZfc29ja19vcHMgKnNrb3BzLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE4Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jOjE4ODpTRUMoXFxcImZlbnRyeS90Y3Bfc2VuZG1zZ19sb2NrZWRcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg5OmludCBCUEZfUFJPRyh0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTkwLVxcdCAgICAgc2l6ZV90IHNpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQ1LjY0MDA0MzA1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUxMzE0MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFNlbmQgUGF0aCB3aXRoIFplcm9Db3B5IGFuZCBEZXZtZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBUQ1Agc2VuZGluZyBwYXRoLiBJdCdzIGNhbGxlZCBieSBgdGNwX3NlbmRtc2dgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBhIGNoZWNrIGZvciBgTVNHX1pFUk9DT1BZYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gUmlnaHQsIGFuZCB0aGlzIHBhdGggaXMgb25seSByZWFjaGFibGUgaWYgYENPTkZJR19ORVRfREVWTUVNYCBpcyBlbmFibGVkLlxuXG5Ob3csIG15IGluaXRpYWwgaW5jbGluYXRpb24gd2FzIHRvIGZvY3VzIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIG9yIGB0Y3Bfc2VuZG1zZ2AuIEJ1dCB0aGUgcHJvbXB0IGFkdmlzZXMgYWdhaW5zdCBsaXN0aW5nIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICppcyogZGVmaW5pdGVseSBhIGhvdCBwYXRoLiBPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhpcyBjaGFuZ2UgcmVsYXRlcyB0by4gVGhlIHByb21wdCBzdWdnZXN0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHVzYWdlLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gVGhpcyBpcyB3aGVyZSBgbmV0X2Rldm1lbWAgY29tZXMgaW50byBwbGF5LiBTaW5jZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGhvdC1wYXRoIGFuZCB0aGUgY2hhbmdlIGlzICphYm91dCogZGV2bWVtLCBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZGV2bWVtIGZ1bmN0aW9uIEkgY2FuIGZvY3VzIG9uPyBMZXQncyBzZWUuLi4gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGxvb2tzIHByb21pc2luZywgYnV0IHRoYXQncyBwb3RlbnRpYWxseSBpbmxpbmUsIGRlcGVuZGluZyBvbiBgQ09ORklHX05FVF9ERVZNRU1gLiBMZXQgbWUgY2hlY2sgYG5ldC9jb3JlL2Rldm1lbS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1Mzo1Mi42OTEzNjEzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDY3Njc5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1OC1cXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1Mzo1NC4xMzgxMzQ5OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzMjE0MDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMgc3BlY2lmaWMgY29kZSBtb2RpZmljYXRpb24uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBmZWVscyBsaWtlIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgcmVhbGx5IHNwZWNpZmljIHRvIHRoZSBgZGV2bWVtYCBwYXRoIHdlJ3JlIGludGVyZXN0ZWQgaW4sIGFuZCB1bmxpa2UgYSByZWFsbHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIGFjdHVhbGx5IG5vbi16ZXJvLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gdHJ5IGFuZCBndWlkZSB0aGUgZnV6emVyLiBcblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgaXQgbm93LiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgaXMgYWN0dWFsbHkgY2FsbGVkICppbW1lZGlhdGVseSBiZWZvcmUqIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQuIExldCBtZSBwdWxsIHRoYXQgYmxvY2sgdXAgYWdhaW46XG5cbmBgYGNcblx0XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xuXHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuXHRcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcblx0XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG5cdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcblx0XHRcdFx0XHRcdGdvdG8gb3V0X2Vycjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuXHRcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5gYGBcblxuT2theSwgc28gdGhlIHBsYW4gaXMgZm9ybWluZy4gRm9jdXNpbmcgdGhlIGZ1enplciBvbiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2Agc2hvdWxkIGJlIGEgZGlyZWN0IHdheSB0byBoaXQgdGhpcyBhbHRlcmVkIGNvZGUgcGF0aC4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCB3aWxsIGJlIHdoYXQgaXMgaW52b2x2ZWQgd2l0aCBgc29ja2MuZG1hYnVmX2lkYCBiZWluZyBub24temVyby5cblxuQW5vdGhlciBhdmVudWUgY291bGQgYmUgdG8gZm9jdXMgb24gc29tZXRoaW5nIGxpa2UgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIG9yIHdoYXRldmVyIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHNldHVwIG9mIHRoZSBkbWFidWYgYmluZGluZy4gSSBzaG91bGQgY2hlY2sgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCBmb3IgYW55IG90aGVyIGRldm1lbSBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjAxLjA3MDI3Nzk5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDQ4MDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4OD1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmM6MTg5Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG5uZXQvY29yZS9kZXZtZW0uYy0xOTAtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD05ND1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6OTU6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaDoxMDM6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTA0LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNzg6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTE3OS1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE5OT1zdGF0aWMgaW5saW5lIGludFxcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTIwMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTAxMz1pbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk0LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTA5NTpcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTYtXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0OlxcdFxcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTcxPWludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMjM3OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzOC1cXHRcXHRcXHRcXHRcXHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MDIuNTMwNzYzNTQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODgzNDA1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORVRfREVWTUVNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuIFRoZXkgc2VlbSB0byBiZSB0aGUgY29yZSBvZiB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhlIG9idmlvdXMgY29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGlzIGBORVRfREVWTUVNYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IEknbSBhIGJpdCBjdXJpb3VzOiBJcyB0aGF0IHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHk/IEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2NvcmUvS2NvbmZpZ2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgTkVUX0RFVk1FTWAgc3ltYm9sLiBTZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIG9yIG90aGVyIGNsdWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIG51Z2dldHMgdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MTAuNzE5MTA2MjM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0OTA2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L0tjb25maWctNjgtXFxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cXG5uZXQvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjEyLjE4NDAxNzUxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzNzY2MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5FVF9ERVZNRU0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBORVRfREVWTUVNYCBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L0tjb25maWdgIGFzIGEgYGRlZl9ib29sIHlgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHNvbWV0aGluZyBsaWtlIGRldmljZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEJ1dCwgSSBkb24ndCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBsaWtlIG1lbW9yeSBtYXBwaW5nLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjkgb2YgYG5ldC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBhIGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaXQgY2Fycmllcy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgdGhhdCBtaWdodCBleHBsYWluIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBkZWZhdWx0IHN0YXRlLCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBtYXliZSBwb2ludGVycyB0byByZWxhdGVkIGNvZGUgb3IgZG9jdW1lbnRhdGlvbi4gQSBxdWljayBjaGVjayBvZiB0aGUgc3Vycm91bmRpbmcgY29uZmlnIG9wdGlvbnMgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIG1haW50YWluZXJzIGNvbnNpZGVyZWQgd2hlbiBzZXR0aW5nIGl0IGFzIGEgZGVmYXVsdC4gSXQncyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgXCJ3aHlcIiBhbmQgbm90IGp1c3QgdGhlIFwid2hhdFwiIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjE2LjQxNzc4NTY0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDoxNi40MTc4NjU5OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNjM0NDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHRzOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBpdCdzIGNsZWFyIGl0IGxlYW5zIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgbWFrZXMgc2Vuc2UuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGJhc2ljLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGVuYWJsaW5nLiBJIGRvbid0IHdhbnQgdG8gd2FzdGUgdGltZSBjaGFzaW5nIHBoYW50b20gaXNzdWVzIGlmIGl0J3MganVzdCBzb21ldGhpbmcgSSBvdmVybG9va2VkIGluIG15IHNldHVwLiBMZXQncyBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGluIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MjAuMDM0MjE3MjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4NjU1ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDoyMi44ODI4Nzc3NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTg3MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBhIEJvb2xlYW4gQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBib29sZWFuLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZHJpdmVyLCBhbmQgaXQncyBhcm91bmQgbGluZSAyMTUgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIGl0LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0byBlbmFibGUvZGlzYWJsZSBpdC4gTGV0J3MgZ2V0IHRvIHRoYXQgS2NvbmZpZyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjI2LjMzNDc1MDI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0Ym9vbFxcbiAyMTE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMjEyOlxcdFxcbiAyMTM6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuIDIxNDpcXHRcXG4gMjE1OlxcdGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbiAyMTY6XFx0XFx0Ym9vbFxcbiAyMTc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxODpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gMjE5OlxcdFxcdGhlbHBcXG4gMjIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZnJhbWV3b3JrIGZvciBidWZmZXItc2hhcmluZyBiZXR3ZWVuXFxuIDIyMTpcXHRcXHQgIG11bHRpcGxlIGRyaXZlcnMuIEEgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgdXNpbmcgZHJpdmVyXFxuIDIyMjpcXHRcXHQgIEFQSXMgZXh0ZW5zaW9uOyB0aGUgZmlsZSdzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXFxuIDIyMzpcXHRcXHQgIGRyaXZlci5cXG4gMjI0OlxcdFxcbiAyMjU6XFx0Y29uZmlnIEdFTkVSSUNfQVJDSF9UT1BPTE9HWVxcbiAyMjY6XFx0XFx0Ym9vbFxcbiAyMjc6XFx0XFx0aGVscFxcbiAyMjg6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgYXJjaGl0ZWN0dXJlcyBjb21tb24gdG9wb2xvZ3kgY29kZTogZS5nLiwgcGFyc2luZ1xcbiAyMjk6XFx0XFx0ICBDUFUgY2FwYWNpdHkgaW5mb3JtYXRpb24gZnJvbSBEVCwgdXNhZ2Ugb2Ygc3VjaCBpbmZvcm1hdGlvbiBmb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MjYuMzM0ODM5MjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDEwNjMyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRE1BIFNoYXJlZCBCdWZmZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERNQV9TSEFSRURfQlVGRkVSYCBkZWZhdWx0cyB0byAnbicsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlLCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIGVuc3VyZSB3ZSBjYW4gY29udHJvbCB0aGF0IHNldHRpbmcuXG5cbldhaXQgYSBzZWNvbmQuLi5JIGp1c3Qgc3BvdHRlZCB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0IGl0ICpkZXBlbmRzKiBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IGNoYW5nZXMgdGhpbmdzISBJdCBtZWFucyBgTkVUX0RFVk1FTWAgd2lsbCAqb25seSogYmUgZW5hYmxlZCBpZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGFsc28gZW5hYmxlZC4gU28sIHllYWgsIGFic29sdXRlbHkuIEFkZGluZyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsIHRvIGVuc3VyZSBgTkVUX0RFVk1FTWAgY2FuIGV2ZW4gYmUgdXNlZC4gVGhhdCBkZXBlbmRlbmN5IGlzIGEgc2lnbmlmaWNhbnQgZmFjdG9yIGluIGRyaXZpbmcgb3VyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBib3RoIGNhbiBiZSB1c2VkLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBgUEFHRV9QT09MYCBhbmQgc2VlIHdoYXQgaXRzIHJlbGF0aW9uc2hpcHMgYXJlLCBidXQgdGhpcyBnaXZlcyBtZSBhIHNvbGlkIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjMwLjYzNTkwNTExM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjQ1Nzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDozMi4wOTgzNjYzNzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0Njc4OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDQ5MSBtaWdodCBob2xkIHRoZSBrZXkuIEkgZG9uJ3QgcmVjYWxsIHRoZSBleGFjdCBjb250ZXh0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIGJ1dCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhIHNwZWNpZmljIGJsb2NrIG9mIGxvZ2ljIHBlcnRhaW5pbmcgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgbG9jYXRlZCB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4gYW5kIHRoZWlyIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIGNvbmZpZ3VyYXRpb24uIEl0J3MgdGltZSB0byBzdGFydCBwYXJzaW5nIHRoZSBLY29uZmlnIGZpbGUgYW5kIG1hcCBvdXQgdGhlIHJlbGV2YW50IHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDozNy41NDUxNTgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4NTpcXHRcXHQgIHdpdGggdGhlIGhlbHAgb2YgQlBGIHByb2dyYW1zLlxcbiA0ODY6XFx0XFxuIDQ4NzpcXHRjb25maWcgTkVUX0RFVkxJTktcXG4gNDg4OlxcdFxcdGJvb2xcXG4gNDg5OlxcdFxcdGRlZmF1bHQgblxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRjb25maWcgUEFHRV9QT09MXFxuIDQ5MjpcXHRcXHRib29sXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG4gNDk1OlxcdFxcdGRlZmF1bHQgblxcbiA0OTY6XFx0XFx0Ym9vbCBcXFwiUGFnZSBwb29sIHN0YXRzXFxcIlxcbiA0OTc6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gNDk4OlxcdFxcdGhlbHBcXG4gNDk5OlxcdFxcdCAgRW5hYmxlIHBhZ2UgcG9vbCBzdGF0aXN0aWNzIHRvIHRyYWNrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgcmVjeWNsaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjM3LjU0NTIyNTg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzI4Njg5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiwgYW5kIGRlZmF1bHRzIHRvICduJy4gSSBrbm93IGRyaXZlcnMgdHlwaWNhbGx5IHNlbGVjdCBpdC4gVG8gcGxheSBpdCBzYWZlLCBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGp1c3QgYWRkaW5nIGl0IHRvIGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgZ2l2ZW4gdGhhdCBpdCdzIHNlbGVjdGVkIGJ5ICptYW55KiBkcml2ZXJzLCBqdXN0IGxpc3RpbmcgaXQgbWlnaHQgYmUgYSBtb3JlIHJvYnVzdCBhcHByb2FjaC5cblxuVGhlbiBJIHJlYWxpemVkIGEgY3J1Y2lhbCBwb2ludDogYFBBR0VfUE9PTGAgbGFja3MgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGEgdXNlciBjYW4ndCBleHBsaWNpdGx5IGVuYWJsZSBpdCB0aHJvdWdoIGBtZW51Y29uZmlnYC4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFNvLCBsZXQncyBleHBsb3JlIGlmIHNvbWV0aGluZyB3ZSBjYW4gY29udHJvbCBlbmFibGVzIGl0LCBvciBpZiBsaXN0aW5nIGl0IHdpbGwgc3VmZmljZSAoc3l6a2FsbGVyIGNhbiBoYW5kbGUgY29uZmlncyB3aXRob3V0IHByb21wdHMgaWYgdGhleSdyZSBpbmRpcmVjdGx5IHNlbGVjdGVkLCBidXQgbGlzdGluZyB0aGUgc2VsZWN0aW5nIGNvbmZpZywgb3IgbGlzdGluZyBpdCBpdHNlbGYsIHdvdWxkIGJlIHByZWZlcmFibGUpLlxuXG5BaGEhIGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1BQzgwMjExYCBhbmQgbnVtZXJvdXMgRXRoZXJuZXQgZHJpdmVycy4gSW50ZXJlc3RpbmcuIFNvLCBsZXQncyBhZGQgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgdG8gb3VyIGxpc3QuXG5cbldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNoZWNrIGBETUFfU0hBUkVEX0JVRkZFUmAuIEl0IGFsc28gc2VlbXMgdG8gbGFjayBhIGRpcmVjdCBwcm9tcHQuIE9rYXksIGxldCdzIGRvdWJsZSBjaGVjayBgZHJpdmVycy9iYXNlL0tjb25maWdgLiBZdXAsIGBjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYGJvb2xgIHdpdGggYSBgZGVmYXVsdCBuYCBhbmQgbm8gZGlyZWN0IHByb21wdC4gSXQncyAqZGVmaW5pdGVseSogc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlncy4gTm93LCB3aGF0IHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ3NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjQ0LjIxODA5NzQzMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzkwOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0OjY2OidzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVInIGluIHRoZWlyIHJlc3BlY3RpdmUgS2NvbmZpZ3MuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTEyLVxcdHNlbGVjdCBIV01PTlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9ND1jb25maWcgU1lOQ19GSUxFXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cXHRzZWxlY3QgSTJDXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MTQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXFx0c2VsZWN0IFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZzo5OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVxcdHNlbGVjdCBURUdSQV9IT1NUMVhfQ09OVEVYVF9CVVNcXG4tLVxcbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcXG5kcml2ZXJzL2lpby9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkVuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXFxcIlxcbmRyaXZlcnMvaWlvL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9paW8vS2NvbmZpZy0xOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0yPW1lbnVjb25maWcgSU5GSU5JQkFORFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cXHRkZXBlbmRzIG9uICFBTFBIQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctOS1cXHRzZWxlY3QgSVJRX1BPTExcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTQ0PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cXHRkZXBlbmRzIG9uIE1NVVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc9NTE9Y29uZmlnIElPTU1VRkRfVEVTVFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXFx0ZGVwZW5kcyBvbiBJT01NVV9QVF9BTURWMT15IHx8IElPTU1VRkQ9SU9NTVVfUFRfQU1EVjFcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo1NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy01OC1cXHRzZWxlY3QgSU9NTVVGRF9EUklWRVJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTM9Y29uZmlnIFZJREVPQlVGMl9DT1JFXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy01LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xMz1jb25maWcgVklERU9CVUYyX0RNQV9DT05USUdcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yMi1cXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc9MT1jb25maWcgVklERU9fVEVHUkFfVkRFXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy04LVxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMDE9Y29uZmlnIFFDT01fRkFTVFJQQ1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMDU6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9taXNjL0tjb25maWctMzA2LVxcdHNlbGVjdCBRQ09NX1NDTVxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3RlZS9LY29uZmlnLTgtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xOTI9Y29uZmlnIFVTQl9GX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE5NC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy94ZW4vS2NvbmZpZz0xNDU9Y29uZmlnIFhFTl9HTlRERVZfRE1BQlVGXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cXHRkZXBlbmRzIG9uIFhFTl9HTlRERVYgXFx1MDAyNlxcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xcbmRyaXZlcnMveGVuL0tjb25maWc6MTQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXFxuLS1cXG5zYW1wbGVzL0tjb25maWctMjMzLVxcdHNlbGVjdCBWRklPX01ERVZcXG5zYW1wbGVzL0tjb25maWc6MjM0OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXFx0aGVscFxcbi0tXFxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcXG4tLVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZzo5OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NDUuNjc2MDExOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3NzA3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlndXJlIHRoZXNlIGtlcm5lbCBvcHRpb25zIHVzaW5nIHN5emthbGxlcidzIGBzeXota2NvbmZgIHRvb2wuIGBETUFCVUZfSEVBUFNgIG9yIGBTWU5DX0ZJTEVgIGFyZSBzdHJhaWdodGZvcndhcmQgY2hvaWNlcywgdGhleSBzZWVtIGVhc3kgdG8gZGVhbCB3aXRoLCBidXQgaG9sZCBvbiwgYE5FVF9ERVZNRU1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCdzIGEgYGRlZl9ib29sIHlgIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGl0ICpkZXBlbmRzIG9uKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBjb21wbGV4LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIEkganVzdCBsaXN0IGBORVRfREVWTUVNYCwgYHN5ei1rY29uZmAgc2hvdWxkIGF1dG9tYXRpY2FsbHkgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgZGVzaWduZWQgdG8gZW5hYmxlIGRlcGVuZGVuY2llcyB3aGVuIGl0IGNhbi4gUmlnaHQsIHRoYXQncyB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8uIEhvd2V2ZXIsIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGRvbid0IGhhdmUgcHJvbXB0cy4gVGhhdCBtZWFucyBgc3l6LWtjb25mYCBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgdGhlbSBkaXJlY3RseSB1bmxlc3MgdGhleSdyZSBzZWxlY3RlZCBieSBzb21ldGhpbmcgZWxzZS4gV2UncmUgZ2V0dGluZyBpbnRvIGEgcG90ZW50aWFsIGVkZ2UgY2FzZSB0aGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcGxheSBpdCBzYWZlIGZvciBub3cuIEp1c3QgdG8gYmUgY2VydGFpbiwgSSB3aWxsIGp1c3QgbGlzdCBgTkVUX0RFVk1FTWAsIGBETUFCVUZfSEVBUFNgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2VlbXMgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBicmV2aXR5IGFuZCBjb3ZlcmluZyB0aGUgYmFzZXMuXG5cbldhaXQgYSBzZWNvbmQsIHdoYXQgKmRvZXMqIHNlbGVjdCBgUEFHRV9QT09MYD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyB0aGF0IHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgc2VsZWN0aW9uIGNoYWluIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGxlYXZpbmcgYW55dGhpbmcgaW1wb3J0YW50IG91dC4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBJIGNhbid0IGlnbm9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MDQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NTEuNjMzNzIyNDE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2MjE1Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBQQUdFX1BPT0xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MzU9Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ3LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ3LVxcdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNTg3LVxcdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjEwLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cXHRzZWxlY3QgTkVUX1NIQVBFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTIxLVxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiA2NEJJVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgwLVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVxcdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTMtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MS1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc1LVxcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUEhZTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMS1cXHRzZWxlY3QgRklYRURfUEhZXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVxcdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTUzLVxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcXFwiIGlmIENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnOjY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY1OlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkwLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMC1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIzLVxcdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Nj1jb25maWcgTUxYNF9FTlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTExLVxcdHNlbGVjdCBNTFg0X0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTI5PWNvbmZpZyBNTFg1X0NPUkVfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMxLVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNTFg1X0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzM6XFx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgTUxYU1dfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXFx0c2VsZWN0IFBDU19YUENTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXFx0c2VsZWN0IFZDQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc6MzE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoyNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMjYtXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnOjI2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI3LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9MTEwPWNvbmZpZyBSVEFTRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTE1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0yOT1jb25maWcgUkFWQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZz0yNT1jb25maWcgU05JX05FVFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnOjI5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0zMC1cXHRzZWxlY3QgTUlJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cXHRzZWxlY3QgUENTX1hQQ1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTAtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnPTI2PWNvbmZpZyBURUhVVElfVE40MFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMzAtXFx0c2VsZWN0IEZXX0xPQURFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz01MD1jb25maWcgVElfQ1BTV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cXHRzZWxlY3QgTUZEX1NZU0NPTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NTY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTctXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXFx0ZGVwZW5kcyBvbiBUSV9DUFRTIHx8ICFUSV9DUFRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3MDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03MS1cXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjEwMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDMtXFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTIwND1jb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoyMDk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjEwLVxcdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjMtXFx0c2VsZWN0IERJTUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTI9Y29uZmlnIE1UNzZfQ09SRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NTMuMDg5OTQyMDg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjM0NjI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBwcm92aWRlZCBjbHVlcyBhbmQgbXkgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgbGlrZSBgUEFHRV9QT09MYCBpcyBhIGdpdmVuLiBJIGtub3cgYEJQRl9TWVNDQUxMYCB1c3VhbGx5IHRyaWdnZXJzIGl0IGlmIGBORVRgIGlzIGVuYWJsZWQsIGFuZCBgVkVUSGAgYWxzbyBpbmNsdWRlcyBpdC4gU2luY2UgYEJQRl9TWVNDQUxMYCBpcyBhIGNvbW1vbiBkZWZhdWx0IGluIHN5emthbGxlciwgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGNlcnRhaW5seSBlbmFibGVkLlxuXG5Ob3csIHdoYXQgZWxzZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBETUFfU0hBUkVEX0JVRkZFUmAuIEkga25vdyBpdCdzIHNlbGVjdGVkIGJ5IGBETUFCVUZfSEVBUFNgLCBgU1lOQ19GSUxFYCwgYERSTWAsIGBVU0JfRl9GU2AsIGBWRklPX01ERVZgLCBldGMuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCdzIGluY2x1ZGUgaXQuIEFsc28sIGJlY2F1c2Ugb2YgdGhlIHByb21wdCwgSSBtdXN0IGxpc3QgdGhlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBvdXRwdXQgYXJyYXkgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gU28gZmFyLCB0aGUgbGlzdCBpcyBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSBpZiBgTkVUX0RFVk1FTWAgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGhlcmUsIGFuZCBub3QgYWRkIGFueXRoaW5nIHJlZHVuZGFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIFRDUC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbnRyb2R1Y2VzIGEgYHNvY2tjLmRtYWJ1Zl9pZGAgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gV2hlcmUgaXMgYHNvY2tjLmRtYWJ1Zl9pZGAgc2V0PyBJIHNob3VsZCB0cmFjayB0aGlzIHZhbHVlIGRvd24gYW5kIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHNvY2tjLmRtYWJ1Zl9pZGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjAwLjAxMzQwNjc1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTgyNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFidWZfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTAzPXRoZSBuZXRsaW5rIEFQSTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjAtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTIxOlxcdGRtYWJ1Zl9pZCA9IHJzcC1cXHUwMDNlaWQ7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTIyLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTEyMy1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjQ6VGhlIG5ldGxpbmsgQVBJIHJldHVybnMgYSBkbWFidWZfaWQ6IGEgdW5pcXVlIElEIHRoYXQgcmVmZXJzIHRvIHRoaXMgZG1hYnVmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTI1LXRoYXQgaGFzIGJlZW4gYm91bmQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xNTY9U2V0dXAnLCBhbmQgdGhlIGtlcm5lbCBzaWduYWxzIHN1Y2ggdG8gdGhlIHVzZXIgdmlhIHRoZSBTQ01fREVWTUVNXyogY21zZ3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY4LVxcdFxcdFxcdFxcdCAqXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY5OlxcdFxcdFxcdFxcdCAqIGRtYWJ1Zl9jbXNnLVxcdTAwM2VkbWFidWZfaWQgaXMgdGhlIGRtYWJ1ZiB0aGVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNzAtXFx0XFx0XFx0XFx0ICogZnJhZyBsYW5kZWQgb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xOTg9QXBwbGljYXRpb25zIG1heSByZWNlaXZlIDIgY21zZ3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDAtLSBTQ01fREVWTUVNX0RNQUJVRjogdGhpcyBpbmRpY2F0ZXMgdGhlIGZyYWdtZW50IGxhbmRlZCBpbiB0aGUgZG1hYnVmIGluZGljYXRlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMTogIGJ5IGRtYWJ1Zl9pZC5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yNTA9VGhlIHVzZXIgbXVzdCBiaW5kIGEgVFggZG1hYnVmIHRvIGEgZ2l2ZW4gTklDIHVzaW5nIHRoZSBuZXRsaW5rIEFQSTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjMtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY0OiAgICAgICAgdHhfZG1hYnVmX2lkID0gcnNwLVxcdTAwM2VpZDtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY2LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjI2NzpUaGUgbmV0bGluayBBUEkgcmV0dXJucyBhIGRtYWJ1Zl9pZDogYSB1bmlxdWUgSUQgdGhhdCByZWZlcnMgdG8gdGhpcyBkbWFidWZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjgtdGhhdCBoYXMgYmVlbiBib3VuZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTMwNT1UaGUgZXhhbXBsZSBiZWxvdyBzZW5kcyAxMDI0IGJ5dGVzIGZyb20gb2Zmc2V0IDEwMCBpbnRvIHRoZSBkbWFidWYsIGFuZCAyMDQ4XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MzA2OmZyb20gb2Zmc2V0IDIwMDAgaW50byB0aGUgZG1hYnVmLiBUaGUgZG1hYnVmIHRvIHNlbmQgZnJvbSBpcyB0eF9kbWFidWZfaWQ6OlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMwNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDozMjk6ICAgICAgICooKF9fdTMyICopQ01TR19EQVRBKGNtc2cpKSA9IHR4X2RtYWJ1Zl9pZDtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MTMzPXN0YXRpYyB2b2lkIGRtYWJ1Zl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMTQ3LVxcdFxcdFxcdFxcdGlkcl9yZW1vdmUoXFx1MDAyNnZncHUtXFx1MDAzZW9iamVjdF9pZHIsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjE0ODpcXHRcXHRcXHRcXHRcXHQgICBkbWFidWZfb2JqLVxcdTAwM2VkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy0xNDktXFx0XFx0XFx0XFx0a2ZyZWUoZG1hYnVmX29iai1cXHUwMDNlaW5mbyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MzcyPXBpY2tfZG1hYnVmX2J5X251bShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTMyIGlkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTM3OS1cXHRcXHRkbWFidWZfb2JqID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmosIGxpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzozODA6XFx0XFx0aWYgKGRtYWJ1Zl9vYmotXFx1MDAzZWRtYWJ1Zl9pZCA9PSBpZCkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy0zODEtXFx0XFx0XFx0cmV0ID0gZG1hYnVmX29iajtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYz00MDQ9aW50IGludGVsX3ZncHVfcXVlcnlfcGxhbmUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDI4LVxcdFxcdHVwZGF0ZV9mYl9pbmZvKGdmeF9wbGFuZV9pbmZvLCBcXHUwMDI2ZmJfaW5mbyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjQyOTpcXHRcXHRnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkID0gZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00MzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDQxLVxcdFxcdFxcdCAgICB2Z3B1LVxcdTAwM2VpZCwga3JlZl9yZWFkKFxcdTAwMjZkbWFidWZfb2JqLVxcdTAwM2VrcmVmKSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDQyOlxcdFxcdFxcdCAgICBnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDQzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmdwdS1cXHUwMDNlZG1hYnVmX2xvY2spO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ3MS1cXHRcXHRnb3RvIG91dF9mcmVlX2luZm87XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjQ3MjpcXHRnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkID0gcmV0O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo0NzM6XFx0ZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkID0gcmV0O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00NzQtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTAwLS8qIFRvIGFzc29jaWF0ZSBhbiBleHBvc2VkIGRtYWJ1ZiB3aXRoIHRoZSBkbWFidWZfb2JqICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjUwMTppbnQgaW50ZWxfdmdwdV9nZXRfZG1hYnVmKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxMS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTEyOlxcdGRtYWJ1Zl9vYmogPSBwaWNrX2RtYWJ1Zl9ieV9udW0odmdwdSwgZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTEzLVxcdGlmIChkbWFidWZfb2JqID09IE5VTEwpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTE0OlxcdFxcdGd2dF92Z3B1X2VycihcXFwiaW52YWxpZCBkbWFidWYgaWQ6JWRcXFxcblxcXCIsIGRtYWJ1Zl9pZCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxNS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTU1Mi1cXHRcXHQgICAgXFxcIiAgICAgICAgZmlsZSBjb3VudDogJWxkLCBHRU0gcmVmOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTUzOlxcdFxcdCAgICB2Z3B1LVxcdTAwM2VpZCwgZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01NTQtXFx0XFx0ICAgIGtyZWZfcmVhZChcXHUwMDI2ZG1hYnVmX29iai1cXHUwMDNla3JlZiksXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9NTcyPXZvaWQgaW50ZWxfdmdwdV9kbWFidWZfY2xlYW51cChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODEtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjU4MjpcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZ2Z3B1LVxcdTAwM2VvYmplY3RfaWRyLCBkbWFidWZfb2JqLVxcdTAwM2VkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODMtXFx0XFx0bGlzdF9kZWwocG9zKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaD01OT1zdHJ1Y3QgaW50ZWxfdmdwdV9kbWFidWZfb2JqIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaC02MS1cXHRzdHJ1Y3QgaW50ZWxfdmdwdV9mYl9pbmZvICppbmZvO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaDo2MjpcXHRfX3UzMiBkbWFidWZfaWQ7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5oLTYzLVxcdHN0cnVjdCBrcmVmIGtyZWY7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg9Njg9aW50IGludGVsX3ZncHVfcXVlcnlfcGxhbmUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaDo2OTppbnQgaW50ZWxfdmdwdV9nZXRfZG1hYnVmKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNzAtdm9pZCBpbnRlbF92Z3B1X2RtYWJ1Zl9jbGVhbnVwKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jPTEyNTk9c3RhdGljIGxvbmcgaW50ZWxfdmdwdV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZmaW9fZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM2NC1cXHRcXHRtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYzoxMzY1OlxcdFxcdFxcdFxcdCAgICBkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNjYtXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkbWFidWYsICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM3Ny1cXHR9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0RFVklDRV9HRVRfR0ZYX0RNQUJVRikge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzNzg6XFx0XFx0X191MzIgZG1hYnVmX2lkO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNzktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM6MTM4MDpcXHRcXHRpZiAoZ2V0X3VzZXIoZG1hYnVmX2lkLCAoX191MzIgX191c2VyICopYXJnKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xMzgxLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODI6XFx0XFx0cmV0dXJuIGludGVsX3ZncHVfZ2V0X2RtYWJ1Zih2Z3B1LCBkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzODMtXFx0fVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTE5MjQ9c3RydWN0IHNvY2tjbV9jb29raWUge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTE5MjktXFx0dTMyIHByaW9yaXR5O1xcbmluY2x1ZGUvbmV0L3NvY2suaDoxOTMwOlxcdHUzMiBkbWFidWZfaWQ7XFxuaW5jbHVkZS9uZXQvc29jay5oLTE5MzEtfTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaD0yMz1zdHJ1Y3QgZG1hYnVmX2Ntc2cge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Vpby5oLTI5LVxcdFxcdFxcdFxcdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaDozMDpcXHRfX3UzMiAgZG1hYnVmX2lkO1xcdC8qIGRtYWJ1ZiBpZCB0aGlzIGZyYWcgYmVsb25ncyB0by4gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMzEtXFx0X191MzIgZmxhZ3M7XFx0XFx0LyogQ3VycmVudGx5IHVudXNlZC4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD04MTE9c3RydWN0IHZmaW9fZGV2aWNlX2dmeF9wbGFuZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMxLVxcdFxcdF9fdTMyIHJlZ2lvbl9pbmRleDtcXHQvKiByZWdpb24gaW5kZXggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjgzMjpcXHRcXHRfX3UzMiBkbWFidWZfaWQ7XFx0LyogZG1hLWJ1ZiBpZCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMzLVxcdH07XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg0Mi0gKiBSZXR1cm4gYSBuZXcgZG1hLWJ1ZiBmaWxlIGRlc2NyaXB0b3IgZm9yIGFuIGV4cG9zZWQgZ3Vlc3QgZnJhbWVidWZmZXJcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg0MzogKiBkZXNjcmliZWQgYnkgdGhlIHByb3ZpZGVkIGRtYWJ1Zl9pZC4gVGhlIGRtYWJ1Zl9pZCBpcyByZXR1cm5lZCBmcm9tIFZGSU9fXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NDQtICogREVWSUNFX1FVRVJZX0dGWF9QTEFORSBhcyBhIHRva2VuIG9mIHRoZSBleHBvc2VkIGd1ZXN0IGZyYW1lYnVmZmVyLlxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9Mzg0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYzozODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg2LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTM5MS1cXG5uZXQvY29yZS9kZXZtZW0uYzozOTI6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1ZihkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5jLTM5My1cXHRpZiAoIWJpbmRpbmcgfHwgIWJpbmRpbmctXFx1MDAzZXR4X3ZlYykge1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTMxMTUtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29jay5jOjMxMTY6XFx0XFx0c29ja2MtXFx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbm5ldC9jb3JlL3NvY2suYy0zMTE3LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNDctXFx0XFx0XFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcXG5uZXQvaXB2NC90Y3AuYzoxMTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAhc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE0OS1cXHRcXHRcXHRpZiAoIXVhcmcpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTctXFxubmV0L2lwdjQvdGNwLmM6MTE1ODpcXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE3NS1cXG5uZXQvaXB2NC90Y3AuYzoxMTc2OlxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L3RjcC5jLTExNzctXFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI1MDM9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjYwMi1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjYwMzpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDQtXFxuLS1cXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYz0xMTAxPXN0YXRpYyBpbnQgbWJvY2hzX3F1ZXJ5X2dmeF9wbGFuZShzdHJ1Y3QgbWRldl9zdGF0ZSAqbWRldl9zdGF0ZSxcXG4tLVxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExMzQtXFx0XFx0cGxhbmUtXFx1MDAzZXNpemVcXHQgICAgICA9IDA7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTEzNTpcXHRcXHRwbGFuZS1cXHUwMDNlZG1hYnVmX2lkICAgICAgPSAwO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExMzYtXFx0XFx0Z290byBkb25lO1xcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTE1MS1cXHRwbGFuZS1cXHUwMDNlc2l6ZVxcdCAgICAgID0gZG1hYnVmLVxcdTAwM2Vtb2RlLnNpemU7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1MjpcXHRwbGFuZS1cXHUwMDNlZG1hYnVmX2lkICAgICAgPSBkbWFidWYtXFx1MDAzZWlkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTMtXFxuLS1cXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTU1LVxcdGlmIChwbGFuZS1cXHUwMDNlZHJtX3BsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSBcXHUwMDI2XFx1MDAyNlxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTY6XFx0ICAgIG1kZXZfc3RhdGUtXFx1MDAzZWFjdGl2ZV9pZCAhPSBwbGFuZS1cXHUwMDNlZG1hYnVmX2lkKSB7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTE1Ny1cXHRcXHRkZXZfZGJnKG1kZXZfc3RhdGUtXFx1MDAzZXZkZXYuZGV2LCBcXFwiJXM6IHByaW1hcnk6ICVkID1cXHUwMDNlICVkXFxcXG5cXFwiLFxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTg6XFx0XFx0XFx0X19mdW5jX18sIG1kZXZfc3RhdGUtXFx1MDAzZWFjdGl2ZV9pZCwgcGxhbmUtXFx1MDAzZWRtYWJ1Zl9pZCk7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1OTpcXHRcXHRtZGV2X3N0YXRlLVxcdTAwM2VhY3RpdmVfaWQgPSBwbGFuZS1cXHUwMDNlZG1hYnVmX2lkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNjAtXFx0fVxcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTE4OD1zdGF0aWMgbG9uZyBtYm9jaHNfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI2Ni1cXHR7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI2NzpcXHRcXHR1MzIgZG1hYnVmX2lkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNjgtXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI2OTpcXHRcXHRpZiAoZ2V0X3VzZXIoZG1hYnVmX2lkLCAoX191MzIgX191c2VyICopYXJnKSlcXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMjcwLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNzEtXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI3MjpcXHRcXHRyZXR1cm4gbWJvY2hzX2dldF9nZnhfZG1hYnVmKG1kZXZfc3RhdGUsIGRtYWJ1Zl9pZCk7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI3My1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEwMT1zdGF0aWMgdW5zaWduZWQgaW50IGlmaW5kZXg7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDI6c3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDM6c3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNC1zdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz02OTg9c3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy03MzEtXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJnb3QgZG1hYnVmIGlkPSVkXFxcXG5cXFwiLCByc3AtXFx1MDAzZWlkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjczMjpcXHRkbWFidWZfaWQgPSByc3AtXFx1MDAzZWlkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz03NDY9c3RhdGljIGludCBiaW5kX3R4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy03NzQtXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJnb3QgdHggZG1hYnVmIGlkPSVkXFxcXG5cXFwiLCByc3AtXFx1MDAzZWlkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjc3NTpcXHR0eF9kbWFidWZfaWQgPSByc3AtXFx1MDAzZWlkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzc2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz04NDc9c3RhdGljIGludCBkb19zZXJ2ZXIoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMS1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEwMTI6XFx0XFx0XFx0XFx0XFxcInJlY2VpdmVkIGZyYWdfcGFnZT0lbGx1LCBpbl9wYWdlX29mZnNldD0lbGx1LCBmcmFnX29mZnNldD0lbGx1LCBmcmFnX3NpemU9JXUsIHRva2VuPSV1LCB0b3RhbF9yZWNlaXZlZD0lbHUsIGRtYWJ1Zl9pZD0ldVxcXFxuXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTMtXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTYtXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfc2l6ZSwgZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfdG9rZW4sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE3OlxcdFxcdFxcdFxcdHRvdGFsX3JlY2VpdmVkLCBkbWFidWZfY21zZy1cXHUwMDNlZG1hYnVmX2lkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE5OlxcdFxcdFxcdGlmIChkbWFidWZfY21zZy1cXHUwMDNlZG1hYnVmX2lkICE9IGRtYWJ1Zl9pZCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAyMDpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcInJlY2VpdmVkIG9uIHdyb25nIGRtYWJ1Zl9pZDogZmxvdyBzdGVlcmluZyBlcnJvclxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAyMS1cXHRcXHRcXHRcXHRnb3RvIGVycl9jbG9zZV9jbGllbnQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM5MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzOTE6XFx0XFx0ZGRtYWJ1ZiA9IHR4X2RtYWJ1Zl9pZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjAxLjQ0OTIzNzQ1MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU3NjQxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBETUEtQlVGIElEcyB3aXRoIFNDTV9ERVZNRU1fRE1BQlVGKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYHNvY2tjLmRtYWJ1Zl9pZGAgZ2V0cyBzZXQgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgaXQncyBoYXBwZW5pbmcgZHVyaW5nIGEgYHNlbmRtc2dgIG9wZXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19zb2NrX2Ntc2dfc2VuZGAsIGxpa2VseSB3aGVuIGEgY29udHJvbCBtZXNzYWdlIG9mIHR5cGUgYFNDTV9ERVZNRU1fRE1BQlVGYCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykgaXMgZW5jb3VudGVyZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIGBDTVNHX0RBVEEoY21zZylgIG1hY3JvIGlzIGludm9sdmVkLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZSB0byBjb25maXJtIHRoaXMuIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTE2LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nIGFyb3VuZCB0aGUgY21zZyBoYW5kbGluZyBsb2dpYy4uLiBJJ20gcHJldHR5IHN1cmUgdGhlIGFuc3dlcidzIGluIHRoZXJlLiBJIGJldCBpdCBpcyBzZXQgd2hlbiB0aGUgY21zZyBpcyBoYW5kbGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjA3LjIwNjg4MTE1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMDA6XFx0XFx0XFx0c29ja2MtXFx1MDAzZXRzZmxhZ3MgfD0gU09DS0NNX0ZMQUdfVFNfT1BUX0lEO1xcbjMxMDE6XFx0XFx0XFx0YnJlYWs7XFxuMzEwMjpcXHRcXHQvKiBTQ01fUklHSFRTIGFuZCBTQ01fQ1JFREVOVElBTFMgYXJlIHNlbWFudGljYWxseSBpbiBTT0xfVU5JWC4gKi9cXG4zMTAzOlxcdFxcdGNhc2UgU0NNX1JJR0hUUzpcXG4zMTA0OlxcdFxcdGNhc2UgU0NNX0NSRURFTlRJQUxTOlxcbjMxMDU6XFx0XFx0XFx0YnJlYWs7XFxuMzEwNjpcXHRcXHRjYXNlIFNPX1BSSU9SSVRZOlxcbjMxMDc6XFx0XFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4zMTA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMDk6XFx0XFx0XFx0aWYgKCFza19zZXRfcHJpb19hbGxvd2VkKHNrLCAqKHUzMiAqKUNNU0dfREFUQShjbXNnKSkpXFxuMzExMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjMxMTE6XFx0XFx0XFx0c29ja2MtXFx1MDAzZXByaW9yaXR5ID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxuMzExMjpcXHRcXHRcXHRicmVhaztcXG4zMTEzOlxcdFxcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XFxuMzExNDpcXHRcXHRcXHRpZiAoY21zZy1cXHUwMDNlY21zZ19sZW4gIT0gQ01TR19MRU4oc2l6ZW9mKHUzMikpKVxcbjMxMTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzExNjpcXHRcXHRcXHRzb2NrYy1cXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxuMzExNzpcXHRcXHRcXHRicmVhaztcXG4zMTE4OlxcdFxcdGRlZmF1bHQ6XFxuMzExOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTIwOlxcdFxcdH1cXG4zMTIxOlxcdFxcdHJldHVybiAwO1xcbjMxMjI6XFx0fVxcbjMxMjM6XFx0RVhQT1JUX1NZTUJPTChfX3NvY2tfY21zZ19zZW5kKTtcXG4zMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTowNy4yMDcxMjY3MjlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcxMjA5OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IGBTQ01fREVWTUVNX0RNQUJVRmAgKmlzKiBpbmRlZWQgdXNlZCBpbiBgc2VuZG1zZ2AgdG8gcGFzcyB0aGUgYGRtYWJ1Zl9pZGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIHRoYXQgYC1FT1BOT1RTVVBQYCByZXR1cm4gd2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCBhbmQgYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc2V0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6eiB0YXJnZXQuXCJcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLiBJIHJlbWVtYmVyIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyB0aGUgb25lIGNhbGxlZCB3aGVuIHdlIGJpbmQgdGhlIGRtYWJ1ZiB0byB0aGUgbmV0ZGV2LCB3aGlsZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZ2V0cyBjYWxsZWQgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFNpbmNlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyBhIHJlYWwgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCB3aGVuIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgZW5hYmxlZCwgdGhhdCBsb29rcyBwcm9taXNpbmcgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBBaCwgaXQncyBub3Qgc3RhdGljOlxuXG5gYGBjXG5zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuYGBgXG5cblBlcmZlY3QsIHRoYXQgbWFrZXMgaXQgYSBncmVhdCBjaG9pY2UuIEkgYWxzbyBjb25zaWRlcmVkIGBfX3NvY2tfY21zZ19zZW5kYCwgYnV0IHRoYXQncyBqdXN0IHRvbyBnZW5lcmljLiBJJ20gdGhpbmtpbmcgYWJvdXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJ1dCBpdCdzIGEgaG90IHBhdGgsIHNvIEknZCBwcmVmZXIgdG8gYXZvaWQgZm9jdXNpbmcgb24gc29tZXRoaW5nIHNvIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHVubGVzcyBpdCBiZWNvbWVzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgYWxzbyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBiaW5kaW5nLCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQncyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjE1LjkxOTIyOTYwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTgyOlxcdFxcbiAxODM6XFx0ZXJyX2Nsb3NlX3J4cTpcXG4gMTg0OlxcdFxcdG5ldGlmX21wX2Nsb3NlX3J4cShkZXYsIHJ4cV9pZHgsIFxcdTAwMjZtcF9wYXJhbXMpO1xcbiAxODU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxODk6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAxOTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuIDE5MTpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAxOTI6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbiAxOTM6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gMTk0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE5NTpcXHR7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4gMTk3OlxcdFxcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgbmlvdl9zaGlmdDtcXG4gMTk4OlxcdFxcdHN0YXRpYyB1MzIgaWRfYWxsb2NfbmV4dDtcXG4gMTk5OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjE1LjkxOTMwODM2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg4MjIyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipGb2N1c2luZyBJbjogRE1BIEJ1ZmZlciBCaW5kaW5nKipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkLCBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IHdpdGguIEl0J3MgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBzcGFjZS4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IG9uZSBvdXQuXG5cbkFuZCwgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIHRoZW4gbWFuYWdlZCBpbiB0aGUgcXVldWUsIHNvIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYmluZGluZyBhbmQgcXVldWluZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NToyMC4yMDc1MzMyODJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdFxcdG5ldGlmX21wX2Nsb3NlX3J4cShiaW5kaW5nLVxcdTAwM2VkZXYsIHJ4cV9pZHgsIFxcdTAwMjZtcF9wYXJhbXMpO1xcbiAxNTE6XFx0XFx0fVxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXJlZik7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcXG4gMTYxOlxcdFxcdFxcdC5tcF9wcml2XFx0PSBiaW5kaW5nLFxcbiAxNjI6XFx0XFx0XFx0Lm1wX29wc1xcdFxcdD0gXFx1MDAyNmRtYWJ1Zl9kZXZtZW1fb3BzLFxcbiAxNjM6XFx0XFx0fTtcXG4gMTY0OlxcdFxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cTtcXG4gMTY1OlxcdFxcdHUzMiB4YV9pZHg7XFxuIDE2NjpcXHRcXHRpbnQgZXJyO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHRpZiAoYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxcbiAxNjk6XFx0XFx0XFx0bXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVIFxcdTAwM2NcXHUwMDNjIGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjIwLjIwNzYwNjgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTgyMTA4ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEZXZtZW0gVENQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGRldm1lbSBUQ1AgcGF0Y2ggYW5kIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBrZXkgYXNwZWN0cy4gSXQgbG9va3MgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgZGVmaW5pdGVseSBhIHJlbGV2YW50IGZ1bmN0aW9uLCBidXQgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2BcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcblxuT24gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSwgdGhlIHBhdGNoIHJlbGllcyBvbiBhIGZldyBjcml0aWNhbCBjb25maWdzOlxuXG4qICAgYE5FVF9ERVZNRU1gXG4qICAgYERNQV9TSEFSRURfQlVGRkVSYFxuKiAgIGBQQUdFX1BPT0xgXG5cbkkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBORVRfREVWTUVNYCAqZGVwZW5kcyBvbiogYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhbmQgKnNlbGVjdHMqIGBHRU5FUklDX0FMTE9DQVRPUmAuIFRoYXQgY29uZmlybXMgdGhhdCBzaW1wbHkgZW5hYmxpbmcgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAgcHJvdmlkZXMgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuTm93LCB0aGUgYWN0dWFsIGNoYW5nZSBpcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIGFkZGluZyB0aGlzIG5ldyBjaGVjazpcblxuYGBgY1xuICAgIGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbiAgICBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuICAgIFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuICAgIFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuICAgIFx0XHRiaW5kaW5nID0gTlVMTDtcbiAgICBcdFx0Z290byBvdXRfZXJyO1xuICAgIFx0fVxuICAgIFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuICAgIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiAgICBcdFx0Z290byBvdXRfZXJyO1xuICAgIFx0fVxuICAgIH1cbmBgYFxuXG5FZmZlY3RpdmVseSwgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzbid0IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoZSByZWFzb25pbmcgbWFrZXMgcGVyZmVjdCBzZW5zZTogaXQncyB3aXRoaW4gdGhlIGNvcmUgVENQIGBzZW5kbXNnYCBwYXRoIGFuZCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gZmVhdHVyZSwgYWNjZXNzaWJsZSB2aWEgdXNlcnNwYWNlIGBzZW5kbXNnYCBhbmQgYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNnLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJIG1hZGUgc3VyZSBgTkVUX0RFVk1FTWAgZG9lc24ndCByZWx5IG9uIGBYRFBfU09DS0VUU2Agb3IgYW55dGhpbmcgdW5leHBlY3RlZC4gQWxzbywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBTQ01fREVWTUVNX0RNQUJVRmAgY2FuIGJlIHVzZWQgd2l0aG91dCBgTkVUX0RFVk1FTWAuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIHRvIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMjQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NToyOS4xODk3MTgyMjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDQwNjkyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NNX0RFVk1FTV9ETUFCVUZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTU2PVNldHVwJywgYW5kIHRoZSBrZXJuZWwgc2lnbmFscyBzdWNoIHRvIHRoZSB1c2VyIHZpYSB0aGUgU0NNX0RFVk1FTV8qIGNtc2dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE1OS1cXHRcXHRcXHRpZiAoY20tXFx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1NPQ0tFVCB8fFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE2MDpcXHRcXHRcXHRcXHQoY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0RNQUJVRiBcXHUwMDI2XFx1MDAyNlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE2MS1cXHRcXHRcXHRcXHQgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0xJTkVBUikpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY2OlxcdFxcdFxcdGlmIChjbS1cXHUwMDNlY21zZ190eXBlID09IFNDTV9ERVZNRU1fRE1BQlVGKSB7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY3LVxcdFxcdFxcdFxcdC8qIEZyYWcgbGFuZGVkIGluIGRtYWJ1Zi5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xOTktXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjAwOi0gU0NNX0RFVk1FTV9ETUFCVUY6IHRoaXMgaW5kaWNhdGVzIHRoZSBmcmFnbWVudCBsYW5kZWQgaW4gdGhlIGRtYWJ1ZiBpbmRpY2F0ZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDEtICBieSBkbWFidWZfaWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yMTI9RnJlZWluZyBmcmFnc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxNTpGcmFncyByZWNlaXZlZCB2aWEgU0NNX0RFVk1FTV9ETUFCVUYgYXJlIHBpbm5lZCBieSB0aGUga2VybmVsIHdoaWxlIHRoZSB1c2VyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE2LXByb2Nlc3NlcyB0aGUgZnJhZy4gVGhlIHVzZXIgbXVzdCByZXR1cm4gdGhlIGZyYWcgdG8gdGhlIGtlcm5lbCB2aWFcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTI5Mz1TZW5kaW5nIGRhdGFcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTI5NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyOTY6RGV2bWVtIGRhdGEgaXMgc2VudCB1c2luZyB0aGUgU0NNX0RFVk1FTV9ETUFCVUYgY21zZy5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yOTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0zMDY9ZnJvbSBvZmZzZXQgMjAwMCBpbnRvIHRoZSBkbWFidWYuIFRoZSBkbWFidWYgdG8gc2VuZCBmcm9tIGlzIHR4X2RtYWJ1Zl9pZDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMjUtICAgICAgIGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMyNjogICAgICAgY21zZy1cXHUwMDNlY21zZ190eXBlID0gU0NNX0RFVk1FTV9ETUFCVUY7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMzI3LSAgICAgICBjbXNnLVxcdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xcbi0tXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NS0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQ3OVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDY6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlxcdFNPX0RFVk1FTV9ETUFCVUZcXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQ3LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0ODBcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1Ni0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQ3OVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE1NzojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1OC0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFxcdDgwXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MS0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQweDQwNEZcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQzLSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0MHg0MDUwXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM4LSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRiAgICAgICAgIDB4MDA1OFxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDAtI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRUQgICAgICAgMHgwMDU5XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTQwLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDItI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTMwMjY9aW50IF9fc29ja19jbXNnX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0zMTEyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL3NvY2suYzozMTEzOlxcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XFxubmV0L2NvcmUvc29jay5jLTMxMTQtXFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDAtI2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXFx0NzlcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQxOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0Mi0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFxcdDgwXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05ODEtXFx0XFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9TT0NLRVQgfHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjk4MjpcXHRcXHRcXHQgICAgKGNtLVxcdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9ETUFCVUYgXFx1MDAyNlxcdTAwMjZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk4My1cXHRcXHRcXHQgICAgIGNtLVxcdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9MSU5FQVIpKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4Ny1cXHRcXHRjbXNnLVxcdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzODg6XFx0XFx0Y21zZy1cXHUwMDNlY21zZ190eXBlID0gU0NNX0RFVk1FTV9ETUFCVUY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMzg5LVxcdFxcdGNtc2ctXFx1MDAzZWNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKF9fdTMyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjMxLjg5Mzc5MTgwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5OTQ0MTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGRldm1lbWAgVENQIEZlYXR1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIGhvdyB0aGUgYFNDTV9ERVZNRU1fRE1BQlVGYCBjb250cm9sIG1lc3NhZ2UgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYF9fc29ja19jbXNnX3NlbmRgIHBhcnNlcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc29ja2MuZG1hYnVmX2lkYCB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29uZGl0aW9uYWwuIFRoZSByZWFsIGNydXggb2YgdGhpcyBsaWVzIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuXG5cbklmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgKm5vdCogZW5hYmxlZCwgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoaXMgaXMgdGhlIGtleS4gV2l0aG91dCBgQ09ORklHX05FVF9ERVZNRU1gLCB0aGUgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBiZWNhdXNlIHRoZSBjaGVjayBgaWYgKElTX0VSUihiaW5kaW5nKSlgIHdpbGwgaW1tZWRpYXRlbHkgaGl0IHRoZSBlcnJvciBjYXNlIGJlZm9yZSByZWFjaGluZyB0aGUgY2hlY2sgZm9yIGB6YyAhPSBNU0dfWkVST0NPUFlgLiBUaGlzIHRlbGxzIG1lIHRoYXQgYENPTkZJR19ORVRfREVWTUVNYCBpcyAqYWJzb2x1dGVseSogcmVxdWlyZWQgdG8gZXZlbiByZWFjaCB0aGUgbG9naWMgd2hlcmUgdGhlIGBNU0dfWkVST0NPUFlgIGNoZWNrIGlzIGludHJvZHVjZWQuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQncyBiZWluZyBpbnRyb2R1Y2VkIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNlbmRtc2dgIHdpdGggYFNDTV9ERVZNRU1fRE1BQlVGYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgaWYgYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBXb3J0aEZ1enppbmc6IHRydWVgIGdpdmVuIHRoaXMuIFRoZSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIFRoZSBrZXkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIGFyZSBmb3IgKmJpbmRpbmcqIHRoZSBETUEgYnVmZmVyIHRvIHRoZSBuZXR3b3JrIGRldmljZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UgZm9yIGRldm1lbSBUQ1AuIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyB0aGVuIGNhbGxlZCBkdXJpbmcgYHNlbmRtc2dgIHRvIHZhbGlkYXRlIHRoZSBkbWFidWYgSUQuIEV4Y2VsbGVudCwgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgc3RhdGljPyBOb3BlLCBpdCdzIG5vdC4gSXQncyBleHBvcnRlZCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGFzIGl0J3MgdGhlIGludGVyZmFjZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBkbWFidWYuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIGBORVRfREVWTUVNYCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIEknbGwgbWFrZSBzdXJlIHRvIGxpc3QgYWxsIHRocmVlIGluIGBFbmFibGVDb25maWdzYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTE0LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4wOTMyMzUzMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjY1NDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiBgTVNHX1pFUk9DT1BZYCBpcyBub3Qgc2V0IHdoZW4gYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRDUCBzZW5kbXNnIHBhdGggcmVsYXRlZCB0byB0aGUgZGV2bWVtIFRDUCBmZWF0dXJlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIHdpdGggYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4xNjU4OTcxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMDAzNjUwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4xNjcwMTIxMzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQxOTkyNDU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uZjQwMzgzMGFmNjVmNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjIsNiArMTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjQ0LjE2NzAxNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4ODgxOTA2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gVGhpcyBmdW5jdGlvbiwgYXMgSSByZWNhbGwsIGlzIHRoZSBjb3JlIG9mIHRoZSBUQ1Agc2VuZCBwYXRoIG9uIHRoZSBJUHY0IHN0YWNrLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBjaGVjazpcblxuYGBgY1xuXHRcdFx0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XG5cdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuXHRcdFx0XHR9XG5gYGBcblxuVGhpcyBpcyBiZWluZyBpbnNlcnRlZCB3aXRoaW4gYSBjb25kaXRpb25hbCBibG9jayB0aGF0IGRlYWxzIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGJpbmRpbmdgLCB3aGljaCBpbXBsaWVzIHNvbWUga2luZCBvZiBzb2NrZXQtbGV2ZWwgYmluZGluZyBjb25maWd1cmF0aW9uIG9yIHBvc3NpYmx5IGFkZHJlc3Mgc2VsZWN0aW9uLiAgSXQgc2VlbXMgdG8gYmUgbmVzdGVkIHdpdGhpbiBhIGxhcmdlciBgaWZgIGJsb2NrLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIHNvY2tldCBpcyBjb25maWd1cmVkLiBNb3JlIGNvbnRleHQgaXMgbmVlZGVkIHRvIHNlZSB3aGF0IGBiaW5kaW5nYCByZWZlcnMgdG8gaGVyZS5cblxuVGhlIGtleSBwYXJ0LCBob3dldmVyLCBpcyB0aGUgYGlmICh6YyAhPSBNU0dfWkVST0NPUFkpYCBjaGVjay4gIElmIGB6Y2AgaXNuJ3QgYE1TR19aRVJPQ09QWWAsIHRoZW4gYW4gYC1FT1BOT1RTVVBQYCBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHdlIGp1bXAgdG8gYG91dF9lcnJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY29kZSBwYXRoIGlzIGJlaW5nIGV4cGxpY2l0bHkgKmxpbWl0ZWQqIHRvIG9ubHkgaGFuZGxpbmcgemVyby1jb3B5IG9wZXJhdGlvbnMuICBTbywgdGhpcyBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgbG9naWMgd2l0aGluIHRoaXMgYmxvY2sgb2YgY29kZSBpcyAqb25seSogYXBwbGljYWJsZSBpbiB0aGUgY29udGV4dCBvZiB6ZXJvLWNvcHksIGFuZCBvdGhlciBzZW5kIHBhdGhzIHdpbGwgaGl0IHRoaXMgXCJub3Qgc3VwcG9ydGVkXCIgZXJyb3IsIGluZGljYXRpbmcgYSBmZWF0dXJlIHRoYXQgaXMgbm90IGltcGxlbWVudGVkICh5ZXQpLCBvciBpbnRlbmRlZCBvbmx5IGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGxhcmdlciBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgYHpjYCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTY6MDIuMDU1MjA4NDY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcxMDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTExNS1cXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTI0NC1cXG5uZXQvaXB2NC90Y3AuYzoxMjQ1OlxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxubmV0L2lwdjQvdGNwLmMtMTI0Ni1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDctfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDQ5LVxcbm5ldC9pcHY0L3RjcC5jPTE0NTA9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NTQtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxNDU1OlxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDU2LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjAyLjEwNjkyNjkzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI3NzMyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29yZSoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG5ldC9pcHY0L3RjcC5jYCDigJMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxMTYyLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yIGEgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZywgcGVyaGFwcyByZWxhdGVkIHRvIGNvbmdlc3Rpb24gY29udHJvbCwgd2luZG93aW5nLCBvciByZXRyYW5zbWlzc2lvbiBzdHJhdGVnaWVzLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIGxpbmUgbnVtYmVyIGJlY2F1c2UgSSdtIGVpdGhlcjpcblxuKiAgIENoYXNpbmcgZG93biBhIGxlYWQgZnJvbSBhIHByZXZpb3VzIGRlYnVnZ2luZyBzZXNzaW9uLCBhIHBlcmZvcm1hbmNlIHJlcG9ydCwgb3IgZXZlbiBhIGNyYXNoIGR1bXAsIGFuZCB0aGlzIGxpbmUgaXMgZmxhZ2dlZCBhcyBpbnRlcmVzdGluZy5cbiogICBEaWdnaW5nIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBhIHNwZWNpZmljIFRDUCBmZWF0dXJlIHRoYXQgSSdtIGN1cnJlbnRseSB3b3JraW5nIHdpdGgsIGJlIHRoYXQgZm9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciB1bmRlcnN0YW5kaW5nIGJlaGF2aW91ciBpbiBzb21lIHVudXN1YWwgc2NlbmFyaW8gSSd2ZSBnb3QgaW4gbWluZC5cbiogICBSZXZpZXdpbmcgdGhlIGNvZGUgYXMgcGFydCBvZiBhIGdlbmVyYWwgYXVkaXQgb3IgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHNwZWNpZmljIGNvbnRleHQgYXJvdW5kIGxpbmUgMTE2MiBpcyB0aGUga2V5LiBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGxpa2VseSBgc3RydWN0IHNvY2tgLCBgc3RydWN0IHRjcF9zb2NrYCwgYW5kIG1heWJlIGV2ZW4gYHN0cnVjdCBza19idWZmYCksIGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSdtIGV4cGVjdGluZyB0byBpbW1lZGlhdGVseSBzY2FuIGZvcjpcblxuKiAgIENvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbXkgdGVzdCBjYXNlcy5cbiogICBDcml0aWNhbCByZXNvdXJjZSBhbGxvY2F0aW9ucyBvciByZWxlYXNlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLlxuKiAgIEFueSB1bnVzdWFsIG9yIGluZWZmaWNpZW50IGFsZ29yaXRobXMuXG4qICAgRGF0YSByYWNlcyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGltbWVkaWF0ZSBhaW0gaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgaW1wb3J0YW50LCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgVENQIHN0YWNrLiBJJ20gYXJtZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIFRDUC9JUCwgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaG9wZWZ1bGx5LCBzb21lIHByaW9yIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSB0byBtYWtlIHNlbnNlIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjA3LjgzNDY2MjQ4N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE0MTpcXHRcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjExNDI6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZy1cXHUwMDNlbXNnX3VidWY7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE0NTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcXG4xMTQ2OlxcdFxcdFxcdFxcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcXG4xMTQ3OlxcdFxcdFxcdFxcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xcbjExNDk6XFx0XFx0XFx0XFx0aWYgKCF1YXJnKSB7XFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTUyOlxcdFxcdFxcdFxcdH1cXG4xMTUzOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE1NDpcXHRcXHRcXHRcXHRcXHR6YyA9IE1TR19aRVJPQ09QWTtcXG4xMTU1OlxcdFxcdFxcdFxcdGVsc2VcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxuMTE1OTpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxuMTE2MjpcXHRcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG4xMTYzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY1OlxcdFxcdFxcdFxcdFxcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcXG4xMTY2OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbjExNjc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjExNjg6XFx0XFx0XFx0XFx0XFx0fVxcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFx0XFx0fVxcbjExNzE6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IHNpemUpIHtcXG4xMTcyOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE3MzpcXHRcXHRcXHRcXHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XFxuMTE3NDpcXHRcXHR9XFxuMTE3NTpcXHRcXG4xMTc2OlxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcXHUwMDI2XFx1MDAyNlxcbjExNzc6XFx0XFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4xMTc4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTE3OTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4MDpcXHRcXHR9XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxcbjExODM6XFx0XFx0XFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdCAgICAhdHAtXFx1MDAzZXJlcGFpcikge1xcbjExODU6XFx0XFx0XFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xcbjExODY6XFx0XFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXFx1MDAyNlxcdTAwMjYgY29waWVkX3N5biBcXHUwMDNlIDApXFxuMTE4NzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg4OlxcdFxcdFxcdGVsc2UgaWYgKGVycilcXG4xMTg5OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTY6MDcuODM0ODcxNTI3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTMxMzY0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBaZXJvLUNvcHkgYW5kIGRtYWJ1ZiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhpcyBjb25kaXRpb25hbCBjaGVjaywgc3BlY2lmaWNhbGx5IGBpZiAoemMgIT0gTVNHX1pFUk9DT1BZKWAsIHdoZXJlIGB6Y2AgaXMgYSBmbGFnIGFuZCBgc29ja2MuZG1hYnVmX2lkYCBpcyBzZXQsIGxvb2tzIGxpa2UgYSBjb250cm9sIGZsb3cgY2hhbmdlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0IGV4cG9zZXMgb3IgZml4ZXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciB3cml0ZS5cblxuSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhpcyBjaGVjayBpcyB0aGVyZSB0byBlbmZvcmNlIHRoZSByZXF1aXJlbWVudCB0aGF0IHplcm8tY29weSAoYE1TR19aRVJPQ09QWWApIGlzIGFjdHVhbGx5IGVuYWJsZWQgYmVmb3JlIHdlIHRyeSB0byB1c2UgYSBkbWFidWYgKGBzb2NrYy5kbWFidWZfaWRgKS4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgYGRtYWJ1ZmAgdW5sZXNzIHplcm8tY29weSBpcyBzdXBwb3J0ZWQuIFNwZWNpZmljYWxseSwgaWYgemVyby1jb3B5IGlzICpub3QqIHN1cHBvcnRlZCwgdGhlbiB0aGUgYHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0dgIGlzIGZhbHNlLiBUaGlzIG1lYW5zIHRoYXQgd2UgZXhwZWN0IGB6Y2Agd2lsbCBiZSBzZXQgdG8gMC5cblxuSWYgYHpjYCBpcyAwLCB0aGVuIHRoZSBkYXRhIHdvdWxkIGJlIGNvcGllZCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSB6ZXJvLWNvcHkgcGF0aC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCBpcyB0aGF0IGRtYWJ1ZiBkYXRhICpjYW5ub3QqIGJlIGNvcGllZCBpbiB0aGUgc2FtZSB3YXksIG9yIG1heWJlIG1vcmUgYWNjdXJhdGVseSwgaXQncyBzaW1wbHkgbm90IHN1cHBvcnRlZC4gVGhpcyBpbmRpY2F0ZXMgYSBsb2dpYyBidWcgb3IsIG1vcmUgbGlrZWx5LCBhIGNoZWNrIGZvciBhbiB1bnN1cHBvcnRlZCBmZWF0dXJlIGNvbWJpbmF0aW9uLCByYXRoZXIgdGhhbiBhbnkgYXR0ZW1wdCB0byBkZWFsIHdpdGggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZGlyZWN0bHkuXG5cbkltcG9ydGFudGx5LCBgemNgIGlzIGluaXRpYWxpemVkIGxvY2FsbHksIHNvIHRoZXJlJ3Mgbm8gd2F5IGl0J3MgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBLTVNBTi4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgcG9wdWxhdGVkIGZyb20gdGhlIGBjbXNnaGRyYCBwYXJzaW5nLCB3aGljaCBJIGFtIGNvbWZvcnRhYmxlIHdpdGguIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhbiBlcnJvciByZXR1cm4gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBydWxlIG91dCB0aGlzIHNwZWNpZmljIGNoYW5nZSBhcyBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbldoaWxlIEtBU0FOIG9yIGdlbmVyYWwgZnV6emluZyAqbWlnaHQqIHVuY292ZXIgY3Jhc2hlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGlmIGBkbWFidWZgIGlzIGF0dGVtcHRlZCB3aXRob3V0IHplcm8tY29weSBzdXBwb3J0LCB0aGVzZSBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgbG9naWMgZXJyb3JzIHJlbGF0ZWQgdG8gdW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBLTVNBTiBhdHRlbnRpb24uIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA4LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjE4LjM2NjIzOTA5NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHJldHVybiAtRU9QTk9UU1VQUCBpZiBkbWFidWYgaXMgdXNlZCB3aXRob3V0IE1TR19aRVJPQ09QWSBzdXBwb3J0ICh3aGVuIGB6YyAhPSBNU0dfWkVST0NPUFlgKS4gVGhpcyBpcyBhIGxvZ2ljIGFuZCBmZWF0dXJlIHN1cHBvcnQgY2hlY2sgdGhhdCBwcmV2ZW50cyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zIHdoZW4gdXNpbmcgZG1hYnVmcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayB3b3VsZCBsaWtlbHkgYmUgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowk8chc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 11:02:01 +0000 UTC FinishedAt: 2026-08-22 11:56:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "68d8c6532659168430e489bb659c0d41de7d75fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "68d8c6532659168430e489bb659c0d41de7d75fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "0725f52f-711e-4358-89d5-510d555030bf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "net_devmem_get_binding", "net_devmem_bind_dmabuf", "net_devmem_bind_dmabuf_to_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhlZDc2MWQ2M2Y4YzU2YTUzMDA4NWNiOGQ5ODQ3ZDM4NGJjNjljNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMTo1MzoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5mNDAzODMwYWY2NWY0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTE2Miw2ICYjNDM7MTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XG4mIzQzO1x0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWQ3NjFkNjNmOGM1NmE1MzAwODVjYjhkOTg0N2QzODRiYzY5YzYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTE6NTM6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmY0MDM4MzBhZjY1ZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMTYyLDYgJiM0MzsxMTYyLDEwIEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCQliaW5kaW5nID0gTlVMTDsKIAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KJiM0MzsJCQkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewomIzQzOwkJCQkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQkJCX0KIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAodW5saWtlbHkobXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1NQTElDRV9QQUdFUykgJmFtcDsmYW1wOyBzaXplKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXB2NC90Y3AuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCB0aGlzIGNoZWNrIHdpdGhpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb246CgpgYGBjCiAJCQkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewogCQkJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgcmVqZWN0aW5nIGFueXRoaW5nICpvdGhlciogdGhhbiB6ZXJvLWNvcHkgKGBNU0dfWkVST0NPUFlgKSB3aXRoaW4gdGhpcyBmdW5jdGlvbiBub3cuJiMzNDsgVGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IgaXMgcHJldHR5IGNsZWFyOyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHNheWluZyAmIzM0O3RoaXMgaXNuJiMzOTt0IHN1cHBvcnRlZC4mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGU/IFdoYXQmIzM5O3MgdGhlIGludGVuZGVkIGVmZmVjdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhpcyBjaGFuZ2UgZnVsbHksIHNvIEkgd2lsbCBub3cgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGxpbmVzIGFyb3VuZCBsaW5lIDExNjIgaW4gYG5ldC9pcHY0L3RjcC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHRcdGVyciA9IC1FTk9CVUZTO1xuMTE1MTpcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE1MjpcdFx0XHRcdH1cbjExNTM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNTQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE1NTpcdFx0XHRcdGVsc2VcbjExNTY6XHRcdFx0XHRcdHVhcmdfdG9fbXNnemModWFyZyktXHUwMDNlemVyb2NvcHkgPSAwO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbjExNTk6XHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuMTE2MDpcdFx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuMTE2MTpcdFx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuMTE2MjpcdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbjExNjM6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2NDpcdFx0XHRcdFx0fVxuMTE2NTpcdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuMTE2NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjExNjc6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2ODpcdFx0XHRcdFx0fVxuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcdFx0fVxuMTE3MTpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE3MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNzM6XHRcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4xMTc0Olx0XHR9XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuMTE3NzpcdFx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuMTE3ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE3OTpcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgU2VuZG1zZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNoZWNrOiBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgIHdpdGhpbiB0aGF0IGV4aXN0aW5nIGJsb2NrIHRoYXQgbG9va3MgYXQgYHNvY2tjX2VycmAgYW5kIGBzb2NrYy5kbWFidWZfaWRgLiBUaGlzIGluc3RhbnRseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBkZXZtZW0gVENQYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCBpbiBUQ1AuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0IGFib3V0IGl0LiBJdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBwYXRoLiBUaGlzIGtpbmQgb2YgbW9kaWZpY2F0aW9uIGlzIHByZWNpc2VseSB3aGF0IEkgbmVlZCB0byBjb25zaWRlciBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGFsdGVyaW5nIGhvdyBUQ1Agc2VuZG1zZyBiZWhhdmVzLCBhbmQgdGhhdCAqYWx3YXlzKiB3YXJyYW50cyBhIGNsb3NlciBsb29rLgoKVGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgZGV2bWVtIFRDUGAuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdCB0byBiZSBhY3RpdmUuIFRoYXQgd2lsbCBpbmZvcm0gaG93IEkgc2V0IHVwIGFueSB0ZXN0IGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2dldF9iaW5kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTM3OT12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxubmV0L2NvcmUvZGV2bWVtLmM6Mzg0OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2Rldm1lbS5jLTM4NS1cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE1NT1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG5uZXQvY29yZS9kZXZtZW0uaC0yMzAte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTE1OC1cdFx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XG5uZXQvaXB2NC90Y3AuYzoxMTU5Olx0XHRcdFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTYwLVx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHF1ZXN0aW9uLCBidXQgdGhlIGFuc3dlciBjb3VsZCBsaWUgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVzZSB0aGUgY29uZmlnIHN5c3RlbSB0byBzZWFyY2ggZm9yIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBgZmluZGAgdG8gcGlucG9pbnQgYW55IGRpcmVjdCBtZW50aW9ucyBvZiBpdCwgdGhlbiB0cmFjZSBpdCBiYWNrIHRvIHRoZSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiByZXNwb25zaWJsZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBvcHRpb24uIElzIGl0IGEgbW9kdWxlLCBvciBidWlsdC1pbj8gV2hhdCBhcmUgdGhlIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBjb3VsZCBsZWFkIGRvd24gYSByYWJiaXQgaG9sZSBkZXBlbmRpbmcgb24gd2hhdCB0aGF0IGNvbmZpZyBvcHRpb24gZG9lcyBleGFjdGx5LCBidXQgYXQgdGhlIHZlcnkgbGVhc3QsIG15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IGluaXRpYWwgS2NvbmZpZyBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg0LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODU6ICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg2LSAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9NDA1PWluY29taW5nIGRhdGEgYW5kIHZhbGlkYXRlcyBpdCBhcyBzdWNoLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBsYXVuY2hcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjQwNjpuY2Rldm1lbSBvbiB0aGUgc2VydmVyIGJ5OjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTQwNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM1LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM2OiAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzctICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTc2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTc3Olx0XHRcdGlmIChjdHgtXHUwMDNlZGV2bWVtX29ubHkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU3OC1cdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NDQzPWRybV9wYWdlbWFwX21pZ3JhdGVfcmVtb3RlX3RvX2xvY2FsKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NDktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NTA6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ1MS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz00NzQ9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzgtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDc5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTA2PXN0cnVjdCBtaWdyYXRlX3JhbmdlX2xvYyB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTA5LVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxMDpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MTEtfTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2MjE6XHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjIyLVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRwYWdlbWFwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTQ9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTExNjpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMgPSBkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2VvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE3LVx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjE2PXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLVx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTpcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMyLVx0c3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xNDAyPXZvaWQgZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDAzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MDQ6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQwNS1cdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIHNpemVfdCBzaXplLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz03ODM9c3RhdGljIGludCB4ZV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtODA1LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgZHBhZ2VtYXBfZGV2bWVtX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy04MDctXHQuZGV2bWVtX3JlbGVhc2UgPSB4ZV9zdm1fZGV2bWVtX3JlbGVhc2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTk3MT1zdGF0aWMgYm9vbCB4ZV9zdm1fcmFuZ2VfaXNfdmFsaWQoc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTcyLVx0XHRcdFx0ICBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5NzM6XHRcdFx0XHQgIGJvb2wgZGV2bWVtX29ubHksXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzgtXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2V0aWxlX2ludmFsaWRhdGVkKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5Nzk6XHRcdCghZGV2bWVtX29ubHkgfHwgeGVfc3ZtX3JhbmdlX2hhc19wYWdlbWFwKHJhbmdlLCBkcGFnZW1hcCkpKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05ODAtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xMDUwPXN0YXRpYyBpbnQgeGVfZHJtX3BhZ2VtYXBfcG9wdWxhdGVfbW0oc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTA5Ni1cdFx0ZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoXHUwMDI2Ym8tXHUwMDNlZGV2bWVtX2FsbG9jYXRpb24sIGRldiwgbW0sXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTA5NzpcdFx0XHRcdFx0XHUwMDI2ZHBhZ2VtYXBfZGV2bWVtX29wcywgZHBhZ2VtYXAsIGVuZCAtIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEwOTgtXHRcdFx0XHRcdHByZV9taWdyYXRlX2ZlbmNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTIwNj1zdGF0aWMgaW50IF9feGVfc3ZtX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYSAqdm1hLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE1LVx0XHQuY2hlY2tfcGFnZXNfdGhyZXNob2xkID0gZGV2bWVtX3Bvc3NpYmxlID8gU1pfNjRLIDogMCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjE2Olx0XHQuZGV2bWVtX29ubHkgPSBuZWVkX3ZyYW0gXHUwMDI2XHUwMDI2IGRldm1lbV9wb3NzaWJsZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE3LVx0XHQudGltZXNsaWNlX21zID0gbmVlZF92cmFtIFx1MDAyNlx1MDAyNiBkZXZtZW1fcG9zc2libGUgP1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjI1LVx0c3RydWN0IHhlX3RpbGUgKnRpbGUgPSBndF90b190aWxlKGd0KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjI2Olx0aW50IG1pZ3JhdGVfdHJ5X2NvdW50ID0gY3R4LmRldm1lbV9vbmx5ID8gMyA6IDE7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTIyNy1cdGt0aW1lX3Qgc3RhcnQgPSB4ZV9ndF9zdGF0c19rdGltZV9nZXQoKSwgYmluZF9zdGFydCwgZ2V0X3BhZ2VzX3N0YXJ0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjQwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNDE6XHRkcGFnZW1hcCA9IGN0eC5kZXZtZW1fb25seSA/IHhlX3RpbGVfbG9jYWxfcGFnZW1hcCh0aWxlKSA6XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI0Mi1cdFx0eGVfdm1hX3Jlc29sdmVfcGFnZW1hcCh2bWEsIHRpbGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTE6XHRpZiAoY3R4LmRldm1lbV9vbmx5IFx1MDAyNlx1MDAyNiAhcmFuZ2UtXHUwMDNlYmFzZS5wYWdlcy5mbGFncy5taWdyYXRlX2Rldm1lbSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUyLVx0XHRyZXR1cm4gLUVBQ0NFUztcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjUzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTQ6XHRpZiAoeGVfc3ZtX3JhbmdlX2lzX3ZhbGlkKHJhbmdlLCB0aWxlLCBjdHguZGV2bWVtX29ubHksIGRwYWdlbWFwKSkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTUtXHRcdHhlX3N2bV9yYW5nZV92YWxpZF9mYXVsdF9jb3VudF9zdGF0c19pbmNyKGd0LCByYW5nZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzAtXHRcdGlmIChlcnIpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjcxOlx0XHRcdGlmIChtaWdyYXRlX3RyeV9jb3VudCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3Mi1cdFx0XHRcdGRybV9kYmcoXHUwMDI2dm0tXHUwMDNleGUtXHUwMDNlZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjc2LVx0XHRcdFx0LypcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjc3Olx0XHRcdFx0ICogSW4gdGhlIGRldm1lbS1vbmx5IGNhc2UsIG1peGVkIG1hcHBpbmdzIG1heVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzgtXHRcdFx0XHQgKiBiZSBmb3VuZC4gVGhlIGdldF9wYWdlcyBmdW5jdGlvbiB3aWxsIGZpeFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjgxLVx0XHRcdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTI4MjpcdFx0XHRcdGlmIChjdHguZGV2bWVtX29ubHkpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI4My1cdFx0XHRcdFx0Z290byBnZXRfcGFnZXM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEzMDItXHRcdGN0eC50aW1lc2xpY2VfbXMgXHUwMDNjXHUwMDNjPSAxO1x0LyogRG91YmxlIHRpbWVzbGljZSBpZiB3ZSBoYXZlIHRvIHJldHJ5ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTMwMzpcdFx0aWYgKG1pZ3JhdGVfdHJ5X2NvdW50IFx1MDAzZSAwIHx8ICFjdHguZGV2bWVtX29ubHkpIHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMzA0LVx0XHRcdGRybV9kYmcoXHUwMDI2dm0tXHUwMDNleGUtXHUwMDNlZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTIwPWludCB4ZV9wYWdlbWFwX2NhY2hlX2NyZWF0ZShzdHJ1Y3QgeGVfdGlsZSAqdGlsZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzNi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxOTM3OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2Rldm1lbV9vcGVuKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5Mzgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xOTcyPXN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5OTgtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTk5OTpcdGRwYWdlbWFwID0geGVfZGV2bWVtX29wZW4odG9feGVfZGV2aWNlKGRybSksIHJlZ2lvbl9pbnN0YW5jZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMjAwMC1cdGRybV9kZXZfZXhpdChpZHgpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0yMDI9c3RydWN0IGRybV9ncHVzdm0ge1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yMzYtICogQGRldm1lbV9wb3NzaWJsZTogcG9zc2libGUgdG8gdXNlIGRldmljZSBtZW1vcnlcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyMzc6ICogQGRldm1lbV9vbmx5OiB1c2Ugb25seSBkZXZpY2UgbWVtb3J5XG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMjM4LSAqIEBhbGxvd19taXhlZDogQWxsb3cgbWl4ZWQgbWFwcGluZ3MgaW4gZ2V0IHBhZ2VzLiBNaXhpbmcgYmV0d2VlbiBzeXN0ZW0gYW5kXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTI0ND1zdHJ1Y3QgZHJtX2dwdXN2bV9jdHgge1xuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTAtXHR1bnNpZ25lZCBpbnQgZGV2bWVtX3Bvc3NpYmxlIDoxO1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjI1MTpcdHVuc2lnbmVkIGludCBkZXZtZW1fb25seSA6MTtcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTItXHR1bnNpZ25lZCBpbnQgYWxsb3dfbWl4ZWQgOjE7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0xNzU9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbTtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE3Ny0vKipcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTc4OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIC0gT3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIEdQVSBTVk0gZGV2aWNlIG1lbW9yeVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0xNzktICpcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE4NC0gKi9cbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTg1OnN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIHtcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTg2LVx0LyoqXG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zMTc9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSB7XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zMjAtXHRzdHJ1Y3QgY29tcGxldGlvbiBkZXRhY2hlZDtcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzIxOlx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcztcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzIyLVx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcbi0tXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oPTM1MT12b2lkIGRybV9wYWdlbWFwX2Rldm1lbV9pbml0KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTItXHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNTM6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTQtXHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBzaXplX3Qgc2l6ZSxcbi0tXG5saWIvdGVzdF9obW0uYz01OD1NT0RVTEVfUEFSTV9ERVNDKHNwbV9hZGRyX2RldjEsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjAtXG5saWIvdGVzdF9obW0uYzo2MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBkbWlycm9yX2Rldm1lbV9vcHM7XG5saWIvdGVzdF9obW0uYy02Mi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgZG1pcnJvcl9taW5fb3BzO1xuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU5Ni1cdGRldm1lbS1cdTAwM2VwYWdlbWFwLm5yX3JhbmdlID0gMTtcbmxpYi90ZXN0X2htbS5jOjU5NzpcdGRldm1lbS1cdTAwM2VwYWdlbWFwLm9wcyA9IFx1MDAyNmRtaXJyb3JfZGV2bWVtX29wcztcbmxpYi90ZXN0X2htbS5jLTU5OC1cdGRldm1lbS1cdTAwM2VwYWdlbWFwLm93bmVyID0gbWRldmljZTtcbi0tXG5saWIvdGVzdF9obW0uYz0xNzMyPXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2bWVtX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqaGVhZCwgc3RydWN0IGZvbGlvICp0YWlsKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3NjUtXG5saWIvdGVzdF9obW0uYzoxNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRtaXJyb3JfZGV2bWVtX29wcyA9IHtcbmxpYi90ZXN0X2htbS5jLTE3NjctXHQuZm9saW9fZnJlZVx0PSBkbWlycm9yX2Rldm1lbV9mcmVlLFxuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19ORVRfREVWTUVNKSAmIzQzOz0gZGV2bWVtLm9cbm5ldC9jb3JlL01ha2VmaWxlLTUzLW9iai0kKENPTkZJR19ERUJVR19ORVQpICYjNDM7PSBsb2NrX2RlYnVnLm9cbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0yOT1zdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyhuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgWEFfRkxBR1NfQUxMT0MxKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTMwLVxubmV0L2NvcmUvZGV2bWVtLmM6MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzO1xubmV0L2NvcmUvZGV2bWVtLmMtMzItXG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE0NC1cdFx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxubmV0L2NvcmUvZGV2bWVtLmM6MTQ1Olx0XHRcdC5tcF9vcHNcdFx0PSBcdTAwMjZkbWFidWZfZGV2bWVtX29wcyxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0Ni1cdFx0fTtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xNTY9aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTYxLVx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxubmV0L2NvcmUvZGV2bWVtLmM6MTYyOlx0XHQubXBfb3BzXHRcdD0gXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXG5uZXQvY29yZS9kZXZtZW0uYy0xNjMtXHR9O1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTUyND1zdGF0aWMgdm9pZCBtcF9kbWFidWZfZGV2bWVtX3VuaW5zdGFsbCh2b2lkICptcF9wcml2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTU0NC1cbm5ldC9jb3JlL2Rldm1lbS5jOjU0NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9wcm92aWRlcl9vcHMgZG1hYnVmX2Rldm1lbV9vcHMgPSB7XG5uZXQvY29yZS9kZXZtZW0uYy01NDYtXHQuaW5pdFx0XHRcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk9NTM9ZGVmIHJlcXVpcmVfZGV2bWVtKGNmZywgcnhfcGFnZV9zaXplPVJYX1BBR0VfU0laRV9ERUZBVUxUKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk6NTQ6ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Byb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbiYjMzk7dCBzdXBwb3J0ZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5LTU1LSAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIFBST0JFX1JYX1BBR0VfU0laRVM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEltcGxlbWVudGF0aW9uIHdpdGggYENPTkZJR19ORVRfREVWTUVNYCBDb25zaWRlcmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIGNsZWFyOiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBzcGFya3MgYSBzcGVjaWZpYyBsaW5lIG9mIGlucXVpcnkuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpbXBsaWNhdGlvbiB0aGF0IGNvbmZpZyBoYXMgb24gdGhlIHRjcCBzZW5kIHBhdGgsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYXBwaW5nLiBTaW5jZSB0aGUga2V5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgLiBNeSBmb2N1cyB3aWxsIGJlIHZlcnkgc3BlY2lmaWM6IEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIG1pZ2h0IGJlIHVzZWQgaW4gdGhhdCBmdW5jdGlvbiBvciBpdHMgY2FsbGVlcywgcHJvYmFibHkgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IGFjY2Vzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbmV0X2Rldm1lbWAgaGFzIGJlZW4gc2FmZWx5IGhhbmRsZWQsIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2Ugc2VjdXJpdHkgcmlza3MuIEl0JiMzOTtzIGEgcXVpY2sgdGFjdGljYWwgYXNzZXNzbWVudDsgbGV0JiMzOTtzIGdldCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdD0xMz11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfREVMQVlFREFDS0xPQ0tFRCAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIsdGNwX2RlbGFja190aW1lclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0OjE0OnVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORyAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9wdXNoLHRjcF9zZW5kbXNnX2xvY2tlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0LTE1LXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BGUk9NWkVST1dJTkRPV0FEViAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zZWxlY3Rfd2luZG93LHRjcF90cmFuc21pdC1za2Jcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jPTMyMz1zdGF0aWMgaW50IHNpd190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBwYWdlICoqcGFnZSwgaW50IG9mZnNldCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0Ni1cdFx0bG9ja19zb2NrKHNrKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM6MzQ3Olx0XHRydiA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBieXRlcyk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0OC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0zNjc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL25ldC90Y3AuaDozNjg6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMzY5LWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmg9Mjg5PVRSQUNFX0VWRU5UKHRjcF9yZXRyYW5zbWl0X3N5bmFjayxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaC0zMzQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaDozMzU6VFJBQ0VfRVZFTlQodGNwX3NlbmRtc2dfbG9ja2VkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM2LVx0VFBfUFJPVE8oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxua2VybmVsL2JwZi9idGYuYz02NjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjczMC1cdHsgXCYjMzQ7dGNwX3NlbmRfcmVzZXRcJiMzNDssIDB4MTEgfSxcbmtlcm5lbC9icGYvYnRmLmM6NjczMTpcdHsgXCYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkXCYjMzQ7LCAweDEwMCB9LFxua2VybmVsL2JwZi9idGYuYy02NzMyLVx0LyogdGVncmFfYXBiX2RtYSAqL1xuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz0xMDYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xMDg1LVx0LnJlYWRfc2tiXHQgICA9IHRjcF9yZWFkX3NrYixcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDg2Olx0LnNlbmRtc2dfbG9ja2VkICAgID0gdGNwX3NlbmRtc2dfbG9ja2VkLFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXHQucGVla19sZW5cdCAgID0gdGNwX3BlZWtfbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xubmV0L2lwdjQvdGNwLmMtMTExNS1cbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3AuYy0xMTE3LXtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMjQ0LVxubmV0L2lwdjQvdGNwLmM6MTI0NTpcdFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcbm5ldC9pcHY0L3RjcC5jLTEyNDYtXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ0Ny19XG5uZXQvaXB2NC90Y3AuYzoxNDQ4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zZW5kbXNnX2xvY2tlZCk7XG5uZXQvaXB2NC90Y3AuYy0xNDQ5LVxubmV0L2lwdjQvdGNwLmM9MTQ1MD1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NTQtXHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6MTQ1NTpcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcbm5ldC9pcHY0L3RjcC5jLTE0NTYtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xMjItXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTIzOlx0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2l6ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTI0LVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODEtXHQuc3BsaWNlX2VvZlx0ICAgPSBpbmV0X3NwbGljZV9lb2YsXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY4MjpcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjgzLVx0LnNwbGljZV9yZWFkXHQgICA9IHRjcF9zcGxpY2VfcmVhZCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTE5NC1cbm5ldC90bHMvdGxzX21haW4uYzoxOTU6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBzaXplKTtcbm5ldC90bHMvdGxzX21haW4uYy0xOTYtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTI5OT1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9wa3RfaW5mbyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNDAtXHRcdCAqICYjMzk7TVNHX1pFUk9DT1BZJiMzOTsgZmxhZyBoYW5kbGluZyBoZXJlIGlzIGJhc2VkIG9uIHRoZSBzYW1lIGZsYWdcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzozNDE6XHRcdCAqIGhhbmRsaW5nIGZyb20gJiMzOTt0Y3Bfc2VuZG1zZ19sb2NrZWQoKSYjMzk7LlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTM0Mi1cdFx0ICovXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz0yMTI9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMS1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzoyMzI6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yMzMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYz0xMTc9c3RhdGljIGJvb2wgYnBmX3Rlc3RfZGVsYXkoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE4Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg4OlNFQyhcJiMzNDtmZW50cnkvdGNwX3NlbmRtc2dfbG9ja2VkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE5MC1cdCAgICAgc2l6ZV90IHNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIFNlbmQgUGF0aCB3aXRoIFplcm9Db3B5IGFuZCBEZXZtZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBUQ1Agc2VuZGluZyBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgYnkgYHRjcF9zZW5kbXNnYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzZXQuIFJpZ2h0LCBhbmQgdGhpcyBwYXRoIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgZW5hYmxlZC4KCk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiB3YXMgdG8gZm9jdXMgb24gYHRjcF9zZW5kbXNnX2xvY2tlZGAgb3IgYHRjcF9zZW5kbXNnYC4gQnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IGxpc3RpbmcgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmlzKiBkZWZpbml0ZWx5IGEgaG90IHBhdGguIE9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGlzIGNoYW5nZSByZWxhdGVzIHRvLiBUaGUgcHJvbXB0IHN1Z2dlc3RzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHVzYWdlLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gVGhpcyBpcyB3aGVyZSBgbmV0X2Rldm1lbWAgY29tZXMgaW50byBwbGF5LiBTaW5jZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGhvdC1wYXRoIGFuZCB0aGUgY2hhbmdlIGlzICphYm91dCogZGV2bWVtLCBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZGV2bWVtIGZ1bmN0aW9uIEkgY2FuIGZvY3VzIG9uPyBMZXQmIzM5O3Mgc2VlLi4uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGlubGluZSwgZGVwZW5kaW5nIG9uIGBDT05GSUdfTkVUX0RFVk1FTWAuIExldCBtZSBjaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9Mzc5PXZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0zODMtXG5uZXQvY29yZS9kZXZtZW0uYzozODQ6c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uaC0xNTctc3RydWN0IG5ldF9pb3YgKlxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIyOTpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGlzIHNwZWNpZmljIGNvZGUgbW9kaWZpY2F0aW9uLiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZmVlbHMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyByZWFsbHkgc3BlY2lmaWMgdG8gdGhlIGBkZXZtZW1gIHBhdGggd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4sIGFuZCB1bmxpa2UgYSByZWFsbHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBhY3R1YWxseSBub24temVyby4gVGhhdCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIHRyeSBhbmQgZ3VpZGUgdGhlIGZ1enplci4gCgpXYWl0IGEgbWludXRlLCBJIHNlZSBpdCBub3cuIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyBhY3R1YWxseSBjYWxsZWQgKmltbWVkaWF0ZWx5IGJlZm9yZSogdGhlIGNvZGUgdGhhdCB3YXMgY2hhbmdlZC4gTGV0IG1lIHB1bGwgdGhhdCBibG9jayB1cCBhZ2FpbjoKCmBgYGMKCQkJCWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkKSB7CgkJCQkJYmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7CgkJCQkJaWYgKElTX0VSUihiaW5kaW5nKSkgewoJCQkJCQllcnIgPSBQVFJfRVJSKGJpbmRpbmcpOwoJCQkJCQliaW5kaW5nID0gTlVMTDsKCQkJCQkJZ290byBvdXRfZXJyOwoJCQkJCX0KCQkJCQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7CgkJCQkJCWVyciA9IC1FT1BOT1RTVVBQOwoJCQkJCQlnb3RvIG91dF9lcnI7CgkJCQkJfQoJCQkJfQpgYGAKCk9rYXksIHNvIHRoZSBwbGFuIGlzIGZvcm1pbmcuIEZvY3VzaW5nIHRoZSBmdXp6ZXIgb24gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIHNob3VsZCBiZSBhIGRpcmVjdCB3YXkgdG8gaGl0IHRoaXMgYWx0ZXJlZCBjb2RlIHBhdGguIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgd2lsbCBiZSB3aGF0IGlzIGludm9sdmVkIHdpdGggYHNvY2tjLmRtYWJ1Zl9pZGAgYmVpbmcgbm9uLXplcm8uCgpBbm90aGVyIGF2ZW51ZSBjb3VsZCBiZSB0byBmb2N1cyBvbiBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgb3Igd2hhdGV2ZXIgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgc2V0dXAgb2YgdGhlIGRtYWJ1ZiBiaW5kaW5nLiBJIHNob3VsZCBjaGVjayBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGZvciBhbnkgb3RoZXIgZGV2bWVtIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0xMjY9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxubmV0L2NvcmUvZGV2bWVtLmM6MTU2OmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTE4OD1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmMtMTkwLVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD05ND1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uaC05Ni1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNzg6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVx0XHRcdFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk0LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1Olx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYobmV0ZGV2LCBOVUxMLCBkbWFfZGV2LCBETUFfRlJPTV9ERVZJQ0UsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTYtXHRcdFx0XHRcdCBkbWFidWZfZmQsIG5pb3Zfc2hpZnQsIHByaXYsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVx0Zm9yX2VhY2hfc2V0X2JpdChyeHFfaWR4LCByeHFfYml0bWFwLCBuZXRkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XHRcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVx0XHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNzE9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzc6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihiaW5kX2Rldixcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzOC1cdFx0XHRcdFx0IGJpbmRfZGV2ICE9IG5ldGRldiA/IG5ldGRldiA6IE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORVRfREVWTUVNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHR3byBrZXkgc3ltYm9scyBoZXJlLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYC4gVGhleSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCB0aGUgb2J2aW91cyBjb25maWcgYXNzb2NpYXRlZCB3aXRoIHRoZW0gaXMgYE5FVF9ERVZNRU1gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IEkmIzM5O20gYSBiaXQgY3VyaW91czogSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5PyBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2NvcmUvS2NvbmZpZ2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgTkVUX0RFVk1FTWAgc3ltYm9sLiBTZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIG9yIG90aGVyIGNsdWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIG51Z2dldHMgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTkVUX0RFVk1FTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfREVWTUVNYCBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9LY29uZmlnYCBhcyBhIGBkZWZfYm9vbCB5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3Igc29tZXRoaW5nIGxpa2UgZGV2aWNlIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gQnV0LCBJIGRvbiYjMzk7dCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBsaWtlIG1lbW9yeSBtYXBwaW5nLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY5IG9mIGBuZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIGEgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpdCBjYXJyaWVzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgZGVmYXVsdCBzdGF0ZSwgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBhbmQgbWF5YmUgcG9pbnRlcnMgdG8gcmVsYXRlZCBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZyBvcHRpb25zIG1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBtYWludGFpbmVycyBjb25zaWRlcmVkIHdoZW4gc2V0dGluZyBpdCBhcyBhIGRlZmF1bHQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IHRoZSAmIzM0O3doeSYjMzQ7IGFuZCBub3QganVzdCB0aGUgJiMzNDt3aGF0JiMzNDsgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE5FVF9SRURJUkVDVFxuICA2MTpcdFx0Ym9vbFxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBTS0JfREVDUllQVEVEXG4gIDY0Olx0XHRib29sXG4gIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqRGVwZW5kZW5jaWVzIGFuZCBEZWZhdWx0czogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBsZWFucyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBiYXNpYy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGJ1aWxkLCBvciBpZiBpdCByZXF1aXJlcyBleHBsaWNpdCBlbmFibGluZy4gSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgcGhhbnRvbSBpc3N1ZXMgaWYgaXQmIzM5O3MganVzdCBzb21ldGhpbmcgSSBvdmVybG9va2VkIGluIG15IHNldHVwLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIEkgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSBpdCBpbiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYSBCb29sZWFuIENvbmZpZ3VyYXRpb24gVmFyaWFibGUqKgoKT2theSwgc28gYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2xlYW4uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZHJpdmVyLCBhbmQgaXQmIzM5O3MgYXJvdW5kIGxpbmUgMjE1IHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgaXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdG8gZW5hYmxlL2Rpc2FibGUgaXQuIExldCYjMzk7cyBnZXQgdG8gdGhhdCBLY29uZmlnIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgR0VORVJJQ19BUkNIX1RPUE9MT0dZXG4gMjI2Olx0XHRib29sXG4gMjI3Olx0XHRoZWxwXG4gMjI4Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBhcmNoaXRlY3R1cmVzIGNvbW1vbiB0b3BvbG9neSBjb2RlOiBlLmcuLCBwYXJzaW5nXG4gMjI5Olx0XHQgIENQVSBjYXBhY2l0eSBpbmZvcm1hdGlvbiBmcm9tIERULCB1c2FnZSBvZiBzdWNoIGluZm9ybWF0aW9uIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIERNQSBTaGFyZWQgQnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERNQV9TSEFSRURfQlVGRkVSYCBkZWZhdWx0cyB0byAmIzM5O24mIzM5OywgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG1vdmUsIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gZW5zdXJlIHdlIGNhbiBjb250cm9sIHRoYXQgc2V0dGluZy4KCldhaXQgYSBzZWNvbmQuLi5JIGp1c3Qgc3BvdHRlZCB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0IGl0ICpkZXBlbmRzKiBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IGNoYW5nZXMgdGhpbmdzISBJdCBtZWFucyBgTkVUX0RFVk1FTWAgd2lsbCAqb25seSogYmUgZW5hYmxlZCBpZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGFsc28gZW5hYmxlZC4gU28sIHllYWgsIGFic29sdXRlbHkuIEFkZGluZyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsIHRvIGVuc3VyZSBgTkVUX0RFVk1FTWAgY2FuIGV2ZW4gYmUgdXNlZC4gVGhhdCBkZXBlbmRlbmN5IGlzIGEgc2lnbmlmaWNhbnQgZmFjdG9yIGluIGRyaXZpbmcgb3VyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBib3RoIGNhbiBiZSB1c2VkLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYFBBR0VfUE9PTGAgYW5kIHNlZSB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSwgYnV0IHRoaXMgZ2l2ZXMgbWUgYSBzb2xpZCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBzb21ld2hlcmUgYXJvdW5kIGxpbmUgNDkxIG1pZ2h0IGhvbGQgdGhlIGtleS4gSSBkb24mIzM5O3QgcmVjYWxsIHRoZSBleGFjdCBjb250ZXh0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIGJ1dCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhIHNwZWNpZmljIGJsb2NrIG9mIGxvZ2ljIHBlcnRhaW5pbmcgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgbG9jYXRlZCB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCB0aGVpciBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhlIEtjb25maWcgZmlsZSBhbmQgbWFwIG91dCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODU6XHRcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXG4gNDg2Olx0XG4gNDg3Olx0Y29uZmlnIE5FVF9ERVZMSU5LXG4gNDg4Olx0XHRib29sXG4gNDg5Olx0XHRkZWZhdWx0IG5cbiA0OTA6XHRcbiA0OTE6XHRjb25maWcgUEFHRV9QT09MXG4gNDkyOlx0XHRib29sXG4gNDkzOlx0XG4gNDk0Olx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xuIDQ5NTpcdFx0ZGVmYXVsdCBuXG4gNDk2Olx0XHRib29sIFwmIzM0O1BhZ2UgcG9vbCBzdGF0c1wmIzM0O1xuIDQ5NzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiA0OTg6XHRcdGhlbHBcbiA0OTk6XHRcdCAgRW5hYmxlIHBhZ2UgcG9vbCBzdGF0aXN0aWNzIHRvIHRyYWNrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgcmVjeWNsaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gYFBBR0VfUE9PTGAgaXMgYSBib29sZWFuLCBhbmQgZGVmYXVsdHMgdG8gJiMzOTtuJiMzOTsuIEkga25vdyBkcml2ZXJzIHR5cGljYWxseSBzZWxlY3QgaXQuIFRvIHBsYXkgaXQgc2FmZSwgSSBpbml0aWFsbHkgdGhvdWdodCBvZiBqdXN0IGFkZGluZyBpdCB0byBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgKm1hbnkqIGRyaXZlcnMsIGp1c3QgbGlzdGluZyBpdCBtaWdodCBiZSBhIG1vcmUgcm9idXN0IGFwcHJvYWNoLgoKVGhlbiBJIHJlYWxpemVkIGEgY3J1Y2lhbCBwb2ludDogYFBBR0VfUE9PTGAgbGFja3MgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGEgdXNlciBjYW4mIzM5O3QgZXhwbGljaXRseSBlbmFibGUgaXQgdGhyb3VnaCBgbWVudWNvbmZpZ2AuIEl0ICpoYXMqIHRvIGJlIHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBTbywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgc29tZXRoaW5nIHdlIGNhbiBjb250cm9sIGVuYWJsZXMgaXQsIG9yIGlmIGxpc3RpbmcgaXQgd2lsbCBzdWZmaWNlIChzeXprYWxsZXIgY2FuIGhhbmRsZSBjb25maWdzIHdpdGhvdXQgcHJvbXB0cyBpZiB0aGV5JiMzOTtyZSBpbmRpcmVjdGx5IHNlbGVjdGVkLCBidXQgbGlzdGluZyB0aGUgc2VsZWN0aW5nIGNvbmZpZywgb3IgbGlzdGluZyBpdCBpdHNlbGYsIHdvdWxkIGJlIHByZWZlcmFibGUpLgoKQWhhISBgUEFHRV9QT09MYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNQUM4MDIxMWAgYW5kIG51bWVyb3VzIEV0aGVybmV0IGRyaXZlcnMuIEludGVyZXN0aW5nLiBTbywgbGV0JiMzOTtzIGFkZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCB0byBvdXIgbGlzdC4KCldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNoZWNrIGBETUFfU0hBUkVEX0JVRkZFUmAuIEl0IGFsc28gc2VlbXMgdG8gbGFjayBhIGRpcmVjdCBwcm9tcHQuIE9rYXksIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYGRyaXZlcnMvYmFzZS9LY29uZmlnYC4gWXVwLCBgY29uZmlnIERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGBib29sYCB3aXRoIGEgYGRlZmF1bHQgbmAgYW5kIG5vIGRpcmVjdCBwcm9tcHQuIEl0JiMzOTtzICpkZWZpbml0ZWx5KiBzZWxlY3RlZCBieSBvdGhlciBjb25maWdzLiBOb3csIHdoYXQgc2VsZWN0cyBgRE1BX1NIQVJFRF9CVUZGRVJgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6JiMzOTtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM5OyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnPTY9Y29uZmlnIERSTV9BQ0NFTF9IQUJBTkFMQUJTXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXHRzZWxlY3QgSFdNT05cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NTI9Y29uZmlnIERNQUJVRl9LVU5JVF9URVNUXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXHRkZXBlbmRzIG9uIEtVTklUXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTYwPW1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTMtXHRzZWxlY3QgSTJDXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXHRzZWxlY3QgU1lOQ19GSUxFXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz01MT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU4LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTE5PWNvbmZpZyBWSURFT0JVRjJfVk1BTExPQ1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yNC1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXHRzZWxlY3QgSU9NTVVfSU9WQVxuLS1cbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVx0ZGVwZW5kcyBvbiBSUE1TR1xuZHJpdmVycy9taXNjL0tjb25maWc6MzA1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXHRzZWxlY3QgUUNPTV9TQ01cbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG5kcml2ZXJzL3RlZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE5MzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cdGRlcGVuZHMgb24gWEVOX0dOVERFViBcdTAwMjZcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVx0aGVscFxuLS1cbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXG4tLVxuc2FtcGxlcy9LY29uZmlnLTIzMy1cdHNlbGVjdCBWRklPX01ERVZcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcbi0tXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cdGRlcGVuZHMgb24gSEFTX0RNQVxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlndXJlIHRoZXNlIGtlcm5lbCBvcHRpb25zIHVzaW5nIHN5emthbGxlciYjMzk7cyBgc3l6LWtjb25mYCB0b29sLiBgRE1BQlVGX0hFQVBTYCBvciBgU1lOQ19GSUxFYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGNob2ljZXMsIHRoZXkgc2VlbSBlYXN5IHRvIGRlYWwgd2l0aCwgYnV0IGhvbGQgb24sIGBORVRfREVWTUVNYCBsb29rcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBgZGVmX2Jvb2wgeWAgc28gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGl0ICpkZXBlbmRzIG9uKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgY29tcGxleC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgaWYgSSBqdXN0IGxpc3QgYE5FVF9ERVZNRU1gLCBgc3l6LWtjb25mYCBzaG91bGQgYXV0b21hdGljYWxseSBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZW5hYmxlIGRlcGVuZGVuY2llcyB3aGVuIGl0IGNhbi4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkby4gSG93ZXZlciwgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgZG9uJiMzOTt0IGhhdmUgcHJvbXB0cy4gVGhhdCBtZWFucyBgc3l6LWtjb25mYCBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgdGhlbSBkaXJlY3RseSB1bmxlc3MgdGhleSYjMzk7cmUgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFdlJiMzOTtyZSBnZXR0aW5nIGludG8gYSBwb3RlbnRpYWwgZWRnZSBjYXNlIHRoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHBsYXkgaXQgc2FmZSBmb3Igbm93LiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgd2lsbCBqdXN0IGxpc3QgYE5FVF9ERVZNRU1gLCBgRE1BQlVGX0hFQVBTYCwgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IHNlZW1zIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gYnJldml0eSBhbmQgY292ZXJpbmcgdGhlIGJhc2VzLgoKV2FpdCBhIHNlY29uZCwgd2hhdCAqZG9lcyogc2VsZWN0IGBQQUdFX1BPT0xgPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIHRoYXQgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBzZWxlY3Rpb24gY2hhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGxlYXZpbmcgYW55dGhpbmcgaW1wb3J0YW50IG91dC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBjYW4mIzM5O3QgaWdub3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM3Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ4Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnOjU0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cdHNlbGVjdCBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiA2NEJJVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6ODE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVx0c2VsZWN0IEJST0FEQ09NX1BIWSBpZiBBUkNIX0JDTTI4MzVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6Mjc2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXHRzZWxlY3QgRklYRURfUEhZXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVx0aW1wbHkgUEFHRV9QT09MX1NUQVRTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo5NTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cdHNlbGVjdCBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6MTU0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6MTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcJiMzNDsgaWYgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NTk9Y29uZmlnIE1WTkVUQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjU6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctOS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cdHNlbGVjdCBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMzpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cdHNlbGVjdCBDUkMzMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cdHNlbGVjdCBQQ1NfWFBDU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cdHNlbGVjdCBGV19MT0FERVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cdHNlbGVjdCBNRkRfU1lTQ09OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIHByb3ZpZGVkIGNsdWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nLCBpdCBzZWVtcyBsaWtlIGBQQUdFX1BPT0xgIGlzIGEgZ2l2ZW4uIEkga25vdyBgQlBGX1NZU0NBTExgIHVzdWFsbHkgdHJpZ2dlcnMgaXQgaWYgYE5FVGAgaXMgZW5hYmxlZCwgYW5kIGBWRVRIYCBhbHNvIGluY2x1ZGVzIGl0LiBTaW5jZSBgQlBGX1NZU0NBTExgIGlzIGEgY29tbW9uIGRlZmF1bHQgaW4gc3l6a2FsbGVyLCBgUEFHRV9QT09MYCBpcyBhbG1vc3QgY2VydGFpbmx5IGVuYWJsZWQuCgpOb3csIHdoYXQgZWxzZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBETUFfU0hBUkVEX0JVRkZFUmAuIEkga25vdyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgRE1BQlVGX0hFQVBTYCwgYFNZTkNfRklMRWAsIGBEUk1gLCBgVVNCX0ZfRlNgLCBgVkZJT19NREVWYCwgZXRjLiBUbyBiZSBvbiB0aGUgc2FmZSBzaWRlLCBsZXQmIzM5O3MgaW5jbHVkZSBpdC4gQWxzbywgYmVjYXVzZSBvZiB0aGUgcHJvbXB0LCBJIG11c3QgbGlzdCB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIG91dHB1dCBhcnJheSB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LiBTbyBmYXIsIHRoZSBsaXN0IGlzIGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSBpZiBgTkVUX0RFVk1FTWAgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGhlcmUsIGFuZCBub3QgYWRkIGFueXRoaW5nIHJlZHVuZGFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIFRDUC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbnRyb2R1Y2VzIGEgYHNvY2tjLmRtYWJ1Zl9pZGAgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gV2hlcmUgaXMgYHNvY2tjLmRtYWJ1Zl9pZGAgc2V0PyBJIHNob3VsZCB0cmFjayB0aGlzIHZhbHVlIGRvd24gYW5kIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHNvY2tjLmRtYWJ1Zl9pZGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYWJ1Zl9pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xMDM9dGhlIG5ldGxpbmsgQVBJOjpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjAtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjE6XHRkbWFidWZfaWQgPSByc3AtXHUwMDNlaWQ7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjItXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjMtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjQ6VGhlIG5ldGxpbmsgQVBJIHJldHVybnMgYSBkbWFidWZfaWQ6IGEgdW5pcXVlIElEIHRoYXQgcmVmZXJzIHRvIHRoaXMgZG1hYnVmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjUtdGhhdCBoYXMgYmVlbiBib3VuZC5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xNTY9U2V0dXAmIzM5OywgYW5kIHRoZSBrZXJuZWwgc2lnbmFscyBzdWNoIHRvIHRoZSB1c2VyIHZpYSB0aGUgU0NNX0RFVk1FTV8qIGNtc2dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjgtXHRcdFx0XHQgKlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY5Olx0XHRcdFx0ICogZG1hYnVmX2Ntc2ctXHUwMDNlZG1hYnVmX2lkIGlzIHRoZSBkbWFidWYgdGhlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNzAtXHRcdFx0XHQgKiBmcmFnIGxhbmRlZCBvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xOTg9QXBwbGljYXRpb25zIG1heSByZWNlaXZlIDIgY21zZ3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjAwLS0gU0NNX0RFVk1FTV9ETUFCVUY6IHRoaXMgaW5kaWNhdGVzIHRoZSBmcmFnbWVudCBsYW5kZWQgaW4gdGhlIGRtYWJ1ZiBpbmRpY2F0ZWRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMTogIGJ5IGRtYWJ1Zl9pZC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yNTA9VGhlIHVzZXIgbXVzdCBiaW5kIGEgVFggZG1hYnVmIHRvIGEgZ2l2ZW4gTklDIHVzaW5nIHRoZSBuZXRsaW5rIEFQSTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjYzLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY0OiAgICAgICAgdHhfZG1hYnVmX2lkID0gcnNwLVx1MDAzZWlkO1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY3OlRoZSBuZXRsaW5rIEFQSSByZXR1cm5zIGEgZG1hYnVmX2lkOiBhIHVuaXF1ZSBJRCB0aGF0IHJlZmVycyB0byB0aGlzIGRtYWJ1ZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY4LXRoYXQgaGFzIGJlZW4gYm91bmQuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MzA1PVRoZSBleGFtcGxlIGJlbG93IHNlbmRzIDEwMjQgYnl0ZXMgZnJvbSBvZmZzZXQgMTAwIGludG8gdGhlIGRtYWJ1ZiwgYW5kIDIwNDhcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMwNjpmcm9tIG9mZnNldCAyMDAwIGludG8gdGhlIGRtYWJ1Zi4gVGhlIGRtYWJ1ZiB0byBzZW5kIGZyb20gaXMgdHhfZG1hYnVmX2lkOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMwNy1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMjgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDozMjk6ICAgICAgICooKF9fdTMyICopQ01TR19EQVRBKGNtc2cpKSA9IHR4X2RtYWJ1Zl9pZDtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMzMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MTMzPXN0YXRpYyB2b2lkIGRtYWJ1Zl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTE0Ny1cdFx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2dmdwdS1cdTAwM2VvYmplY3RfaWRyLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjE0ODpcdFx0XHRcdFx0ICAgZG1hYnVmX29iai1cdTAwM2VkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTE0OS1cdFx0XHRcdGtmcmVlKGRtYWJ1Zl9vYmotXHUwMDNlaW5mbyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jPTM3Mj1waWNrX2RtYWJ1Zl9ieV9udW0oc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHUzMiBpZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMzc5LVx0XHRkbWFidWZfb2JqID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmosIGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjM4MDpcdFx0aWYgKGRtYWJ1Zl9vYmotXHUwMDNlZG1hYnVmX2lkID09IGlkKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMzgxLVx0XHRcdHJldCA9IGRtYWJ1Zl9vYmo7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jPTQwND1pbnQgaW50ZWxfdmdwdV9xdWVyeV9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdm9pZCAqYXJncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDI4LVx0XHR1cGRhdGVfZmJfaW5mbyhnZnhfcGxhbmVfaW5mbywgXHUwMDI2ZmJfaW5mbyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDI5Olx0XHRnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQgPSBkbWFidWZfb2JqLVx1MDAzZWRtYWJ1Zl9pZDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00MzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ0MS1cdFx0XHQgICAgdmdwdS1cdTAwM2VpZCwga3JlZl9yZWFkKFx1MDAyNmRtYWJ1Zl9vYmotXHUwMDNla3JlZiksXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDQyOlx0XHRcdCAgICBnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ0My1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZncHUtXHUwMDNlZG1hYnVmX2xvY2spO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00NzEtXHRcdGdvdG8gb3V0X2ZyZWVfaW5mbztcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo0NzI6XHRnZnhfcGxhbmVfaW5mby1cdTAwM2VkbWFidWZfaWQgPSByZXQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDczOlx0ZG1hYnVmX29iai1cdTAwM2VkbWFidWZfaWQgPSByZXQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDc0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDAtLyogVG8gYXNzb2NpYXRlIGFuIGV4cG9zZWQgZG1hYnVmIHdpdGggdGhlIGRtYWJ1Zl9vYmogKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1MDE6aW50IGludGVsX3ZncHVfZ2V0X2RtYWJ1ZihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MTEtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTEyOlx0ZG1hYnVmX29iaiA9IHBpY2tfZG1hYnVmX2J5X251bSh2Z3B1LCBkbWFidWZfaWQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxMy1cdGlmIChkbWFidWZfb2JqID09IE5VTEwpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1MTQ6XHRcdGd2dF92Z3B1X2VycihcJiMzNDtpbnZhbGlkIGRtYWJ1ZiBpZDolZFxcblwmIzM0OywgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MTUtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTU1Mi1cdFx0ICAgIFwmIzM0OyAgICAgICAgZmlsZSBjb3VudDogJWxkLCBHRU0gcmVmOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo1NTM6XHRcdCAgICB2Z3B1LVx1MDAzZWlkLCBkbWFidWZfb2JqLVx1MDAzZWRtYWJ1Zl9pZCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01NTQtXHRcdCAgICBrcmVmX3JlYWQoXHUwMDI2ZG1hYnVmX29iai1cdTAwM2VrcmVmKSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9NTcyPXZvaWQgaW50ZWxfdmdwdV9kbWFidWZfY2xlYW51cChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTgxLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjU4MjpcdFx0aWRyX3JlbW92ZShcdTAwMjZ2Z3B1LVx1MDAzZW9iamVjdF9pZHIsIGRtYWJ1Zl9vYmotXHUwMDNlZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODMtXHRcdGxpc3RfZGVsKHBvcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5oPTU5PXN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmoge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaC02MS1cdHN0cnVjdCBpbnRlbF92Z3B1X2ZiX2luZm8gKmluZm87XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg6NjI6XHRfX3UzMiBkbWFidWZfaWQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNjMtXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaD02OD1pbnQgaW50ZWxfdmdwdV9xdWVyeV9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdm9pZCAqYXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg6Njk6aW50IGludGVsX3ZncHVfZ2V0X2RtYWJ1ZihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNzAtdm9pZCBpbnRlbF92Z3B1X2RtYWJ1Zl9jbGVhbnVwKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYz0xMjU5PXN0YXRpYyBsb25nIGludGVsX3ZncHVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZmlvX2RldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xMzY0LVx0XHRtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzNjU6XHRcdFx0XHQgICAgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNjYtXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkbWFidWYsICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNzctXHR9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0RFVklDRV9HRVRfR0ZYX0RNQUJVRikge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM6MTM3ODpcdFx0X191MzIgZG1hYnVmX2lkO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM3OS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODA6XHRcdGlmIChnZXRfdXNlcihkbWFidWZfaWQsIChfX3UzMiBfX3VzZXIgKilhcmcpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM4MS1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODI6XHRcdHJldHVybiBpbnRlbF92Z3B1X2dldF9kbWFidWYodmdwdSwgZG1hYnVmX2lkKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzODMtXHR9XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTE5MjQ9c3RydWN0IHNvY2tjbV9jb29raWUge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0xOTI5LVx0dTMyIHByaW9yaXR5O1xuaW5jbHVkZS9uZXQvc29jay5oOjE5MzA6XHR1MzIgZG1hYnVmX2lkO1xuaW5jbHVkZS9uZXQvc29jay5oLTE5MzEtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmg9MjM9c3RydWN0IGRtYWJ1Zl9jbXNnIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMjktXHRcdFx0XHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaDozMDpcdF9fdTMyICBkbWFidWZfaWQ7XHQvKiBkbWFidWYgaWQgdGhpcyBmcmFnIGJlbG9uZ3MgdG8uICovXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMzEtXHRfX3UzMiBmbGFncztcdFx0LyogQ3VycmVudGx5IHVudXNlZC4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODExPXN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04MzEtXHRcdF9fdTMyIHJlZ2lvbl9pbmRleDtcdC8qIHJlZ2lvbiBpbmRleCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4MzI6XHRcdF9fdTMyIGRtYWJ1Zl9pZDtcdC8qIGRtYS1idWYgaWQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMzLVx0fTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg0Mi0gKiBSZXR1cm4gYSBuZXcgZG1hLWJ1ZiBmaWxlIGRlc2NyaXB0b3IgZm9yIGFuIGV4cG9zZWQgZ3Vlc3QgZnJhbWVidWZmZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODQzOiAqIGRlc2NyaWJlZCBieSB0aGUgcHJvdmlkZWQgZG1hYnVmX2lkLiBUaGUgZG1hYnVmX2lkIGlzIHJldHVybmVkIGZyb20gVkZJT19cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODQ0LSAqIERFVklDRV9RVUVSWV9HRlhfUExBTkUgYXMgYSB0b2tlbiBvZiB0aGUgZXhwb3NlZCBndWVzdCBmcmFtZWJ1ZmZlci5cbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0zODQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGV2bWVtLmM6Mzg1Olx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXG5uZXQvY29yZS9kZXZtZW0uYy0zODYte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM5MS1cbm5ldC9jb3JlL2Rldm1lbS5jOjM5MjpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYoZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTM5My1cdGlmICghYmluZGluZyB8fCAhYmluZGluZy1cdTAwM2V0eF92ZWMpIHtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTU2Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjI4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMTE1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2NvcmUvc29jay5jOjMxMTY6XHRcdHNvY2tjLVx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xubmV0L2NvcmUvc29jay5jLTMxMTctXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTE0Ny1cdFx0XHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxubmV0L2lwdjQvdGNwLmM6MTE0ODpcdFx0XHRcdFx0XHQgICAgIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNDktXHRcdFx0aWYgKCF1YXJnKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTE1Ny1cbm5ldC9pcHY0L3RjcC5jOjExNTg6XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTc1LVxubmV0L2lwdjQvdGNwLmM6MTE3NjpcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3AuYy0xMTc3LVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI1MDM9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI2MDItXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XG5uZXQvaXB2NC90Y3AuYzoyNjAzOlx0XHRcdFx0ZG1hYnVmX2Ntc2cuZG1hYnVmX2lkID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChuaW92KTtcbm5ldC9pcHY0L3RjcC5jLTI2MDQtXG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTEwMT1zdGF0aWMgaW50IG1ib2Noc19xdWVyeV9nZnhfcGxhbmUoc3RydWN0IG1kZXZfc3RhdGUgKm1kZXZfc3RhdGUsXG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTEzNC1cdFx0cGxhbmUtXHUwMDNlc2l6ZVx0ICAgICAgPSAwO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTEzNTpcdFx0cGxhbmUtXHUwMDNlZG1hYnVmX2lkICAgICAgPSAwO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTEzNi1cdFx0Z290byBkb25lO1xuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTEtXHRwbGFuZS1cdTAwM2VzaXplXHQgICAgICA9IGRtYWJ1Zi1cdTAwM2Vtb2RlLnNpemU7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMTUyOlx0cGxhbmUtXHUwMDNlZG1hYnVmX2lkICAgICAgPSBkbWFidWYtXHUwMDNlaWQ7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTUzLVxuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTUtXHRpZiAocGxhbmUtXHUwMDNlZHJtX3BsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSBcdTAwMjZcdTAwMjZcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTY6XHQgICAgbWRldl9zdGF0ZS1cdTAwM2VhY3RpdmVfaWQgIT0gcGxhbmUtXHUwMDNlZG1hYnVmX2lkKSB7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTU3LVx0XHRkZXZfZGJnKG1kZXZfc3RhdGUtXHUwMDNldmRldi5kZXYsIFwmIzM0OyVzOiBwcmltYXJ5OiAlZCA9XHUwMDNlICVkXFxuXCYjMzQ7LFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1ODpcdFx0XHRfX2Z1bmNfXywgbWRldl9zdGF0ZS1cdTAwM2VhY3RpdmVfaWQsIHBsYW5lLVx1MDAzZWRtYWJ1Zl9pZCk7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMTU5Olx0XHRtZGV2X3N0YXRlLVx1MDAzZWFjdGl2ZV9pZCA9IHBsYW5lLVx1MDAzZWRtYWJ1Zl9pZDtcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNjAtXHR9XG4tLVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTE4OD1zdGF0aWMgbG9uZyBtYm9jaHNfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNjYtXHR7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMjY3Olx0XHR1MzIgZG1hYnVmX2lkO1xuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI2OC1cbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjEyNjk6XHRcdGlmIChnZXRfdXNlcihkbWFidWZfaWQsIChfX3UzMiBfX3VzZXIgKilhcmcpKVxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI3MC1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNzEtXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYzoxMjcyOlx0XHRyZXR1cm4gbWJvY2hzX2dldF9nZnhfZG1hYnVmKG1kZXZfc3RhdGUsIGRtYWJ1Zl9pZCk7XG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMjczLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTAxPXN0YXRpYyB1bnNpZ25lZCBpbnQgaWZpbmRleDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDM6c3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0LXN0YXRpYyBpbnQgd2FpdHRpbWVfbXMgPSA1MDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz02OTg9c3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMxLVx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2dvdCBkbWFidWYgaWQ9JWRcXG5cJiMzNDssIHJzcC1cdTAwM2VpZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjczMjpcdGRtYWJ1Zl9pZCA9IHJzcC1cdTAwM2VpZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9NzQ2PXN0YXRpYyBpbnQgYmluZF90eF9xdWV1ZSh1bnNpZ25lZCBpbnQgaWZpbmRleCwgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTc3NC1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtnb3QgdHggZG1hYnVmIGlkPSVkXFxuXCYjMzQ7LCByc3AtXHUwMDNlaWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo3NzU6XHR0eF9kbWFidWZfaWQgPSByc3AtXHUwMDNlaWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTc3Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMS1cdFx0XHRmcHJpbnRmKHN0ZGVycixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAxMjpcdFx0XHRcdFwmIzM0O3JlY2VpdmVkIGZyYWdfcGFnZT0lbGx1LCBpbl9wYWdlX29mZnNldD0lbGx1LCBmcmFnX29mZnNldD0lbGx1LCBmcmFnX3NpemU9JXUsIHRva2VuPSV1LCB0b3RhbF9yZWNlaXZlZD0lbHUsIGRtYWJ1Zl9pZD0ldVxcblwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMy1cdFx0XHRcdGRtYWJ1Zl9jbXNnLVx1MDAzZWZyYWdfb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxNi1cdFx0XHRcdGRtYWJ1Zl9jbXNnLVx1MDAzZWZyYWdfc2l6ZSwgZG1hYnVmX2Ntc2ctXHUwMDNlZnJhZ190b2tlbixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAxNzpcdFx0XHRcdHRvdGFsX3JlY2VpdmVkLCBkbWFidWZfY21zZy1cdTAwM2VkbWFidWZfaWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDE4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE5Olx0XHRcdGlmIChkbWFidWZfY21zZy1cdTAwM2VkbWFidWZfaWQgIT0gZG1hYnVmX2lkKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEwMjA6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7cmVjZWl2ZWQgb24gd3JvbmcgZG1hYnVmX2lkOiBmbG93IHN0ZWVyaW5nIGVycm9yXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAyMS1cdFx0XHRcdGdvdG8gZXJyX2Nsb3NlX2NsaWVudDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzOTE6XHRcdGRkbWFidWYgPSB0eF9kbWFidWZfaWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERNQS1CVUYgSURzIHdpdGggU0NNX0RFVk1FTV9ETUFCVUYqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBleGFjdGx5IGBzb2NrYy5kbWFidWZfaWRgIGdldHMgc2V0IHdpdGhpbiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGhhcHBlbmluZyBkdXJpbmcgYSBgc2VuZG1zZ2Agb3BlcmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX3NvY2tfY21zZ19zZW5kYCwgbGlrZWx5IHdoZW4gYSBjb250cm9sIG1lc3NhZ2Ugb2YgdHlwZSBgU0NNX0RFVk1FTV9ETUFCVUZgIChvciBzb21ldGhpbmcgYW5hbG9nb3VzKSBpcyBlbmNvdW50ZXJlZC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYENNU0dfREFUQShjbXNnKWAgbWFjcm8gaXMgaW52b2x2ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQgbWUganVtcCBpbnRvIHRoZSBjb2RlIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTE2LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyBhcm91bmQgdGhlIGNtc2cgaGFuZGxpbmcgbG9naWMuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgYW5zd2VyJiMzOTtzIGluIHRoZXJlLiBJIGJldCBpdCBpcyBzZXQgd2hlbiB0aGUgY21zZyBpcyBoYW5kbGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwMDpcdFx0XHRzb2NrYy1cdTAwM2V0c2ZsYWdzIHw9IFNPQ0tDTV9GTEFHX1RTX09QVF9JRDtcbjMxMDE6XHRcdFx0YnJlYWs7XG4zMTAyOlx0XHQvKiBTQ01fUklHSFRTIGFuZCBTQ01fQ1JFREVOVElBTFMgYXJlIHNlbWFudGljYWxseSBpbiBTT0xfVU5JWC4gKi9cbjMxMDM6XHRcdGNhc2UgU0NNX1JJR0hUUzpcbjMxMDQ6XHRcdGNhc2UgU0NNX0NSRURFTlRJQUxTOlxuMzEwNTpcdFx0XHRicmVhaztcbjMxMDY6XHRcdGNhc2UgU09fUFJJT1JJVFk6XG4zMTA3Olx0XHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcbjMxMDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDk6XHRcdFx0aWYgKCFza19zZXRfcHJpb19hbGxvd2VkKHNrLCAqKHUzMiAqKUNNU0dfREFUQShjbXNnKSkpXG4zMTEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjMxMTE6XHRcdFx0c29ja2MtXHUwMDNlcHJpb3JpdHkgPSAqKHUzMiAqKUNNU0dfREFUQShjbXNnKTtcbjMxMTI6XHRcdFx0YnJlYWs7XG4zMTEzOlx0XHRjYXNlIFNDTV9ERVZNRU1fRE1BQlVGOlxuMzExNDpcdFx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXG4zMTE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTE2Olx0XHRcdHNvY2tjLVx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xuMzExNzpcdFx0XHRicmVhaztcbjMxMTg6XHRcdGRlZmF1bHQ6XG4zMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEyMDpcdFx0fVxuMzEyMTpcdFx0cmV0dXJuIDA7XG4zMTIyOlx0fVxuMzEyMzpcdEVYUE9SVF9TWU1CT0woX19zb2NrX2Ntc2dfc2VuZCk7XG4zMTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgU0NNX0RFVk1FTV9ETUFCVUZgICppcyogaW5kZWVkIHVzZWQgaW4gYHNlbmRtc2dgIHRvIHBhc3MgdGhlIGBkbWFidWZfaWRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCB0aGF0IGAtRU9QTk9UU1VQUGAgcmV0dXJuIHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWAgYW5kIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enogdGFyZ2V0LiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIEkgcmVtZW1iZXIgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIHRoZSBvbmUgY2FsbGVkIHdoZW4gd2UgYmluZCB0aGUgZG1hYnVmIHRvIHRoZSBuZXRkZXYsIHdoaWxlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBnZXRzIGNhbGxlZCBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gU2luY2UgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGlzIGEgcmVhbCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIHdoZW4gYENPTkZJR19ORVRfREVWTUVNYCBpcyBlbmFibGVkLCB0aGF0IGxvb2tzIHByb21pc2luZyBhcyBhIGZvY3VzIHN5bWJvbC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBBaCwgaXQmIzM5O3Mgbm90IHN0YXRpYzoKCmBgYGMKc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLAoJCQkJCQkJIHVuc2lnbmVkIGludCBkbWFidWZfaWQpCmBgYAoKUGVyZmVjdCwgdGhhdCBtYWtlcyBpdCBhIGdyZWF0IGNob2ljZS4gSSBhbHNvIGNvbnNpZGVyZWQgYF9fc29ja19jbXNnX3NlbmRgLCBidXQgdGhhdCYjMzk7cyBqdXN0IHRvbyBnZW5lcmljLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBidXQgaXQmIzM5O3MgYSBob3QgcGF0aCwgc28gSSYjMzk7ZCBwcmVmZXIgdG8gYXZvaWQgZm9jdXNpbmcgb24gc29tZXRoaW5nIHNvIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHVubGVzcyBpdCBiZWNvbWVzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgYWxzbyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBiaW5kaW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHRcdHJldHVybiAwO1xuIDE4MjpcdFxuIDE4MzpcdGVycl9jbG9zZV9yeHE6XG4gMTg0Olx0XHRuZXRpZl9tcF9jbG9zZV9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMpO1xuIDE4NTpcdFx0cmV0dXJuIGVycjtcbiAxODY6XHR9XG4gMTg3Olx0XG4gMTg4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE4OTpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiAxOTA6XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gMTkxOlx0XHRcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXG4gMTkyOlx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiAxOTM6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAxOTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxOTU6XHR7XG4gMTk2Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAxOTc6XHRcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXHUwMDNjXHUwMDNjIG5pb3Zfc2hpZnQ7XG4gMTk4Olx0XHRzdGF0aWMgdTMyIGlkX2FsbG9jX25leHQ7XG4gMTk5Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkZvY3VzaW5nIEluOiBETUEgQnVmZmVyIEJpbmRpbmcqKgoKT2theSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCwgY2VudHJhbCBwb2ludCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIERNQSBidWZmZXIgYmluZGluZyBwcm9jZXNzIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgbWVtb3J5IHNwYWNlLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIHRoYXQgb25lIG91dC4KCkFuZCwgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIHRoZW4gbWFuYWdlZCBpbiB0aGUgcXVldWUsIHNvIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYmluZGluZyBhbmQgcXVldWluZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgd2lsbCBiZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0XHRuZXRpZl9tcF9jbG9zZV9yeHEoYmluZGluZy1cdTAwM2VkZXYsIHJ4cV9pZHgsIFx1MDAyNm1wX3BhcmFtcyk7XG4gMTUxOlx0XHR9XG4gMTUyOlx0XG4gMTUzOlx0XHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmluZGluZy1cdTAwM2VyZWYpO1xuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHRpbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbiAxNTc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAxNTg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTU5Olx0e1xuIDE2MDpcdFx0c3RydWN0IHBwX21lbW9yeV9wcm92aWRlcl9wYXJhbXMgbXBfcGFyYW1zID0ge1xuIDE2MTpcdFx0XHQubXBfcHJpdlx0PSBiaW5kaW5nLFxuIDE2MjpcdFx0XHQubXBfb3BzXHRcdD0gXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXG4gMTYzOlx0XHR9O1xuIDE2NDpcdFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxO1xuIDE2NTpcdFx0dTMyIHhhX2lkeDtcbiAxNjY6XHRcdGludCBlcnI7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAoYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0ICE9IFBBR0VfU0hJRlQpXG4gMTY5Olx0XHRcdG1wX3BhcmFtcy5yeF9wYWdlX3NpemUgPSAxVSBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAyNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRGV2bWVtIFRDUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGRldm1lbSBUQ1AgcGF0Y2ggYW5kIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMuIEl0IGxvb2tzIGxpa2UgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBmdW5jdGlvbiwgYnV0IHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAKCk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUsIHRoZSBwYXRjaCByZWxpZXMgb24gYSBmZXcgY3JpdGljYWwgY29uZmlnczoKCiogICBgTkVUX0RFVk1FTWAKKiAgIGBETUFfU0hBUkVEX0JVRkZFUmAKKiAgIGBQQUdFX1BPT0xgCgpJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBgTkVUX0RFVk1FTWAgKmRlcGVuZHMgb24qIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYW5kICpzZWxlY3RzKiBgR0VORVJJQ19BTExPQ0FUT1JgLiBUaGF0IGNvbmZpcm1zIHRoYXQgc2ltcGx5IGVuYWJsaW5nIGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgIHByb3ZpZGVzIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uCgpOb3csIHRoZSBhY3R1YWwgY2hhbmdlIGlzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyBhZGRpbmcgdGhpcyBuZXcgY2hlY2s6CgpgYGBjCiAgICBpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCkgewogICAgCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpOwogICAgCWlmIChJU19FUlIoYmluZGluZykpIHsKICAgIAkJZXJyID0gUFRSX0VSUihiaW5kaW5nKTsKICAgIAkJYmluZGluZyA9IE5VTEw7CiAgICAJCWdvdG8gb3V0X2VycjsKICAgIAl9CiAgICAJaWYgKHpjICE9IE1TR19aRVJPQ09QWSkgewogICAgCQllcnIgPSAtRU9QTk9UU1VQUDsKICAgIAkJZ290byBvdXRfZXJyOwogICAgCX0KICAgIH0KYGBgCgpFZmZlY3RpdmVseSwgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzbiYjMzk7dCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGUgcmVhc29uaW5nIG1ha2VzIHBlcmZlY3Qgc2Vuc2U6IGl0JiMzOTtzIHdpdGhpbiB0aGUgY29yZSBUQ1AgYHNlbmRtc2dgIHBhdGggYW5kIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBmZWF0dXJlLCBhY2Nlc3NpYmxlIHZpYSB1c2Vyc3BhY2UgYHNlbmRtc2dgIGFuZCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJIG1hZGUgc3VyZSBgTkVUX0RFVk1FTWAgZG9lc24mIzM5O3QgcmVseSBvbiBgWERQX1NPQ0tFVFNgIG9yIGFueXRoaW5nIHVuZXhwZWN0ZWQuIEFsc28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYFNDTV9ERVZNRU1fRE1BQlVGYCBjYW4gYmUgdXNlZCB3aXRob3V0IGBORVRfREVWTUVNYC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIHRvIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NNX0RFVk1FTV9ETUFCVUYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTU2PVNldHVwJiMzOTssIGFuZCB0aGUga2VybmVsIHNpZ25hbHMgc3VjaCB0byB0aGUgdXNlciB2aWEgdGhlIFNDTV9ERVZNRU1fKiBjbXNnczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTU5LVx0XHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9TT0NLRVQgfHxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE2MDpcdFx0XHRcdChjbS1cdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9ETUFCVUYgXHUwMDI2XHUwMDI2XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjEtXHRcdFx0XHQgY20tXHUwMDNlY21zZ190eXBlICE9IFNDTV9ERVZNRU1fTElORUFSKSlcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjUtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNjY6XHRcdFx0aWYgKGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fREVWTUVNX0RNQUJVRikge1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY3LVx0XHRcdFx0LyogRnJhZyBsYW5kZWQgaW4gZG1hYnVmLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE5OS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMDotIFNDTV9ERVZNRU1fRE1BQlVGOiB0aGlzIGluZGljYXRlcyB0aGUgZnJhZ21lbnQgbGFuZGVkIGluIHRoZSBkbWFidWYgaW5kaWNhdGVkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDEtICBieSBkbWFidWZfaWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MjEyPUZyZWVpbmcgZnJhZ3Ncbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMTQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMTU6RnJhZ3MgcmVjZWl2ZWQgdmlhIFNDTV9ERVZNRU1fRE1BQlVGIGFyZSBwaW5uZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSB0aGUgdXNlclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE2LXByb2Nlc3NlcyB0aGUgZnJhZy4gVGhlIHVzZXIgbXVzdCByZXR1cm4gdGhlIGZyYWcgdG8gdGhlIGtlcm5lbCB2aWFcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yOTM9U2VuZGluZyBkYXRhXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjk1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6Mjk2OkRldm1lbSBkYXRhIGlzIHNlbnQgdXNpbmcgdGhlIFNDTV9ERVZNRU1fRE1BQlVGIGNtc2cuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yOTctXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MzA2PWZyb20gb2Zmc2V0IDIwMDAgaW50byB0aGUgZG1hYnVmLiBUaGUgZG1hYnVmIHRvIHNlbmQgZnJvbSBpcyB0eF9kbWFidWZfaWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyNS0gICAgICAgY21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMyNjogICAgICAgY21zZy1cdTAwM2VjbXNnX3R5cGUgPSBTQ01fREVWTUVNX0RNQUJVRjtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyNy0gICAgICAgY21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xuLS1cbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDUtI2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQ3LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1Ni0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTc6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTU4LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQxLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0MHg0MDRGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0My0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0MHg0MDUwXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTEzOC0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUYgICAgICAgICAweDAwNThcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MC0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRCAgICAgICAweDAwNTlcbi0tXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTQwLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0NzlcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDE6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0Mi0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0ODBcbi0tXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2suYy0zMTEyLVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2suYzozMTEzOlx0Y2FzZSBTQ01fREVWTUVNX0RNQUJVRjpcbm5ldC9jb3JlL3NvY2suYy0zMTE0LVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0MC0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQxOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcdFNPX0RFVk1FTV9ETUFCVUZcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDItI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcdDgwXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz04NDc9c3RhdGljIGludCBkb19zZXJ2ZXIoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk4MS1cdFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBTT0xfU09DS0VUIHx8XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjk4MjpcdFx0XHQgICAgKGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0RNQUJVRiBcdTAwMjZcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtOTgzLVx0XHRcdCAgICAgY20tXHUwMDNlY21zZ190eXBlICE9IFNDTV9ERVZNRU1fTElORUFSKSkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9MTI3NT1zdGF0aWMgaW50IGRvX2NsaWVudChzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4Ny1cdFx0Y21zZy1cdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTM4ODpcdFx0Y21zZy1cdTAwM2VjbXNnX3R5cGUgPSBTQ01fREVWTUVNX0RNQUJVRjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4OS1cdFx0Y21zZy1cdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkxNAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA4NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBkZXZtZW1gIFRDUCBGZWF0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIGhvdyB0aGUgYFNDTV9ERVZNRU1fRE1BQlVGYCBjb250cm9sIG1lc3NhZ2UgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYF9fc29ja19jbXNnX3NlbmRgIHBhcnNlcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc29ja2MuZG1hYnVmX2lkYCB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29uZGl0aW9uYWwuIFRoZSByZWFsIGNydXggb2YgdGhpcyBsaWVzIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuCgpJZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzICpub3QqIGVuYWJsZWQsIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCB3aWxsIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGlzIGlzIHRoZSBrZXkuIFdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCwgdGhlIHdob2xlIG1vZGlmaWVkIHNlY3Rpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgZWZmZWN0aXZlbHkgYnlwYXNzZWQgYmVjYXVzZSB0aGUgY2hlY2sgYGlmIChJU19FUlIoYmluZGluZykpYCB3aWxsIGltbWVkaWF0ZWx5IGhpdCB0aGUgZXJyb3IgY2FzZSBiZWZvcmUgcmVhY2hpbmcgdGhlIGNoZWNrIGZvciBgemMgIT0gTVNHX1pFUk9DT1BZYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgKmFic29sdXRlbHkqIHJlcXVpcmVkIHRvIGV2ZW4gcmVhY2ggdGhlIGxvZ2ljIHdoZXJlIHRoZSBgTVNHX1pFUk9DT1BZYCBjaGVjayBpcyBpbnRyb2R1Y2VkLiBUaGlzIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgcmVsYXRlZCB0byB0aGUgZGV2bWVtIFRDUCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgaWYgYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYFdvcnRoRnV6emluZzogdHJ1ZWAgZ2l2ZW4gdGhpcy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhbGlkYXRpb24gc3RlcC4gVGhlIGtleSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6IGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBhcmUgZm9yICpiaW5kaW5nKiB0aGUgRE1BIGJ1ZmZlciB0byB0aGUgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgdGhlIHNldHVwIHBoYXNlIGZvciBkZXZtZW0gVENQLiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgaXMgdGhlbiBjYWxsZWQgZHVyaW5nIGBzZW5kbXNnYCB0byB2YWxpZGF0ZSB0aGUgZG1hYnVmIElELiBFeGNlbGxlbnQsIHRoZXNlIGFyZSBleGFjdGx5IHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgc3RhdGljPyBOb3BlLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIGV4cG9ydGVkLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSwgYXMgaXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBkbWFidWYuCgpGaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbGlzdCBhbGwgdGhyZWUgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHJldHVybiAtRU9QTk9UU1VQUCBpZiBkbWFidWYgaXMgdXNlZCB3aXRob3V0IE1TR19aRVJPQ09QWSBzdXBwb3J0ICh3aGVuIGB6YyAhPSBNU0dfWkVST0NPUFlgKS4gVGhpcyBpcyBhIGxvZ2ljIGFuZCBmZWF0dXJlIHN1cHBvcnQgY2hlY2sgdGhhdCBwcmV2ZW50cyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zIHdoZW4gdXNpbmcgZG1hYnVmcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayB3b3VsZCBsaWtlbHkgYmUgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA0NTU0NDFmMWI2OTQ5Li5mNDAzODMwYWY2NWY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTE2Miw2ICYjNDM7MTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCQkJYmluZGluZyA9IE5VTEw7CiAJCQkJCWdvdG8gb3V0X2VycjsKIAkJCQl9CiYjNDM7CQkJCWlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHsKJiM0MzsJCQkJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJCQkJZ290byBvdXRfZXJyOwomIzQzOwkJCQl9CiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19TUExJQ0VfUEFHRVMpICZhbXA7JmFtcDsgc2l6ZSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBTZW5kIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoaXMgZnVuY3Rpb24sIGFzIEkgcmVjYWxsLCBpcyB0aGUgY29yZSBvZiB0aGUgVENQIHNlbmQgcGF0aCBvbiB0aGUgSVB2NCBzdGFjay4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6CgpgYGBjCgkJCQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7CgkJCQkJZXJyID0gLUVPUE5PVFNVUFA7CgkJCQkJZ290byBvdXRfZXJyOwoJCQkJfQpgYGAKClRoaXMgaXMgYmVpbmcgaW5zZXJ0ZWQgd2l0aGluIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZWFscyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBiaW5kaW5nYCwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2Ygc29ja2V0LWxldmVsIGJpbmRpbmcgY29uZmlndXJhdGlvbiBvciBwb3NzaWJseSBhZGRyZXNzIHNlbGVjdGlvbi4gIEl0IHNlZW1zIHRvIGJlIG5lc3RlZCB3aXRoaW4gYSBsYXJnZXIgYGlmYCBibG9jaywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBzb2NrZXQgaXMgY29uZmlndXJlZC4gTW9yZSBjb250ZXh0IGlzIG5lZWRlZCB0byBzZWUgd2hhdCBgYmluZGluZ2AgcmVmZXJzIHRvIGhlcmUuCgpUaGUga2V5IHBhcnQsIGhvd2V2ZXIsIGlzIHRoZSBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgIGNoZWNrLiAgSWYgYHpjYCBpc24mIzM5O3QgYE1TR19aRVJPQ09QWWAsIHRoZW4gYW4gYC1FT1BOT1RTVVBQYCBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHdlIGp1bXAgdG8gYG91dF9lcnJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY29kZSBwYXRoIGlzIGJlaW5nIGV4cGxpY2l0bHkgKmxpbWl0ZWQqIHRvIG9ubHkgaGFuZGxpbmcgemVyby1jb3B5IG9wZXJhdGlvbnMuICBTbywgdGhpcyBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgbG9naWMgd2l0aGluIHRoaXMgYmxvY2sgb2YgY29kZSBpcyAqb25seSogYXBwbGljYWJsZSBpbiB0aGUgY29udGV4dCBvZiB6ZXJvLWNvcHksIGFuZCBvdGhlciBzZW5kIHBhdGhzIHdpbGwgaGl0IHRoaXMgJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgZXJyb3IsIGluZGljYXRpbmcgYSBmZWF0dXJlIHRoYXQgaXMgbm90IGltcGxlbWVudGVkICh5ZXQpLCBvciBpbnRlbmRlZCBvbmx5IGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGxhcmdlciBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgYHpjYCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0NC1cbm5ldC9pcHY0L3RjcC5jOjEyNDU6XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG5uZXQvaXB2NC90Y3AuYy0xMjQ2LVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NDctfVxubmV0L2lwdjQvdGNwLmM6MTQ0ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xubmV0L2lwdjQvdGNwLmMtMTQ0OS1cbm5ldC9pcHY0L3RjcC5jPTE0NTA9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDU0LVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjE0NTU6XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XG5uZXQvaXB2NC90Y3AuYy0xNDU2LVx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb3JlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBuZXQvaXB2NC90Y3AuY2Ag4oCTIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTE2Mi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgYSBzcGVjaWZpYyBiZWhhdmlvciByZWxhdGVkIHRvIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBwZXJoYXBzIHJlbGF0ZWQgdG8gY29uZ2VzdGlvbiBjb250cm9sLCB3aW5kb3dpbmcsIG9yIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIGxpbmUgbnVtYmVyIGJlY2F1c2UgSSYjMzk7bSBlaXRoZXI6CgoqICAgQ2hhc2luZyBkb3duIGEgbGVhZCBmcm9tIGEgcHJldmlvdXMgZGVidWdnaW5nIHNlc3Npb24sIGEgcGVyZm9ybWFuY2UgcmVwb3J0LCBvciBldmVuIGEgY3Jhc2ggZHVtcCwgYW5kIHRoaXMgbGluZSBpcyBmbGFnZ2VkIGFzIGludGVyZXN0aW5nLgoqICAgRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBUQ1AgZmVhdHVyZSB0aGF0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgd2l0aCwgYmUgdGhhdCBmb3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIG9yIHVuZGVyc3RhbmRpbmcgYmVoYXZpb3VyIGluIHNvbWUgdW51c3VhbCBzY2VuYXJpbyBJJiMzOTt2ZSBnb3QgaW4gbWluZC4KKiAgIFJldmlld2luZyB0aGUgY29kZSBhcyBwYXJ0IG9mIGEgZ2VuZXJhbCBhdWRpdCBvciBhbiBpbnZlc3RpZ2F0aW9uIGludG8gYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgoKVGhlIHNwZWNpZmljIGNvbnRleHQgYXJvdW5kIGxpbmUgMTE2MiBpcyB0aGUga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIChsaWtlbHkgYHN0cnVjdCBzb2NrYCwgYHN0cnVjdCB0Y3Bfc29ja2AsIGFuZCBtYXliZSBldmVuIGBzdHJ1Y3Qgc2tfYnVmZmApLCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBpbW1lZGlhdGVseSBzY2FuIGZvcjoKCiogICBDb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIG15IHRlc3QgY2FzZXMuCiogICBDcml0aWNhbCByZXNvdXJjZSBhbGxvY2F0aW9ucyBvciByZWxlYXNlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoqICAgQW55IHVudXN1YWwgb3IgaW5lZmZpY2llbnQgYWxnb3JpdGhtcy4KKiAgIERhdGEgcmFjZXMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW1tZWRpYXRlIGFpbSBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBpbXBvcnRhbnQsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBUQ1Agc3RhY2suIEkmIzM5O20gYXJtZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIFRDUC9JUCwgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaG9wZWZ1bGx5LCBzb21lIHByaW9yIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSB0byBtYWtlIHNlbnNlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTVNHX1pFUk9DT1BZKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE0MTpcdFx0XHRpZiAobXNnLVx1MDAzZW1zZ191YnVmKSB7XG4xMTQyOlx0XHRcdFx0dWFyZyA9IG1zZy1cdTAwM2Vtc2dfdWJ1ZjtcbjExNDM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNDQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE0NTpcdFx0XHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcbjExNDY6XHRcdFx0XHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XG4xMTQ3Olx0XHRcdFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcbjExNDk6XHRcdFx0XHRpZiAoIXVhcmcpIHtcbjExNTA6XHRcdFx0XHRcdGVyciA9IC1FTk9CVUZTO1xuMTE1MTpcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE1MjpcdFx0XHRcdH1cbjExNTM6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNTQ6XHRcdFx0XHRcdHpjID0gTVNHX1pFUk9DT1BZO1xuMTE1NTpcdFx0XHRcdGVsc2VcbjExNTY6XHRcdFx0XHRcdHVhcmdfdG9fbXNnemModWFyZyktXHUwMDNlemVyb2NvcHkgPSAwO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbjExNTk6XHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuMTE2MDpcdFx0XHRcdFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuMTE2MTpcdFx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuMTE2MjpcdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbjExNjM6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2NDpcdFx0XHRcdFx0fVxuMTE2NTpcdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuMTE2NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjExNjc6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE2ODpcdFx0XHRcdFx0fVxuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcdFx0fVxuMTE3MTpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgc2l6ZSkge1xuMTE3MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjYgTkVUSUZfRl9TRylcbjExNzM6XHRcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4xMTc0Olx0XHR9XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuMTE3NzpcdFx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuMTE3ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE3OTpcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTgwOlx0XHR9XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxuMTE4MzpcdFx0XHQgICAgIGluZXRfdGVzdF9iaXQoREVGRVJfQ09OTkVDVCwgc2spKSBcdTAwMjZcdTAwMjZcbjExODQ6XHRcdCAgICAhdHAtXHUwMDNlcmVwYWlyKSB7XG4xMTg1Olx0XHRcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xuMTE4NjpcdFx0XHRpZiAoZXJyID09IC1FSU5QUk9HUkVTUyBcdTAwMjZcdTAwMjYgY29waWVkX3N5biBcdTAwM2UgMClcbjExODc6XHRcdFx0XHRnb3RvIG91dDtcbjExODg6XHRcdFx0ZWxzZSBpZiAoZXJyKVxuMTE4OTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwOAoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFplcm8tQ29weSBhbmQgZG1hYnVmIEludGVyYWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHRoaXMgY29uZGl0aW9uYWwgY2hlY2ssIHNwZWNpZmljYWxseSBgaWYgKHpjICE9IE1TR19aRVJPQ09QWSlgLCB3aGVyZSBgemNgIGlzIGEgZmxhZyBhbmQgYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc2V0LCBsb29rcyBsaWtlIGEgY29udHJvbCBmbG93IGNoYW5nZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCBleHBvc2VzIG9yIGZpeGVzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3Igd3JpdGUuCgpIb3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoaXMgY2hlY2sgaXMgdGhlcmUgdG8gZW5mb3JjZSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB6ZXJvLWNvcHkgKGBNU0dfWkVST0NPUFlgKSBpcyBhY3R1YWxseSBlbmFibGVkIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIGEgZG1hYnVmIChgc29ja2MuZG1hYnVmX2lkYCkuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgZGVzaWduZWQgdG8gcHJldmVudCB0aGUgdXNlIG9mIGBkbWFidWZgIHVubGVzcyB6ZXJvLWNvcHkgaXMgc3VwcG9ydGVkLiBTcGVjaWZpY2FsbHksIGlmIHplcm8tY29weSBpcyAqbm90KiBzdXBwb3J0ZWQsIHRoZW4gdGhlIGBzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOyBORVRJRl9GX1NHYCBpcyBmYWxzZS4gVGhpcyBtZWFucyB0aGF0IHdlIGV4cGVjdCBgemNgIHdpbGwgYmUgc2V0IHRvIDAuCgpJZiBgemNgIGlzIDAsIHRoZW4gdGhlIGRhdGEgd291bGQgYmUgY29waWVkIGluc3RlYWQgb2YgdXNpbmcgdGhlIHplcm8tY29weSBwYXRoLiBUaGUgcmVhc29uIGZvciB0aGlzIHBhdGNoIGlzIHRoYXQgZG1hYnVmIGRhdGEgKmNhbm5vdCogYmUgY29waWVkIGluIHRoZSBzYW1lIHdheSwgb3IgbWF5YmUgbW9yZSBhY2N1cmF0ZWx5LCBpdCYjMzk7cyBzaW1wbHkgbm90IHN1cHBvcnRlZC4gVGhpcyBpbmRpY2F0ZXMgYSBsb2dpYyBidWcgb3IsIG1vcmUgbGlrZWx5LCBhIGNoZWNrIGZvciBhbiB1bnN1cHBvcnRlZCBmZWF0dXJlIGNvbWJpbmF0aW9uLCByYXRoZXIgdGhhbiBhbnkgYXR0ZW1wdCB0byBkZWFsIHdpdGggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZGlyZWN0bHkuCgpJbXBvcnRhbnRseSwgYHpjYCBpcyBpbml0aWFsaXplZCBsb2NhbGx5LCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQmIzM5O3MgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBLTVNBTi4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgcG9wdWxhdGVkIGZyb20gdGhlIGBjbXNnaGRyYCBwYXJzaW5nLCB3aGljaCBJIGFtIGNvbWZvcnRhYmxlIHdpdGguIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhbiBlcnJvciByZXR1cm4gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBydWxlIG91dCB0aGlzIHNwZWNpZmljIGNoYW5nZSBhcyBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpXaGlsZSBLQVNBTiBvciBnZW5lcmFsIGZ1enppbmcgKm1pZ2h0KiB1bmNvdmVyIGNyYXNoZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpZiBgZG1hYnVmYCBpcyBhdHRlbXB0ZWQgd2l0aG91dCB6ZXJvLWNvcHkgc3VwcG9ydCwgdGhlc2UgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGxvZ2ljIGVycm9ycyByZWxhdGVkIHRvIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoxOC42MzI2NDAwODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MzM2Mjk5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzIG5vdCBzZXQgd2hlbiBhIGRtYWJ1ZiBpcyBib3VuZCB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHNlbmRtc2cgcGF0aCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gVENQIGZlYXR1cmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agd2l0aCBgU0NNX0RFVk1FTV9ETUFCVUZgIGNtc2cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjE4LjYzMjY0NTA4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTIwNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhlZDc2MWQ2M2Y4YzU2YTUzMDA4NWNiOGQ5ODQ3ZDM4NGJjNjljNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTE6NTM6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmY0MDM4MzBhZjY1ZjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMTYyLDYgKzExNjIsMTAgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdGJpbmRpbmcgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xcbitcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoyMC4wMjQzNzE3OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQxNDE1MjEwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uZjQwMzgzMGFmNjVmNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjIsNiArMTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjIwLjAyNDM3MzI2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTA1NDY4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgbmV0L2lwdjQvdGNwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW50cm9kdWNlZCB0aGlzIGNoZWNrIHdpdGhpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb246XG5cbmBgYGNcbiBcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbiBcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoZXkncmUgZXhwbGljaXRseSByZWplY3RpbmcgYW55dGhpbmcgKm90aGVyKiB0aGFuIHplcm8tY29weSAoYE1TR19aRVJPQ09QWWApIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIG5vdy5cIiBUaGUgYC1FT1BOT1RTVVBQYCBlcnJvciBpcyBwcmV0dHkgY2xlYXI7IHRoZXkncmUgZXhwbGljaXRseSBzYXlpbmcgXCJ0aGlzIGlzbid0IHN1cHBvcnRlZC5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT8gV2hhdCdzIHRoZSBpbnRlbmRlZCBlZmZlY3Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoaXMgY2hhbmdlIGZ1bGx5LCBzbyBJIHdpbGwgbm93IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBsaW5lcyBhcm91bmQgbGluZSAxMTYyIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTM6MjMuOTE0OTIyMjY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE1MjpcXHRcXHRcXHRcXHR9XFxuMTE1MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNTQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE1NTpcXHRcXHRcXHRcXHRlbHNlXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHR1YXJnX3RvX21zZ3pjKHVhcmcpLVxcdTAwM2V6ZXJvY29weSA9IDA7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbjExNTk6XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xcbjExNjI6XFx0XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IE5VTEw7XFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE2NDpcXHRcXHRcXHRcXHRcXHR9XFxuMTE2NTpcXHRcXHRcXHRcXHRcXHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XFxuMTE2NjpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY5OlxcdFxcdFxcdFxcdH1cXG4xMTcwOlxcdFxcdFxcdH1cXG4xMTcxOlxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE3MjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNzM6XFx0XFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbjExNzQ6XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjZcXG4xMTc3OlxcdFxcdCAgICAoIShmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XFxuMTE3ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNzk6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzoyMy45MTUxMDM0NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjI1MTcwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBTZW5kbXNnIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjazogYGlmICh6YyAhPSBNU0dfWkVST0NPUFkpYCB3aXRoaW4gdGhhdCBleGlzdGluZyBibG9jayB0aGF0IGxvb2tzIGF0IGBzb2NrY19lcnJgIGFuZCBgc29ja2MuZG1hYnVmX2lkYC4gVGhpcyBpbnN0YW50bHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBkZXZtZW0gVENQYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCBpbiBUQ1AuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0J3MgcmlnaHQgaW4gdGhlIGNvcmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aC4gVGhpcyBraW5kIG9mIG1vZGlmaWNhdGlvbiBpcyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuIFdlJ3JlIGFsdGVyaW5nIGhvdyBUQ1Agc2VuZG1zZyBiZWhhdmVzLCBhbmQgdGhhdCAqYWx3YXlzKiB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBkZXZtZW0gVENQYC4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIGJlIGFjdGl2ZS4gVGhhdCB3aWxsIGluZm9ybSBob3cgSSBzZXQgdXAgYW55IHRlc3QgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTM6MzIuMTQwMjc2MTM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5MDUxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1OC1cXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzozMy42OTUxODU4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTg1NjA0MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG5ldC9jb3JlL2Rldm1lbS5jYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBuZXQvY29yZS9kZXZtZW0uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHF1ZXN0aW9uLCBidXQgdGhlIGFuc3dlciBjb3VsZCBsaWUgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVzZSB0aGUgY29uZmlnIHN5c3RlbSB0byBzZWFyY2ggZm9yIGRlcGVuZGVuY2llcy4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBmaW5kYCB0byBwaW5wb2ludCBhbnkgZGlyZWN0IG1lbnRpb25zIG9mIGl0LCB0aGVuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9uIHJlc3BvbnNpYmxlLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgb3B0aW9uLiBJcyBpdCBhIG1vZHVsZSwgb3IgYnVpbHQtaW4/IFdoYXQgYXJlIHRoZSBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbSBhbnRpY2lwYXRpbmcgdGhpcyBjb3VsZCBsZWFkIGRvd24gYSByYWJiaXQgaG9sZSBkZXBlbmRpbmcgb24gd2hhdCB0aGF0IGNvbmZpZyBvcHRpb24gZG9lcyBleGFjdGx5LCBidXQgYXQgdGhlIHZlcnkgbGVhc3QsIG15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IGluaXRpYWwgS2NvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1MzozOC4yODA3OTE0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ3OTY3NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1lbS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg0LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg1OiAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg2LSAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9NDA1PWluY29taW5nIGRhdGEgYW5kIHZhbGlkYXRlcyBpdCBhcyBzdWNoLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBsYXVuY2hcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDo0MDY6bmNkZXZtZW0gb24gdGhlIHNlcnZlciBieTo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtNDA3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM1LSAgICBwYWdlbWFwLm5yX3JhbmdlID0gMTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzNjogICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzctICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1NzYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTc3OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTc4LVxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz00NDM9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDQ5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NTA6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDUxLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTQ3ND1kcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc4LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0Nzk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MDY9c3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUwOS1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxMDpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUxMS19O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjIxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMgPSBkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMi1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZWRwYWdlbWFwO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTExND1pbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTY6XFx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyA9IGRldm1lbV9hbGxvY2F0aW9uLVxcdTAwM2VvcHM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExNy1cXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSBzdGF0ZSA9IHt9O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxNj1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLVxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjMxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTIzMi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTQwMj12b2lkIGRybV9wYWdlbWFwX2Rldm1lbV9pbml0KHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MDMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MDQ6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MDUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz03ODM9c3RhdGljIGludCB4ZV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy04MDUtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjgwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgZHBhZ2VtYXBfZGV2bWVtX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtODA3LVxcdC5kZXZtZW1fcmVsZWFzZSA9IHhlX3N2bV9kZXZtZW1fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz05NzE9c3RhdGljIGJvb2wgeGVfc3ZtX3JhbmdlX2lzX3ZhbGlkKHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGVfdGlsZSAqdGlsZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6OTczOlxcdFxcdFxcdFxcdCAgYm9vbCBkZXZtZW1fb25seSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtOTc0LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05NzgtXFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2V0aWxlX2ludmFsaWRhdGVkKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzo5Nzk6XFx0XFx0KCFkZXZtZW1fb25seSB8fCB4ZV9zdm1fcmFuZ2VfaGFzX3BhZ2VtYXAocmFuZ2UsIGRwYWdlbWFwKSkpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy05ODAtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTEwNTA9c3RhdGljIGludCB4ZV9kcm1fcGFnZW1hcF9wb3B1bGF0ZV9tbShzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEwOTYtXFx0XFx0ZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoXFx1MDAyNmJvLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbiwgZGV2LCBtbSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTA5NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZHBhZ2VtYXBfZGV2bWVtX29wcywgZHBhZ2VtYXAsIGVuZCAtIHN0YXJ0LFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMDk4LVxcdFxcdFxcdFxcdFxcdHByZV9taWdyYXRlX2ZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xMjA2PXN0YXRpYyBpbnQgX194ZV9zdm1faGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdm1hICp2bWEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTIxNS1cXHRcXHQuY2hlY2tfcGFnZXNfdGhyZXNob2xkID0gZGV2bWVtX3Bvc3NpYmxlID8gU1pfNjRLIDogMCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTIxNjpcXHRcXHQuZGV2bWVtX29ubHkgPSBuZWVkX3ZyYW0gXFx1MDAyNlxcdTAwMjYgZGV2bWVtX3Bvc3NpYmxlLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjE3LVxcdFxcdC50aW1lc2xpY2VfbXMgPSBuZWVkX3ZyYW0gXFx1MDAyNlxcdTAwMjYgZGV2bWVtX3Bvc3NpYmxlID9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMjI1LVxcdHN0cnVjdCB4ZV90aWxlICp0aWxlID0gZ3RfdG9fdGlsZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyMjY6XFx0aW50IG1pZ3JhdGVfdHJ5X2NvdW50ID0gY3R4LmRldm1lbV9vbmx5ID8gMyA6IDE7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyMjctXFx0a3RpbWVfdCBzdGFydCA9IHhlX2d0X3N0YXRzX2t0aW1lX2dldCgpLCBiaW5kX3N0YXJ0LCBnZXRfcGFnZXNfc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI0MC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTI0MTpcXHRkcGFnZW1hcCA9IGN0eC5kZXZtZW1fb25seSA/IHhlX3RpbGVfbG9jYWxfcGFnZW1hcCh0aWxlKSA6XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNDItXFx0XFx0eGVfdm1hX3Jlc29sdmVfcGFnZW1hcCh2bWEsIHRpbGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTE6XFx0aWYgKGN0eC5kZXZtZW1fb25seSBcXHUwMDI2XFx1MDAyNiAhcmFuZ2UtXFx1MDAzZWJhc2UucGFnZXMuZmxhZ3MubWlncmF0ZV9kZXZtZW0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTItXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNTMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyNTQ6XFx0aWYgKHhlX3N2bV9yYW5nZV9pc192YWxpZChyYW5nZSwgdGlsZSwgY3R4LmRldm1lbV9vbmx5LCBkcGFnZW1hcCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI1NS1cXHRcXHR4ZV9zdm1fcmFuZ2VfdmFsaWRfZmF1bHRfY291bnRfc3RhdHNfaW5jcihndCwgcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzAtXFx0XFx0aWYgKGVycikge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjcxOlxcdFxcdFxcdGlmIChtaWdyYXRlX3RyeV9jb3VudCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyNzItXFx0XFx0XFx0XFx0ZHJtX2RiZyhcXHUwMDI2dm0tXFx1MDAzZXhlLVxcdTAwM2Vkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3Ni1cXHRcXHRcXHRcXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxMjc3OlxcdFxcdFxcdFxcdCAqIEluIHRoZSBkZXZtZW0tb25seSBjYXNlLCBtaXhlZCBtYXBwaW5ncyBtYXlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI3OC1cXHRcXHRcXHRcXHQgKiBiZSBmb3VuZC4gVGhlIGdldF9wYWdlcyBmdW5jdGlvbiB3aWxsIGZpeFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEyODEtXFx0XFx0XFx0XFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEyODI6XFx0XFx0XFx0XFx0aWYgKGN0eC5kZXZtZW1fb25seSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTI4My1cXHRcXHRcXHRcXHRcXHRnb3RvIGdldF9wYWdlcztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xMzAyLVxcdFxcdGN0eC50aW1lc2xpY2VfbXMgXFx1MDAzY1xcdTAwM2M9IDE7XFx0LyogRG91YmxlIHRpbWVzbGljZSBpZiB3ZSBoYXZlIHRvIHJldHJ5ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjEzMDM6XFx0XFx0aWYgKG1pZ3JhdGVfdHJ5X2NvdW50IFxcdTAwM2UgMCB8fCAhY3R4LmRldm1lbV9vbmx5KSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTEzMDQtXFx0XFx0XFx0ZHJtX2RiZyhcXHUwMDI2dm0tXFx1MDAzZXhlLVxcdTAwM2Vkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTkyMD1pbnQgeGVfcGFnZW1hcF9jYWNoZV9jcmVhdGUoc3RydWN0IHhlX3RpbGUgKnRpbGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzNi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTkzNzpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwICp4ZV9kZXZtZW1fb3BlbihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIHJlZ2lvbl9pbnN0YW5jZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTkzOC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTk3Mj1zdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE5OTgtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE5OTk6XFx0ZHBhZ2VtYXAgPSB4ZV9kZXZtZW1fb3Blbih0b194ZV9kZXZpY2UoZHJtKSwgcmVnaW9uX2luc3RhbmNlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMjAwMC1cXHRkcm1fZGV2X2V4aXQoaWR4KTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0yMDI9c3RydWN0IGRybV9ncHVzdm0ge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTIzNi0gKiBAZGV2bWVtX3Bvc3NpYmxlOiBwb3NzaWJsZSB0byB1c2UgZGV2aWNlIG1lbW9yeVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyMzc6ICogQGRldm1lbV9vbmx5OiB1c2Ugb25seSBkZXZpY2UgbWVtb3J5XFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTIzOC0gKiBAYWxsb3dfbWl4ZWQ6IEFsbG93IG1peGVkIG1hcHBpbmdzIGluIGdldCBwYWdlcy4gTWl4aW5nIGJldHdlZW4gc3lzdGVtIGFuZFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTI0ND1zdHJ1Y3QgZHJtX2dwdXN2bV9jdHgge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTI1MC1cXHR1bnNpZ25lZCBpbnQgZGV2bWVtX3Bvc3NpYmxlIDoxO1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDoyNTE6XFx0dW5zaWduZWQgaW50IGRldm1lbV9vbmx5IDoxO1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0yNTItXFx0dW5zaWduZWQgaW50IGFsbG93X21peGVkIDoxO1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0xNzU9c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTc3LS8qKlxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MTc4OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIC0gT3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIEdQVSBTVk0gZGV2aWNlIG1lbW9yeVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMTc5LSAqXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTE4NC0gKi9cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oOjE4NTpzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyB7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0xODYtXFx0LyoqXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oPTMxNz1zdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtIHtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzIwLVxcdHN0cnVjdCBjb21wbGV0aW9uIGRldGFjaGVkO1xcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzIxOlxcdGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHM7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zMjItXFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcDtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg9MzUxPXZvaWQgZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmg6MzUzOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTM1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIHNpemVfdCBzaXplLFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTg9TU9EVUxFX1BBUk1fREVTQyhzcG1fYWRkcl9kZXYxLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNjAtXFxubGliL3Rlc3RfaG1tLmM6NjE6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzO1xcbmxpYi90ZXN0X2htbS5jLTYyLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkbWlycm9yX21pbl9vcHM7XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU5Ni1cXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAubnJfcmFuZ2UgPSAxO1xcbmxpYi90ZXN0X2htbS5jOjU5NzpcXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAub3BzID0gXFx1MDAyNmRtaXJyb3JfZGV2bWVtX29wcztcXG5saWIvdGVzdF9obW0uYy01OTgtXFx0ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLm93bmVyID0gbWRldmljZTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3MzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzY1LVxcbmxpYi90ZXN0X2htbS5jOjE3NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xcbmxpYi90ZXN0X2htbS5jLTE3NjctXFx0LmZvbGlvX2ZyZWVcXHQ9IGRtaXJyb3JfZGV2bWVtX2ZyZWUsXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5uZXQvY29yZS9NYWtlZmlsZS01My1vYmotJChDT05GSUdfREVCVUdfTkVUKSArPSBsb2NrX2RlYnVnLm9cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTI5PXN0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdzLCBYQV9GTEFHU19BTExPQzEpO1xcbm5ldC9jb3JlL2Rldm1lbS5jLTMwLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3Byb3ZpZGVyX29wcyBkbWFidWZfZGV2bWVtX29wcztcXG5uZXQvY29yZS9kZXZtZW0uYy0zMi1cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0NC1cXHRcXHRcXHQubXBfcHJpdlxcdD0gYmluZGluZyxcXG5uZXQvY29yZS9kZXZtZW0uYzoxNDU6XFx0XFx0XFx0Lm1wX29wc1xcdFxcdD0gXFx1MDAyNmRtYWJ1Zl9kZXZtZW1fb3BzLFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE0Ni1cXHRcXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTU2PWludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTYxLVxcdFxcdC5tcF9wcml2XFx0PSBiaW5kaW5nLFxcbm5ldC9jb3JlL2Rldm1lbS5jOjE2MjpcXHRcXHQubXBfb3BzXFx0XFx0PSBcXHUwMDI2ZG1hYnVmX2Rldm1lbV9vcHMsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTYzLVxcdH07XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz01MjQ9c3RhdGljIHZvaWQgbXBfZG1hYnVmX2Rldm1lbV91bmluc3RhbGwodm9pZCAqbXBfcHJpdixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0NC1cXG5uZXQvY29yZS9kZXZtZW0uYzo1NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xcbm5ldC9jb3JlL2Rldm1lbS5jLTU0Ni1cXHQuaW5pdFxcdFxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtX2xpYi5weT01Mz1kZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9UlhfUEFHRV9TSVpFX0RFRkFVTFQpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHk6NTQ6ICAgIFxcXCJcXFwiXFxcIlByb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbid0IHN1cHBvcnRlZC5cXFwiXFxcIlxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5LTU1LSAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIFBST0JFX1JYX1BBR0VfU0laRVM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQwLjQyODc2NzMxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjY5OTk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIEltcGxlbWVudGF0aW9uIHdpdGggYENPTkZJR19ORVRfREVWTUVNYCBDb25zaWRlcmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgY2xlYXI6IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHNwYXJrcyBhIHNwZWNpZmljIGxpbmUgb2YgaW5xdWlyeS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGltcGxpY2F0aW9uIHRoYXQgY29uZmlnIGhhcyBvbiB0aGUgdGNwIHNlbmQgcGF0aCwgZXNwZWNpYWxseSByZWdhcmRpbmcgbWVtb3J5IG1hcHBpbmcuIFNpbmNlIHRoZSBrZXkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gYG5ldC9pcHY0L3RjcC5jYC4gTXkgZm9jdXMgd2lsbCBiZSB2ZXJ5IHNwZWNpZmljOiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIG1pZ2h0IGJlIHVzZWQgaW4gdGhhdCBmdW5jdGlvbiBvciBpdHMgY2FsbGVlcywgcHJvYmFibHkgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IGFjY2Vzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbmV0X2Rldm1lbWAgaGFzIGJlZW4gc2FmZWx5IGhhbmRsZWQsIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2Ugc2VjdXJpdHkgcmlza3MuIEl0J3MgYSBxdWljayB0YWN0aWNhbCBhc3Nlc3NtZW50OyBsZXQncyBnZXQgaW4gdGhlcmUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQ0LjE5NTc2ODkwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDI2NjU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0PTEzPXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VEICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9kZWxhY2tfdGltZXJfaGFuZGxlcix0Y3BfZGVsYWNrX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0OjE0OnVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORyAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9wdXNoLHRjcF9zZW5kbXNnX2xvY2tlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdC0xNS11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfVENQRlJPTVpFUk9XSU5ET1dBRFYgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc2VsZWN0X3dpbmRvdyx0Y3BfdHJhbnNtaXQtc2tiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jPTMyMz1zdGF0aWMgaW50IHNpd190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBwYWdlICoqcGFnZSwgaW50IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ2LVxcdFxcdGxvY2tfc29jayhzayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYzozNDc6XFx0XFx0cnYgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2csIGJ5dGVzKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0OC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MzY3PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjM2ODppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMzY5LWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaD0yODk9VFJBQ0VfRVZFTlQodGNwX3JldHJhbnNtaXRfc3luYWNrLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM0LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oOjMzNTpUUkFDRV9FVkVOVCh0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmgtMzM2LVxcdFRQX1BST1RPKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NzMwLVxcdHsgXFxcInRjcF9zZW5kX3Jlc2V0XFxcIiwgMHgxMSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6NjczMTpcXHR7IFxcXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcXFwiLCAweDEwMCB9LFxcbmtlcm5lbC9icGYvYnRmLmMtNjczMi1cXHQvKiB0ZWdyYV9hcGJfZG1hICovXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTA2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDg1LVxcdC5yZWFkX3NrYlxcdCAgID0gdGNwX3JlYWRfc2tiLFxcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDg2OlxcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cXHQucGVla19sZW5cXHQgICA9IHRjcF9wZWVrX2xlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExMTUtXFxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvaXB2NC90Y3AuYy0xMTE3LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEyNDQtXFxubmV0L2lwdjQvdGNwLmM6MTI0NTpcXHRcXHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xcbm5ldC9pcHY0L3RjcC5jLTEyNDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDQ3LX1cXG5uZXQvaXB2NC90Y3AuYzoxNDQ4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zZW5kbXNnX2xvY2tlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTQ0OS1cXG5uZXQvaXB2NC90Y3AuYz0xNDUwPWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDU0LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6MTQ1NTpcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XFxubmV0L2lwdjQvdGNwLmMtMTQ1Ni1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTIyLVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTIzOlxcdFxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZ2hkciwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyNC1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY2MD1jb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MS1cXHQuc3BsaWNlX2VvZlxcdCAgID0gaW5ldF9zcGxpY2VfZW9mLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjgyOlxcdC5zZW5kbXNnX2xvY2tlZCAgICA9IHRjcF9zZW5kbXNnX2xvY2tlZCxcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4My1cXHQuc3BsaWNlX3JlYWRcXHQgICA9IHRjcF9zcGxpY2VfcmVhZCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xNjg9aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xOTQtXFxubmV0L3Rscy90bHNfbWFpbi5jOjE5NTpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2csIHNpemUpO1xcbm5ldC90bHMvdGxzX21haW4uYy0xOTYtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9Mjk5PXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9zZW5kX3BrdF9pbmZvKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMzQwLVxcdFxcdCAqICdNU0dfWkVST0NPUFknIGZsYWcgaGFuZGxpbmcgaGVyZSBpcyBiYXNlZCBvbiB0aGUgc2FtZSBmbGFnXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjM0MTpcXHRcXHQgKiBoYW5kbGluZyBmcm9tICd0Y3Bfc2VuZG1zZ19sb2NrZWQoKScuXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTM0Mi1cXHRcXHQgKi9cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9MjEyPXN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMS1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMzI6XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnaGRyLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIzMy1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM9MTE3PXN0YXRpYyBib29sIGJwZl90ZXN0X2RlbGF5KHN0cnVjdCBicGZfc29ja19vcHMgKnNrb3BzLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jLTE4Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jOjE4ODpTRUMoXFxcImZlbnRyeS90Y3Bfc2VuZG1zZ19sb2NrZWRcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg5OmludCBCUEZfUFJPRyh0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTkwLVxcdCAgICAgc2l6ZV90IHNpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjUzOjQ1LjY0MDA0MzA1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDUxMzE0MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFNlbmQgUGF0aCB3aXRoIFplcm9Db3B5IGFuZCBEZXZtZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBUQ1Agc2VuZGluZyBwYXRoLiBJdCdzIGNhbGxlZCBieSBgdGNwX3NlbmRtc2dgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBhIGNoZWNrIGZvciBgTVNHX1pFUk9DT1BZYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gUmlnaHQsIGFuZCB0aGlzIHBhdGggaXMgb25seSByZWFjaGFibGUgaWYgYENPTkZJR19ORVRfREVWTUVNYCBpcyBlbmFibGVkLlxuXG5Ob3csIG15IGluaXRpYWwgaW5jbGluYXRpb24gd2FzIHRvIGZvY3VzIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIG9yIGB0Y3Bfc2VuZG1zZ2AuIEJ1dCB0aGUgcHJvbXB0IGFkdmlzZXMgYWdhaW5zdCBsaXN0aW5nIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICppcyogZGVmaW5pdGVseSBhIGhvdCBwYXRoLiBPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhpcyBjaGFuZ2UgcmVsYXRlcyB0by4gVGhlIHByb21wdCBzdWdnZXN0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHVzYWdlLCB3aGljaCBpcyBhIGdvb2QgY2x1ZS4gVGhpcyBpcyB3aGVyZSBgbmV0X2Rldm1lbWAgY29tZXMgaW50byBwbGF5LiBTaW5jZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGhvdC1wYXRoIGFuZCB0aGUgY2hhbmdlIGlzICphYm91dCogZGV2bWVtLCBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZGV2bWVtIGZ1bmN0aW9uIEkgY2FuIGZvY3VzIG9uPyBMZXQncyBzZWUuLi4gYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIGxvb2tzIHByb21pc2luZywgYnV0IHRoYXQncyBwb3RlbnRpYWxseSBpbmxpbmUsIGRlcGVuZGluZyBvbiBgQ09ORklHX05FVF9ERVZNRU1gLiBMZXQgbWUgY2hlY2sgYG5ldC9jb3JlL2Rldm1lbS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1Mzo1Mi42OTEzNjEzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDY3Njc5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzgzLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1OC1cXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1Mzo1NC4xMzgxMzQ5OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzMjE0MDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMgc3BlY2lmaWMgY29kZSBtb2RpZmljYXRpb24uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBmZWVscyBsaWtlIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgcmVhbGx5IHNwZWNpZmljIHRvIHRoZSBgZGV2bWVtYCBwYXRoIHdlJ3JlIGludGVyZXN0ZWQgaW4sIGFuZCB1bmxpa2UgYSByZWFsbHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIGFjdHVhbGx5IG5vbi16ZXJvLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gdHJ5IGFuZCBndWlkZSB0aGUgZnV6emVyLiBcblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgaXQgbm93LiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgaXMgYWN0dWFsbHkgY2FsbGVkICppbW1lZGlhdGVseSBiZWZvcmUqIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQuIExldCBtZSBwdWxsIHRoYXQgYmxvY2sgdXAgYWdhaW46XG5cbmBgYGNcblx0XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xuXHRcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuXHRcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcblx0XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG5cdFx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcblx0XHRcdFx0XHRcdGdvdG8gb3V0X2Vycjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuXHRcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5gYGBcblxuT2theSwgc28gdGhlIHBsYW4gaXMgZm9ybWluZy4gRm9jdXNpbmcgdGhlIGZ1enplciBvbiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2Agc2hvdWxkIGJlIGEgZGlyZWN0IHdheSB0byBoaXQgdGhpcyBhbHRlcmVkIGNvZGUgcGF0aC4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCB3aWxsIGJlIHdoYXQgaXMgaW52b2x2ZWQgd2l0aCBgc29ja2MuZG1hYnVmX2lkYCBiZWluZyBub24temVyby5cblxuQW5vdGhlciBhdmVudWUgY291bGQgYmUgdG8gZm9jdXMgb24gc29tZXRoaW5nIGxpa2UgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIG9yIHdoYXRldmVyIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHNldHVwIG9mIHRoZSBkbWFidWYgYmluZGluZy4gSSBzaG91bGQgY2hlY2sgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCBmb3IgYW55IG90aGVyIGRldm1lbSBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjAxLjA3MDI3Nzk5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDQ4MDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4OD1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmM6MTg5Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG5uZXQvY29yZS9kZXZtZW0uYy0xOTAtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD05ND1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6OTU6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaDoxMDM6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTA0LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNzg6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTE3OS1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE5OT1zdGF0aWMgaW5saW5lIGludFxcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTIwMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTAxMz1pbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk0LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTA5NTpcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTYtXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0OlxcdFxcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTcxPWludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMjM3OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzOC1cXHRcXHRcXHRcXHRcXHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MDIuNTMwNzYzNTQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODgzNDA1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORVRfREVWTUVNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuIFRoZXkgc2VlbSB0byBiZSB0aGUgY29yZSBvZiB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhlIG9idmlvdXMgY29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGlzIGBORVRfREVWTUVNYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IEknbSBhIGJpdCBjdXJpb3VzOiBJcyB0aGF0IHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHk/IEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2NvcmUvS2NvbmZpZ2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBgTkVUX0RFVk1FTWAgc3ltYm9sLiBTZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIG9yIG90aGVyIGNsdWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIG51Z2dldHMgdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MTAuNzE5MTA2MjM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0OTA2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L0tjb25maWctNjgtXFxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cXG5uZXQvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjEyLjE4NDAxNzUxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzNzY2MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5FVF9ERVZNRU0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBORVRfREVWTUVNYCBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L0tjb25maWdgIGFzIGEgYGRlZl9ib29sIHlgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHNvbWV0aGluZyBsaWtlIGRldmljZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEJ1dCwgSSBkb24ndCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBsaWtlIG1lbW9yeSBtYXBwaW5nLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjkgb2YgYG5ldC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBhIGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaXQgY2Fycmllcy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgdGhhdCBtaWdodCBleHBsYWluIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBkZWZhdWx0IHN0YXRlLCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBtYXliZSBwb2ludGVycyB0byByZWxhdGVkIGNvZGUgb3IgZG9jdW1lbnRhdGlvbi4gQSBxdWljayBjaGVjayBvZiB0aGUgc3Vycm91bmRpbmcgY29uZmlnIG9wdGlvbnMgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIG1haW50YWluZXJzIGNvbnNpZGVyZWQgd2hlbiBzZXR0aW5nIGl0IGFzIGEgZGVmYXVsdC4gSXQncyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgXCJ3aHlcIiBhbmQgbm90IGp1c3QgdGhlIFwid2hhdFwiIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjE2LjQxNzc4NTY0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDoxNi40MTc4NjU5OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNjM0NDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHRzOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBpdCdzIGNsZWFyIGl0IGxlYW5zIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgbWFrZXMgc2Vuc2UuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGJhc2ljLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGVuYWJsaW5nLiBJIGRvbid0IHdhbnQgdG8gd2FzdGUgdGltZSBjaGFzaW5nIHBoYW50b20gaXNzdWVzIGlmIGl0J3MganVzdCBzb21ldGhpbmcgSSBvdmVybG9va2VkIGluIG15IHNldHVwLiBMZXQncyBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGluIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MjAuMDM0MjE3MjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4NjU1ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDoyMi44ODI4Nzc3NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTg3MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBhIEJvb2xlYW4gQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBib29sZWFuLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZHJpdmVyLCBhbmQgaXQncyBhcm91bmQgbGluZSAyMTUgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIGl0LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0byBlbmFibGUvZGlzYWJsZSBpdC4gTGV0J3MgZ2V0IHRvIHRoYXQgS2NvbmZpZyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjI2LjMzNDc1MDI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0Ym9vbFxcbiAyMTE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMjEyOlxcdFxcbiAyMTM6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuIDIxNDpcXHRcXG4gMjE1OlxcdGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbiAyMTY6XFx0XFx0Ym9vbFxcbiAyMTc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxODpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gMjE5OlxcdFxcdGhlbHBcXG4gMjIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZnJhbWV3b3JrIGZvciBidWZmZXItc2hhcmluZyBiZXR3ZWVuXFxuIDIyMTpcXHRcXHQgIG11bHRpcGxlIGRyaXZlcnMuIEEgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgdXNpbmcgZHJpdmVyXFxuIDIyMjpcXHRcXHQgIEFQSXMgZXh0ZW5zaW9uOyB0aGUgZmlsZSdzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXFxuIDIyMzpcXHRcXHQgIGRyaXZlci5cXG4gMjI0OlxcdFxcbiAyMjU6XFx0Y29uZmlnIEdFTkVSSUNfQVJDSF9UT1BPTE9HWVxcbiAyMjY6XFx0XFx0Ym9vbFxcbiAyMjc6XFx0XFx0aGVscFxcbiAyMjg6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgYXJjaGl0ZWN0dXJlcyBjb21tb24gdG9wb2xvZ3kgY29kZTogZS5nLiwgcGFyc2luZ1xcbiAyMjk6XFx0XFx0ICBDUFUgY2FwYWNpdHkgaW5mb3JtYXRpb24gZnJvbSBEVCwgdXNhZ2Ugb2Ygc3VjaCBpbmZvcm1hdGlvbiBmb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6MjYuMzM0ODM5MjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDEwNjMyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRE1BIFNoYXJlZCBCdWZmZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERNQV9TSEFSRURfQlVGRkVSYCBkZWZhdWx0cyB0byAnbicsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlLCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIGVuc3VyZSB3ZSBjYW4gY29udHJvbCB0aGF0IHNldHRpbmcuXG5cbldhaXQgYSBzZWNvbmQuLi5JIGp1c3Qgc3BvdHRlZCB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0IGl0ICpkZXBlbmRzKiBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IGNoYW5nZXMgdGhpbmdzISBJdCBtZWFucyBgTkVUX0RFVk1FTWAgd2lsbCAqb25seSogYmUgZW5hYmxlZCBpZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGFsc28gZW5hYmxlZC4gU28sIHllYWgsIGFic29sdXRlbHkuIEFkZGluZyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsIHRvIGVuc3VyZSBgTkVUX0RFVk1FTWAgY2FuIGV2ZW4gYmUgdXNlZC4gVGhhdCBkZXBlbmRlbmN5IGlzIGEgc2lnbmlmaWNhbnQgZmFjdG9yIGluIGRyaXZpbmcgb3VyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBib3RoIGNhbiBiZSB1c2VkLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBgUEFHRV9QT09MYCBhbmQgc2VlIHdoYXQgaXRzIHJlbGF0aW9uc2hpcHMgYXJlLCBidXQgdGhpcyBnaXZlcyBtZSBhIHNvbGlkIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjMwLjYzNTkwNTExM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjQ1Nzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDozMi4wOTgzNjYzNzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0Njc4OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDQ5MSBtaWdodCBob2xkIHRoZSBrZXkuIEkgZG9uJ3QgcmVjYWxsIHRoZSBleGFjdCBjb250ZXh0IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIGJ1dCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhIHNwZWNpZmljIGJsb2NrIG9mIGxvZ2ljIHBlcnRhaW5pbmcgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgbG9jYXRlZCB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4gYW5kIHRoZWlyIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIGNvbmZpZ3VyYXRpb24uIEl0J3MgdGltZSB0byBzdGFydCBwYXJzaW5nIHRoZSBLY29uZmlnIGZpbGUgYW5kIG1hcCBvdXQgdGhlIHJlbGV2YW50IHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NDozNy41NDUxNTgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4NTpcXHRcXHQgIHdpdGggdGhlIGhlbHAgb2YgQlBGIHByb2dyYW1zLlxcbiA0ODY6XFx0XFxuIDQ4NzpcXHRjb25maWcgTkVUX0RFVkxJTktcXG4gNDg4OlxcdFxcdGJvb2xcXG4gNDg5OlxcdFxcdGRlZmF1bHQgblxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRjb25maWcgUEFHRV9QT09MXFxuIDQ5MjpcXHRcXHRib29sXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG4gNDk1OlxcdFxcdGRlZmF1bHQgblxcbiA0OTY6XFx0XFx0Ym9vbCBcXFwiUGFnZSBwb29sIHN0YXRzXFxcIlxcbiA0OTc6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gNDk4OlxcdFxcdGhlbHBcXG4gNDk5OlxcdFxcdCAgRW5hYmxlIHBhZ2UgcG9vbCBzdGF0aXN0aWNzIHRvIHRyYWNrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgcmVjeWNsaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjM3LjU0NTIyNTg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzI4Njg5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiwgYW5kIGRlZmF1bHRzIHRvICduJy4gSSBrbm93IGRyaXZlcnMgdHlwaWNhbGx5IHNlbGVjdCBpdC4gVG8gcGxheSBpdCBzYWZlLCBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGp1c3QgYWRkaW5nIGl0IHRvIGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgZ2l2ZW4gdGhhdCBpdCdzIHNlbGVjdGVkIGJ5ICptYW55KiBkcml2ZXJzLCBqdXN0IGxpc3RpbmcgaXQgbWlnaHQgYmUgYSBtb3JlIHJvYnVzdCBhcHByb2FjaC5cblxuVGhlbiBJIHJlYWxpemVkIGEgY3J1Y2lhbCBwb2ludDogYFBBR0VfUE9PTGAgbGFja3MgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGEgdXNlciBjYW4ndCBleHBsaWNpdGx5IGVuYWJsZSBpdCB0aHJvdWdoIGBtZW51Y29uZmlnYC4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFNvLCBsZXQncyBleHBsb3JlIGlmIHNvbWV0aGluZyB3ZSBjYW4gY29udHJvbCBlbmFibGVzIGl0LCBvciBpZiBsaXN0aW5nIGl0IHdpbGwgc3VmZmljZSAoc3l6a2FsbGVyIGNhbiBoYW5kbGUgY29uZmlncyB3aXRob3V0IHByb21wdHMgaWYgdGhleSdyZSBpbmRpcmVjdGx5IHNlbGVjdGVkLCBidXQgbGlzdGluZyB0aGUgc2VsZWN0aW5nIGNvbmZpZywgb3IgbGlzdGluZyBpdCBpdHNlbGYsIHdvdWxkIGJlIHByZWZlcmFibGUpLlxuXG5BaGEhIGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1BQzgwMjExYCBhbmQgbnVtZXJvdXMgRXRoZXJuZXQgZHJpdmVycy4gSW50ZXJlc3RpbmcuIFNvLCBsZXQncyBhZGQgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgdG8gb3VyIGxpc3QuXG5cbldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNoZWNrIGBETUFfU0hBUkVEX0JVRkZFUmAuIEl0IGFsc28gc2VlbXMgdG8gbGFjayBhIGRpcmVjdCBwcm9tcHQuIE9rYXksIGxldCdzIGRvdWJsZSBjaGVjayBgZHJpdmVycy9iYXNlL0tjb25maWdgLiBZdXAsIGBjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYGJvb2xgIHdpdGggYSBgZGVmYXVsdCBuYCBhbmQgbm8gZGlyZWN0IHByb21wdC4gSXQncyAqZGVmaW5pdGVseSogc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlncy4gTm93LCB3aGF0IHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ3NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU0OjQ0LjIxODA5NzQzMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzkwOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0OjY2OidzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVInIGluIHRoZWlyIHJlc3BlY3RpdmUgS2NvbmZpZ3MuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTEyLVxcdHNlbGVjdCBIV01PTlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9ND1jb25maWcgU1lOQ19GSUxFXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cXHRzZWxlY3QgSTJDXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MTQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXFx0c2VsZWN0IFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZzo5OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVxcdHNlbGVjdCBURUdSQV9IT1NUMVhfQ09OVEVYVF9CVVNcXG4tLVxcbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcXG5kcml2ZXJzL2lpby9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkVuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXFxcIlxcbmRyaXZlcnMvaWlvL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9paW8vS2NvbmZpZy0xOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0yPW1lbnVjb25maWcgSU5GSU5JQkFORFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cXHRkZXBlbmRzIG9uICFBTFBIQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctOS1cXHRzZWxlY3QgSVJRX1BPTExcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTQ0PWNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cXHRkZXBlbmRzIG9uIE1NVVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc9NTE9Y29uZmlnIElPTU1VRkRfVEVTVFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXFx0ZGVwZW5kcyBvbiBJT01NVV9QVF9BTURWMT15IHx8IElPTU1VRkQ9SU9NTVVfUFRfQU1EVjFcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo1NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy01OC1cXHRzZWxlY3QgSU9NTVVGRF9EUklWRVJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTM9Y29uZmlnIFZJREVPQlVGMl9DT1JFXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy01LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xMz1jb25maWcgVklERU9CVUYyX0RNQV9DT05USUdcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yMi1cXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc9MT1jb25maWcgVklERU9fVEVHUkFfVkRFXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy04LVxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMDE9Y29uZmlnIFFDT01fRkFTVFJQQ1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMDU6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9taXNjL0tjb25maWctMzA2LVxcdHNlbGVjdCBRQ09NX1NDTVxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3RlZS9LY29uZmlnLTgtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xOTI9Y29uZmlnIFVTQl9GX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE5NC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy94ZW4vS2NvbmZpZz0xNDU9Y29uZmlnIFhFTl9HTlRERVZfRE1BQlVGXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cXHRkZXBlbmRzIG9uIFhFTl9HTlRERVYgXFx1MDAyNlxcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xcbmRyaXZlcnMveGVuL0tjb25maWc6MTQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXFxuLS1cXG5zYW1wbGVzL0tjb25maWctMjMzLVxcdHNlbGVjdCBWRklPX01ERVZcXG5zYW1wbGVzL0tjb25maWc6MjM0OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXFx0aGVscFxcbi0tXFxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcXG4tLVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZzo5OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NDUuNjc2MDExOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3NzA3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlndXJlIHRoZXNlIGtlcm5lbCBvcHRpb25zIHVzaW5nIHN5emthbGxlcidzIGBzeXota2NvbmZgIHRvb2wuIGBETUFCVUZfSEVBUFNgIG9yIGBTWU5DX0ZJTEVgIGFyZSBzdHJhaWdodGZvcndhcmQgY2hvaWNlcywgdGhleSBzZWVtIGVhc3kgdG8gZGVhbCB3aXRoLCBidXQgaG9sZCBvbiwgYE5FVF9ERVZNRU1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCdzIGEgYGRlZl9ib29sIHlgIHNvIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGl0ICpkZXBlbmRzIG9uKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBjb21wbGV4LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIEkganVzdCBsaXN0IGBORVRfREVWTUVNYCwgYHN5ei1rY29uZmAgc2hvdWxkIGF1dG9tYXRpY2FsbHkgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgZGVzaWduZWQgdG8gZW5hYmxlIGRlcGVuZGVuY2llcyB3aGVuIGl0IGNhbi4gUmlnaHQsIHRoYXQncyB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8uIEhvd2V2ZXIsIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGRvbid0IGhhdmUgcHJvbXB0cy4gVGhhdCBtZWFucyBgc3l6LWtjb25mYCBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgdGhlbSBkaXJlY3RseSB1bmxlc3MgdGhleSdyZSBzZWxlY3RlZCBieSBzb21ldGhpbmcgZWxzZS4gV2UncmUgZ2V0dGluZyBpbnRvIGEgcG90ZW50aWFsIGVkZ2UgY2FzZSB0aGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcGxheSBpdCBzYWZlIGZvciBub3cuIEp1c3QgdG8gYmUgY2VydGFpbiwgSSB3aWxsIGp1c3QgbGlzdCBgTkVUX0RFVk1FTWAsIGBETUFCVUZfSEVBUFNgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2VlbXMgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBicmV2aXR5IGFuZCBjb3ZlcmluZyB0aGUgYmFzZXMuXG5cbldhaXQgYSBzZWNvbmQsIHdoYXQgKmRvZXMqIHNlbGVjdCBgUEFHRV9QT09MYD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyB0aGF0IHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgc2VsZWN0aW9uIGNoYWluIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGxlYXZpbmcgYW55dGhpbmcgaW1wb3J0YW50IG91dC4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBJIGNhbid0IGlnbm9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MDQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NTEuNjMzNzIyNDE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2MjE1Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBQQUdFX1BPT0xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MzU9Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ3LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ3LVxcdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNTg3LVxcdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjEwLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cXHRzZWxlY3QgTkVUX1NIQVBFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTIxLVxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiA2NEJJVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgwLVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVxcdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTMtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MS1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc1LVxcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUEhZTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMS1cXHRzZWxlY3QgRklYRURfUEhZXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVxcdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTUzLVxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcXFwiIGlmIENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnOjY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY1OlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkwLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMC1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIzLVxcdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Nj1jb25maWcgTUxYNF9FTlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTExLVxcdHNlbGVjdCBNTFg0X0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTI5PWNvbmZpZyBNTFg1X0NPUkVfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMxLVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNTFg1X0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzM6XFx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgTUxYU1dfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXFx0c2VsZWN0IFBDU19YUENTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXFx0c2VsZWN0IFZDQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc6MzE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoyNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMjYtXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnOjI2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI3LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9MTEwPWNvbmZpZyBSVEFTRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTE1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0yOT1jb25maWcgUkFWQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZz0yNT1jb25maWcgU05JX05FVFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnOjI5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0zMC1cXHRzZWxlY3QgTUlJXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cXHRzZWxlY3QgUENTX1hQQ1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTAtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnPTI2PWNvbmZpZyBURUhVVElfVE40MFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMzAtXFx0c2VsZWN0IEZXX0xPQURFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz01MD1jb25maWcgVElfQ1BTV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cXHRzZWxlY3QgTUZEX1NZU0NPTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NTY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTctXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXFx0ZGVwZW5kcyBvbiBUSV9DUFRTIHx8ICFUSV9DUFRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3MDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03MS1cXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjEwMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDMtXFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTIwND1jb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoyMDk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjEwLVxcdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjMtXFx0c2VsZWN0IERJTUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTI9Y29uZmlnIE1UNzZfQ09SRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTQ6NTMuMDg5OTQyMDg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjM0NjI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBwcm92aWRlZCBjbHVlcyBhbmQgbXkgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgbGlrZSBgUEFHRV9QT09MYCBpcyBhIGdpdmVuLiBJIGtub3cgYEJQRl9TWVNDQUxMYCB1c3VhbGx5IHRyaWdnZXJzIGl0IGlmIGBORVRgIGlzIGVuYWJsZWQsIGFuZCBgVkVUSGAgYWxzbyBpbmNsdWRlcyBpdC4gU2luY2UgYEJQRl9TWVNDQUxMYCBpcyBhIGNvbW1vbiBkZWZhdWx0IGluIHN5emthbGxlciwgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGNlcnRhaW5seSBlbmFibGVkLlxuXG5Ob3csIHdoYXQgZWxzZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBETUFfU0hBUkVEX0JVRkZFUmAuIEkga25vdyBpdCdzIHNlbGVjdGVkIGJ5IGBETUFCVUZfSEVBUFNgLCBgU1lOQ19GSUxFYCwgYERSTWAsIGBVU0JfRl9GU2AsIGBWRklPX01ERVZgLCBldGMuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCdzIGluY2x1ZGUgaXQuIEFsc28sIGJlY2F1c2Ugb2YgdGhlIHByb21wdCwgSSBtdXN0IGxpc3QgdGhlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBvdXRwdXQgYXJyYXkgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gU28gZmFyLCB0aGUgbGlzdCBpcyBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSBpZiBgTkVUX0RFVk1FTWAgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGhlcmUsIGFuZCBub3QgYWRkIGFueXRoaW5nIHJlZHVuZGFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIFRDUC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbnRyb2R1Y2VzIGEgYHNvY2tjLmRtYWJ1Zl9pZGAgY2hlY2sgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHNldC4gV2hlcmUgaXMgYHNvY2tjLmRtYWJ1Zl9pZGAgc2V0PyBJIHNob3VsZCB0cmFjayB0aGlzIHZhbHVlIGRvd24gYW5kIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHNvY2tjLmRtYWJ1Zl9pZGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjAwLjAxMzQwNjc1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTgyNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFidWZfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTAzPXRoZSBuZXRsaW5rIEFQSTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xMjAtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTIxOlxcdGRtYWJ1Zl9pZCA9IHJzcC1cXHUwMDNlaWQ7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTIyLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTEyMy1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxMjQ6VGhlIG5ldGxpbmsgQVBJIHJldHVybnMgYSBkbWFidWZfaWQ6IGEgdW5pcXVlIElEIHRoYXQgcmVmZXJzIHRvIHRoaXMgZG1hYnVmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTI1LXRoYXQgaGFzIGJlZW4gYm91bmQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xNTY9U2V0dXAnLCBhbmQgdGhlIGtlcm5lbCBzaWduYWxzIHN1Y2ggdG8gdGhlIHVzZXIgdmlhIHRoZSBTQ01fREVWTUVNXyogY21zZ3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY4LVxcdFxcdFxcdFxcdCAqXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY5OlxcdFxcdFxcdFxcdCAqIGRtYWJ1Zl9jbXNnLVxcdTAwM2VkbWFidWZfaWQgaXMgdGhlIGRtYWJ1ZiB0aGVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNzAtXFx0XFx0XFx0XFx0ICogZnJhZyBsYW5kZWQgb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0xOTg9QXBwbGljYXRpb25zIG1heSByZWNlaXZlIDIgY21zZ3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDAtLSBTQ01fREVWTUVNX0RNQUJVRjogdGhpcyBpbmRpY2F0ZXMgdGhlIGZyYWdtZW50IGxhbmRlZCBpbiB0aGUgZG1hYnVmIGluZGljYXRlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIwMTogIGJ5IGRtYWJ1Zl9pZC5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yNTA9VGhlIHVzZXIgbXVzdCBiaW5kIGEgVFggZG1hYnVmIHRvIGEgZ2l2ZW4gTklDIHVzaW5nIHRoZSBuZXRsaW5rIEFQSTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjMtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjY0OiAgICAgICAgdHhfZG1hYnVmX2lkID0gcnNwLVxcdTAwM2VpZDtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjY2LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjI2NzpUaGUgbmV0bGluayBBUEkgcmV0dXJucyBhIGRtYWJ1Zl9pZDogYSB1bmlxdWUgSUQgdGhhdCByZWZlcnMgdG8gdGhpcyBkbWFidWZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yNjgtdGhhdCBoYXMgYmVlbiBib3VuZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTMwNT1UaGUgZXhhbXBsZSBiZWxvdyBzZW5kcyAxMDI0IGJ5dGVzIGZyb20gb2Zmc2V0IDEwMCBpbnRvIHRoZSBkbWFidWYsIGFuZCAyMDQ4XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MzA2OmZyb20gb2Zmc2V0IDIwMDAgaW50byB0aGUgZG1hYnVmLiBUaGUgZG1hYnVmIHRvIHNlbmQgZnJvbSBpcyB0eF9kbWFidWZfaWQ6OlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMwNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTMyOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDozMjk6ICAgICAgICooKF9fdTMyICopQ01TR19EQVRBKGNtc2cpKSA9IHR4X2RtYWJ1Zl9pZDtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MTMzPXN0YXRpYyB2b2lkIGRtYWJ1Zl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtMTQ3LVxcdFxcdFxcdFxcdGlkcl9yZW1vdmUoXFx1MDAyNnZncHUtXFx1MDAzZW9iamVjdF9pZHIsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjE0ODpcXHRcXHRcXHRcXHRcXHQgICBkbWFidWZfb2JqLVxcdTAwM2VkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy0xNDktXFx0XFx0XFx0XFx0a2ZyZWUoZG1hYnVmX29iai1cXHUwMDNlaW5mbyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9MzcyPXBpY2tfZG1hYnVmX2J5X251bShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTMyIGlkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTM3OS1cXHRcXHRkbWFidWZfb2JqID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbnRlbF92Z3B1X2RtYWJ1Zl9vYmosIGxpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzozODA6XFx0XFx0aWYgKGRtYWJ1Zl9vYmotXFx1MDAzZWRtYWJ1Zl9pZCA9PSBpZCkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy0zODEtXFx0XFx0XFx0cmV0ID0gZG1hYnVmX29iajtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYz00MDQ9aW50IGludGVsX3ZncHVfcXVlcnlfcGxhbmUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDI4LVxcdFxcdHVwZGF0ZV9mYl9pbmZvKGdmeF9wbGFuZV9pbmZvLCBcXHUwMDI2ZmJfaW5mbyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjQyOTpcXHRcXHRnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkID0gZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00MzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDQxLVxcdFxcdFxcdCAgICB2Z3B1LVxcdTAwM2VpZCwga3JlZl9yZWFkKFxcdTAwMjZkbWFidWZfb2JqLVxcdTAwM2VrcmVmKSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NDQyOlxcdFxcdFxcdCAgICBnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNDQzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmdwdS1cXHUwMDNlZG1hYnVmX2xvY2spO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTQ3MS1cXHRcXHRnb3RvIG91dF9mcmVlX2luZm87XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjQ3MjpcXHRnZnhfcGxhbmVfaW5mby1cXHUwMDNlZG1hYnVmX2lkID0gcmV0O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYzo0NzM6XFx0ZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkID0gcmV0O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy00NzQtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTAwLS8qIFRvIGFzc29jaWF0ZSBhbiBleHBvc2VkIGRtYWJ1ZiB3aXRoIHRoZSBkbWFidWZfb2JqICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjUwMTppbnQgaW50ZWxfdmdwdV9nZXRfZG1hYnVmKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01MDIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxMS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTEyOlxcdGRtYWJ1Zl9vYmogPSBwaWNrX2RtYWJ1Zl9ieV9udW0odmdwdSwgZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmMtNTEzLVxcdGlmIChkbWFidWZfb2JqID09IE5VTEwpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTE0OlxcdFxcdGd2dF92Z3B1X2VycihcXFwiaW52YWxpZCBkbWFidWYgaWQ6JWRcXFxcblxcXCIsIGRtYWJ1Zl9pZCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTUxNS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jLTU1Mi1cXHRcXHQgICAgXFxcIiAgICAgICAgZmlsZSBjb3VudDogJWxkLCBHRU0gcmVmOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM6NTUzOlxcdFxcdCAgICB2Z3B1LVxcdTAwM2VpZCwgZG1hYnVmX29iai1cXHUwMDNlZG1hYnVmX2lkLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01NTQtXFx0XFx0ICAgIGtyZWZfcmVhZChcXHUwMDI2ZG1hYnVmX29iai1cXHUwMDNla3JlZiksXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmM9NTcyPXZvaWQgaW50ZWxfdmdwdV9kbWFidWZfY2xlYW51cChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODEtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5jOjU4MjpcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZ2Z3B1LVxcdTAwM2VvYmplY3RfaWRyLCBkbWFidWZfb2JqLVxcdTAwM2VkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuYy01ODMtXFx0XFx0bGlzdF9kZWwocG9zKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaD01OT1zdHJ1Y3QgaW50ZWxfdmdwdV9kbWFidWZfb2JqIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaC02MS1cXHRzdHJ1Y3QgaW50ZWxfdmdwdV9mYl9pbmZvICppbmZvO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaDo2MjpcXHRfX3UzMiBkbWFidWZfaWQ7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RtYWJ1Zi5oLTYzLVxcdHN0cnVjdCBrcmVmIGtyZWY7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmg9Njg9aW50IGludGVsX3ZncHVfcXVlcnlfcGxhbmUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHZvaWQgKmFyZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kbWFidWYuaDo2OTppbnQgaW50ZWxfdmdwdV9nZXRfZG1hYnVmKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZG1hYnVmLmgtNzAtdm9pZCBpbnRlbF92Z3B1X2RtYWJ1Zl9jbGVhbnVwKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jPTEyNTk9c3RhdGljIGxvbmcgaW50ZWxfdmdwdV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZmaW9fZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM2NC1cXHRcXHRtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9nZnhfcGxhbmVfaW5mbyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYzoxMzY1OlxcdFxcdFxcdFxcdCAgICBkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNjYtXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkbWFidWYsICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTM3Ny1cXHR9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0RFVklDRV9HRVRfR0ZYX0RNQUJVRikge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzNzg6XFx0XFx0X191MzIgZG1hYnVmX2lkO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzNzktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM6MTM4MDpcXHRcXHRpZiAoZ2V0X3VzZXIoZG1hYnVmX2lkLCAoX191MzIgX191c2VyICopYXJnKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xMzgxLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjEzODI6XFx0XFx0cmV0dXJuIGludGVsX3ZncHVfZ2V0X2RtYWJ1Zih2Z3B1LCBkbWFidWZfaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTEzODMtXFx0fVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTE5MjQ9c3RydWN0IHNvY2tjbV9jb29raWUge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTE5MjktXFx0dTMyIHByaW9yaXR5O1xcbmluY2x1ZGUvbmV0L3NvY2suaDoxOTMwOlxcdHUzMiBkbWFidWZfaWQ7XFxuaW5jbHVkZS9uZXQvc29jay5oLTE5MzEtfTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaD0yMz1zdHJ1Y3QgZG1hYnVmX2Ntc2cge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3Vpby5oLTI5LVxcdFxcdFxcdFxcdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC91aW8uaDozMDpcXHRfX3UzMiAgZG1hYnVmX2lkO1xcdC8qIGRtYWJ1ZiBpZCB0aGlzIGZyYWcgYmVsb25ncyB0by4gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdWlvLmgtMzEtXFx0X191MzIgZmxhZ3M7XFx0XFx0LyogQ3VycmVudGx5IHVudXNlZC4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD04MTE9c3RydWN0IHZmaW9fZGV2aWNlX2dmeF9wbGFuZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMxLVxcdFxcdF9fdTMyIHJlZ2lvbl9pbmRleDtcXHQvKiByZWdpb24gaW5kZXggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjgzMjpcXHRcXHRfX3UzMiBkbWFidWZfaWQ7XFx0LyogZG1hLWJ1ZiBpZCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODMzLVxcdH07XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg0Mi0gKiBSZXR1cm4gYSBuZXcgZG1hLWJ1ZiBmaWxlIGRlc2NyaXB0b3IgZm9yIGFuIGV4cG9zZWQgZ3Vlc3QgZnJhbWVidWZmZXJcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg0MzogKiBkZXNjcmliZWQgYnkgdGhlIHByb3ZpZGVkIGRtYWJ1Zl9pZC4gVGhlIGRtYWJ1Zl9pZCBpcyByZXR1cm5lZCBmcm9tIFZGSU9fXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NDQtICogREVWSUNFX1FVRVJZX0dGWF9QTEFORSBhcyBhIHRva2VuIG9mIHRoZSBleHBvc2VkIGd1ZXN0IGZyYW1lYnVmZmVyLlxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9Mzg0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYzozODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmMtMzg2LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTM5MS1cXG5uZXQvY29yZS9kZXZtZW0uYzozOTI6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1ZihkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5jLTM5My1cXHRpZiAoIWJpbmRpbmcgfHwgIWJpbmRpbmctXFx1MDAzZXR4X3ZlYykge1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTY6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MzAyNj1pbnQgX19zb2NrX2Ntc2dfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTMxMTUtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29jay5jOjMxMTY6XFx0XFx0c29ja2MtXFx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbm5ldC9jb3JlL3NvY2suYy0zMTE3LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNDctXFx0XFx0XFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcXG5uZXQvaXB2NC90Y3AuYzoxMTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAhc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE0OS1cXHRcXHRcXHRpZiAoIXVhcmcpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTctXFxubmV0L2lwdjQvdGNwLmM6MTE1ODpcXHRcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTU5OlxcdFxcdFxcdFxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xcbm5ldC9pcHY0L3RjcC5jLTExNjAtXFx0XFx0XFx0XFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE3NS1cXG5uZXQvaXB2NC90Y3AuYzoxMTc2OlxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L3RjcC5jLTExNzctXFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI1MDM9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjYwMi1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjYwMzpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDQtXFxuLS1cXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYz0xMTAxPXN0YXRpYyBpbnQgbWJvY2hzX3F1ZXJ5X2dmeF9wbGFuZShzdHJ1Y3QgbWRldl9zdGF0ZSAqbWRldl9zdGF0ZSxcXG4tLVxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExMzQtXFx0XFx0cGxhbmUtXFx1MDAzZXNpemVcXHQgICAgICA9IDA7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTEzNTpcXHRcXHRwbGFuZS1cXHUwMDNlZG1hYnVmX2lkICAgICAgPSAwO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExMzYtXFx0XFx0Z290byBkb25lO1xcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTE1MS1cXHRwbGFuZS1cXHUwMDNlc2l6ZVxcdCAgICAgID0gZG1hYnVmLVxcdTAwM2Vtb2RlLnNpemU7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1MjpcXHRwbGFuZS1cXHUwMDNlZG1hYnVmX2lkICAgICAgPSBkbWFidWYtXFx1MDAzZWlkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNTMtXFxuLS1cXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMTU1LVxcdGlmIChwbGFuZS1cXHUwMDNlZHJtX3BsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSBcXHUwMDI2XFx1MDAyNlxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTY6XFx0ICAgIG1kZXZfc3RhdGUtXFx1MDAzZWFjdGl2ZV9pZCAhPSBwbGFuZS1cXHUwMDNlZG1hYnVmX2lkKSB7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTE1Ny1cXHRcXHRkZXZfZGJnKG1kZXZfc3RhdGUtXFx1MDAzZXZkZXYuZGV2LCBcXFwiJXM6IHByaW1hcnk6ICVkID1cXHUwMDNlICVkXFxcXG5cXFwiLFxcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jOjExNTg6XFx0XFx0XFx0X19mdW5jX18sIG1kZXZfc3RhdGUtXFx1MDAzZWFjdGl2ZV9pZCwgcGxhbmUtXFx1MDAzZWRtYWJ1Zl9pZCk7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTE1OTpcXHRcXHRtZGV2X3N0YXRlLVxcdTAwM2VhY3RpdmVfaWQgPSBwbGFuZS1cXHUwMDNlZG1hYnVmX2lkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTExNjAtXFx0fVxcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM9MTE4OD1zdGF0aWMgbG9uZyBtYm9jaHNfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI2Ni1cXHR7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI2NzpcXHRcXHR1MzIgZG1hYnVmX2lkO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNjgtXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI2OTpcXHRcXHRpZiAoZ2V0X3VzZXIoZG1hYnVmX2lkLCAoX191MzIgX191c2VyICopYXJnKSlcXG5zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYy0xMjcwLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbnNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jLTEyNzEtXFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmM6MTI3MjpcXHRcXHRyZXR1cm4gbWJvY2hzX2dldF9nZnhfZG1hYnVmKG1kZXZfc3RhdGUsIGRtYWJ1Zl9pZCk7XFxuc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hzLmMtMTI3My1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEwMT1zdGF0aWMgdW5zaWduZWQgaW50IGlmaW5kZXg7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDI6c3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDM6c3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNC1zdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz02OTg9c3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy03MzEtXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJnb3QgZG1hYnVmIGlkPSVkXFxcXG5cXFwiLCByc3AtXFx1MDAzZWlkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjczMjpcXHRkbWFidWZfaWQgPSByc3AtXFx1MDAzZWlkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzMzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz03NDY9c3RhdGljIGludCBiaW5kX3R4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy03NzQtXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJnb3QgdHggZG1hYnVmIGlkPSVkXFxcXG5cXFwiLCByc3AtXFx1MDAzZWlkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjc3NTpcXHR0eF9kbWFidWZfaWQgPSByc3AtXFx1MDAzZWlkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtNzc2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYz04NDc9c3RhdGljIGludCBkb19zZXJ2ZXIoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAxMS1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEwMTI6XFx0XFx0XFx0XFx0XFxcInJlY2VpdmVkIGZyYWdfcGFnZT0lbGx1LCBpbl9wYWdlX29mZnNldD0lbGx1LCBmcmFnX29mZnNldD0lbGx1LCBmcmFnX3NpemU9JXUsIHRva2VuPSV1LCB0b3RhbF9yZWNlaXZlZD0lbHUsIGRtYWJ1Zl9pZD0ldVxcXFxuXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTMtXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTYtXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfc2l6ZSwgZG1hYnVmX2Ntc2ctXFx1MDAzZWZyYWdfdG9rZW4sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE3OlxcdFxcdFxcdFxcdHRvdGFsX3JlY2VpdmVkLCBkbWFidWZfY21zZy1cXHUwMDNlZG1hYnVmX2lkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwMTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDE5OlxcdFxcdFxcdGlmIChkbWFidWZfY21zZy1cXHUwMDNlZG1hYnVmX2lkICE9IGRtYWJ1Zl9pZCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTAyMDpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcInJlY2VpdmVkIG9uIHdyb25nIGRtYWJ1Zl9pZDogZmxvdyBzdGVlcmluZyBlcnJvclxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTAyMS1cXHRcXHRcXHRcXHRnb3RvIGVycl9jbG9zZV9jbGllbnQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM5MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzOTE6XFx0XFx0ZGRtYWJ1ZiA9IHR4X2RtYWJ1Zl9pZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEzOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjAxLjQ0OTIzNzQ1MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU3NjQxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBETUEtQlVGIElEcyB3aXRoIFNDTV9ERVZNRU1fRE1BQlVGKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYHNvY2tjLmRtYWJ1Zl9pZGAgZ2V0cyBzZXQgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgaXQncyBoYXBwZW5pbmcgZHVyaW5nIGEgYHNlbmRtc2dgIG9wZXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19zb2NrX2Ntc2dfc2VuZGAsIGxpa2VseSB3aGVuIGEgY29udHJvbCBtZXNzYWdlIG9mIHR5cGUgYFNDTV9ERVZNRU1fRE1BQlVGYCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykgaXMgZW5jb3VudGVyZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIGBDTVNHX0RBVEEoY21zZylgIG1hY3JvIGlzIGludm9sdmVkLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZSB0byBjb25maXJtIHRoaXMuIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTE2LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nIGFyb3VuZCB0aGUgY21zZyBoYW5kbGluZyBsb2dpYy4uLiBJJ20gcHJldHR5IHN1cmUgdGhlIGFuc3dlcidzIGluIHRoZXJlLiBJIGJldCBpdCBpcyBzZXQgd2hlbiB0aGUgY21zZyBpcyBoYW5kbGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjA3LjIwNjg4MTE1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMDA6XFx0XFx0XFx0c29ja2MtXFx1MDAzZXRzZmxhZ3MgfD0gU09DS0NNX0ZMQUdfVFNfT1BUX0lEO1xcbjMxMDE6XFx0XFx0XFx0YnJlYWs7XFxuMzEwMjpcXHRcXHQvKiBTQ01fUklHSFRTIGFuZCBTQ01fQ1JFREVOVElBTFMgYXJlIHNlbWFudGljYWxseSBpbiBTT0xfVU5JWC4gKi9cXG4zMTAzOlxcdFxcdGNhc2UgU0NNX1JJR0hUUzpcXG4zMTA0OlxcdFxcdGNhc2UgU0NNX0NSRURFTlRJQUxTOlxcbjMxMDU6XFx0XFx0XFx0YnJlYWs7XFxuMzEwNjpcXHRcXHRjYXNlIFNPX1BSSU9SSVRZOlxcbjMxMDc6XFx0XFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4zMTA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMDk6XFx0XFx0XFx0aWYgKCFza19zZXRfcHJpb19hbGxvd2VkKHNrLCAqKHUzMiAqKUNNU0dfREFUQShjbXNnKSkpXFxuMzExMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjMxMTE6XFx0XFx0XFx0c29ja2MtXFx1MDAzZXByaW9yaXR5ID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxuMzExMjpcXHRcXHRcXHRicmVhaztcXG4zMTEzOlxcdFxcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XFxuMzExNDpcXHRcXHRcXHRpZiAoY21zZy1cXHUwMDNlY21zZ19sZW4gIT0gQ01TR19MRU4oc2l6ZW9mKHUzMikpKVxcbjMxMTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzExNjpcXHRcXHRcXHRzb2NrYy1cXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxuMzExNzpcXHRcXHRcXHRicmVhaztcXG4zMTE4OlxcdFxcdGRlZmF1bHQ6XFxuMzExOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTIwOlxcdFxcdH1cXG4zMTIxOlxcdFxcdHJldHVybiAwO1xcbjMxMjI6XFx0fVxcbjMxMjM6XFx0RVhQT1JUX1NZTUJPTChfX3NvY2tfY21zZ19zZW5kKTtcXG4zMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTowNy4yMDcxMjY3MjlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcxMjA5OTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IGBTQ01fREVWTUVNX0RNQUJVRmAgKmlzKiBpbmRlZWQgdXNlZCBpbiBgc2VuZG1zZ2AgdG8gcGFzcyB0aGUgYGRtYWJ1Zl9pZGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIHRoYXQgYC1FT1BOT1RTVVBQYCByZXR1cm4gd2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCBhbmQgYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc2V0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6eiB0YXJnZXQuXCJcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLiBJIHJlbWVtYmVyIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyB0aGUgb25lIGNhbGxlZCB3aGVuIHdlIGJpbmQgdGhlIGRtYWJ1ZiB0byB0aGUgbmV0ZGV2LCB3aGlsZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgZ2V0cyBjYWxsZWQgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFNpbmNlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyBhIHJlYWwgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCB3aGVuIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgZW5hYmxlZCwgdGhhdCBsb29rcyBwcm9taXNpbmcgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBBaCwgaXQncyBub3Qgc3RhdGljOlxuXG5gYGBjXG5zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuYGBgXG5cblBlcmZlY3QsIHRoYXQgbWFrZXMgaXQgYSBncmVhdCBjaG9pY2UuIEkgYWxzbyBjb25zaWRlcmVkIGBfX3NvY2tfY21zZ19zZW5kYCwgYnV0IHRoYXQncyBqdXN0IHRvbyBnZW5lcmljLiBJJ20gdGhpbmtpbmcgYWJvdXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJ1dCBpdCdzIGEgaG90IHBhdGgsIHNvIEknZCBwcmVmZXIgdG8gYXZvaWQgZm9jdXNpbmcgb24gc29tZXRoaW5nIHNvIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHVubGVzcyBpdCBiZWNvbWVzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgYWxzbyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBiaW5kaW5nLCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQncyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjE1LjkxOTIyOTYwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTgyOlxcdFxcbiAxODM6XFx0ZXJyX2Nsb3NlX3J4cTpcXG4gMTg0OlxcdFxcdG5ldGlmX21wX2Nsb3NlX3J4cShkZXYsIHJ4cV9pZHgsIFxcdTAwMjZtcF9wYXJhbXMpO1xcbiAxODU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxODk6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAxOTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuIDE5MTpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAxOTI6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbiAxOTM6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gMTk0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE5NTpcXHR7XFxuIDE5NjpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4gMTk3OlxcdFxcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgbmlvdl9zaGlmdDtcXG4gMTk4OlxcdFxcdHN0YXRpYyB1MzIgaWRfYWxsb2NfbmV4dDtcXG4gMTk5OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjE1LjkxOTMwODM2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg4MjIyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipGb2N1c2luZyBJbjogRE1BIEJ1ZmZlciBCaW5kaW5nKipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkLCBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IHdpdGguIEl0J3MgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBzcGFjZS4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IG9uZSBvdXQuXG5cbkFuZCwgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIHRoZW4gbWFuYWdlZCBpbiB0aGUgcXVldWUsIHNvIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYmluZGluZyBhbmQgcXVldWluZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NToyMC4yMDc1MzMyODJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdFxcdG5ldGlmX21wX2Nsb3NlX3J4cShiaW5kaW5nLVxcdTAwM2VkZXYsIHJ4cV9pZHgsIFxcdTAwMjZtcF9wYXJhbXMpO1xcbiAxNTE6XFx0XFx0fVxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXJlZik7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcXG4gMTYxOlxcdFxcdFxcdC5tcF9wcml2XFx0PSBiaW5kaW5nLFxcbiAxNjI6XFx0XFx0XFx0Lm1wX29wc1xcdFxcdD0gXFx1MDAyNmRtYWJ1Zl9kZXZtZW1fb3BzLFxcbiAxNjM6XFx0XFx0fTtcXG4gMTY0OlxcdFxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cTtcXG4gMTY1OlxcdFxcdHUzMiB4YV9pZHg7XFxuIDE2NjpcXHRcXHRpbnQgZXJyO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHRpZiAoYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxcbiAxNjk6XFx0XFx0XFx0bXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVIFxcdTAwM2NcXHUwMDNjIGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjIwLjIwNzYwNjgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTgyMTA4ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEZXZtZW0gVENQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGRldm1lbSBUQ1AgcGF0Y2ggYW5kIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBrZXkgYXNwZWN0cy4gSXQgbG9va3MgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgZGVmaW5pdGVseSBhIHJlbGV2YW50IGZ1bmN0aW9uLCBidXQgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2BcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcblxuT24gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSwgdGhlIHBhdGNoIHJlbGllcyBvbiBhIGZldyBjcml0aWNhbCBjb25maWdzOlxuXG4qICAgYE5FVF9ERVZNRU1gXG4qICAgYERNQV9TSEFSRURfQlVGRkVSYFxuKiAgIGBQQUdFX1BPT0xgXG5cbkkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBORVRfREVWTUVNYCAqZGVwZW5kcyBvbiogYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhbmQgKnNlbGVjdHMqIGBHRU5FUklDX0FMTE9DQVRPUmAuIFRoYXQgY29uZmlybXMgdGhhdCBzaW1wbHkgZW5hYmxpbmcgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAgcHJvdmlkZXMgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuTm93LCB0aGUgYWN0dWFsIGNoYW5nZSBpcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIGFkZGluZyB0aGlzIG5ldyBjaGVjazpcblxuYGBgY1xuICAgIGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbiAgICBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xuICAgIFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuICAgIFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuICAgIFx0XHRiaW5kaW5nID0gTlVMTDtcbiAgICBcdFx0Z290byBvdXRfZXJyO1xuICAgIFx0fVxuICAgIFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSkge1xuICAgIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiAgICBcdFx0Z290byBvdXRfZXJyO1xuICAgIFx0fVxuICAgIH1cbmBgYFxuXG5FZmZlY3RpdmVseSwgaXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGlmIGBNU0dfWkVST0NPUFlgIGlzbid0IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoZSByZWFzb25pbmcgbWFrZXMgcGVyZmVjdCBzZW5zZTogaXQncyB3aXRoaW4gdGhlIGNvcmUgVENQIGBzZW5kbXNnYCBwYXRoIGFuZCByZWxhdGVkIHRvIHRoZSBkZXZtZW0gZmVhdHVyZSwgYWNjZXNzaWJsZSB2aWEgdXNlcnNwYWNlIGBzZW5kbXNnYCBhbmQgYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNnLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJIG1hZGUgc3VyZSBgTkVUX0RFVk1FTWAgZG9lc24ndCByZWx5IG9uIGBYRFBfU09DS0VUU2Agb3IgYW55dGhpbmcgdW5leHBlY3RlZC4gQWxzbywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBTQ01fREVWTUVNX0RNQUJVRmAgY2FuIGJlIHVzZWQgd2l0aG91dCBgTkVUX0RFVk1FTWAuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9zb2NrLmNgIHRvIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMjQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NToyOS4xODk3MTgyMjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDQwNjkyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NNX0RFVk1FTV9ETUFCVUZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTU2PVNldHVwJywgYW5kIHRoZSBrZXJuZWwgc2lnbmFscyBzdWNoIHRvIHRoZSB1c2VyIHZpYSB0aGUgU0NNX0RFVk1FTV8qIGNtc2dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE1OS1cXHRcXHRcXHRpZiAoY20tXFx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1NPQ0tFVCB8fFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE2MDpcXHRcXHRcXHRcXHQoY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0RNQUJVRiBcXHUwMDI2XFx1MDAyNlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE2MS1cXHRcXHRcXHRcXHQgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBTQ01fREVWTUVNX0xJTkVBUikpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTY2OlxcdFxcdFxcdGlmIChjbS1cXHUwMDNlY21zZ190eXBlID09IFNDTV9ERVZNRU1fRE1BQlVGKSB7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTY3LVxcdFxcdFxcdFxcdC8qIEZyYWcgbGFuZGVkIGluIGRtYWJ1Zi5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xOTktXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjAwOi0gU0NNX0RFVk1FTV9ETUFCVUY6IHRoaXMgaW5kaWNhdGVzIHRoZSBmcmFnbWVudCBsYW5kZWQgaW4gdGhlIGRtYWJ1ZiBpbmRpY2F0ZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDEtICBieSBkbWFidWZfaWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0yMTI9RnJlZWluZyBmcmFnc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxNTpGcmFncyByZWNlaXZlZCB2aWEgU0NNX0RFVk1FTV9ETUFCVUYgYXJlIHBpbm5lZCBieSB0aGUga2VybmVsIHdoaWxlIHRoZSB1c2VyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE2LXByb2Nlc3NlcyB0aGUgZnJhZy4gVGhlIHVzZXIgbXVzdCByZXR1cm4gdGhlIGZyYWcgdG8gdGhlIGtlcm5lbCB2aWFcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTI5Mz1TZW5kaW5nIGRhdGFcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTI5NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyOTY6RGV2bWVtIGRhdGEgaXMgc2VudCB1c2luZyB0aGUgU0NNX0RFVk1FTV9ETUFCVUYgY21zZy5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yOTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdD0zMDY9ZnJvbSBvZmZzZXQgMjAwMCBpbnRvIHRoZSBkbWFidWYuIFRoZSBkbWFidWYgdG8gc2VuZCBmcm9tIGlzIHR4X2RtYWJ1Zl9pZDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0zMjUtICAgICAgIGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjMyNjogICAgICAgY21zZy1cXHUwMDNlY21zZ190eXBlID0gU0NNX0RFVk1FTV9ETUFCVUY7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMzI3LSAgICAgICBjbXNnLVxcdTAwM2VjbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihfX3UzMikpO1xcbi0tXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NS0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQ3OVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDY6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlxcdFNPX0RFVk1FTV9ETUFCVUZcXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQ3LSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0ODBcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1Ni0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQ3OVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE1NzojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE1OC0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFxcdDgwXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MS0jZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcXHQweDQwNEZcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQzLSNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0MHg0MDUwXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM4LSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRiAgICAgICAgIDB4MDA1OFxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDAtI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRUQgICAgICAgMHgwMDU5XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTQwLSNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDItI2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTMwMjY9aW50IF9fc29ja19jbXNnX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0zMTEyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL3NvY2suYzozMTEzOlxcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XFxubmV0L2NvcmUvc29jay5jLTMxMTQtXFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDAtI2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXFx0NzlcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQxOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0Mi0jZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFxcdDgwXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05ODEtXFx0XFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9TT0NLRVQgfHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjk4MjpcXHRcXHRcXHQgICAgKGNtLVxcdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9ETUFCVUYgXFx1MDAyNlxcdTAwMjZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk4My1cXHRcXHRcXHQgICAgIGNtLVxcdTAwM2VjbXNnX3R5cGUgIT0gU0NNX0RFVk1FTV9MSU5FQVIpKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTEyNzU9c3RhdGljIGludCBkb19jbGllbnQoc3RydWN0IG1lbW9yeV9idWZmZXIgKm1lbSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTM4Ny1cXHRcXHRjbXNnLVxcdTAwM2VjbXNnX2xldmVsID0gU09MX1NPQ0tFVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjEzODg6XFx0XFx0Y21zZy1cXHUwMDNlY21zZ190eXBlID0gU0NNX0RFVk1FTV9ETUFCVUY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMzg5LVxcdFxcdGNtc2ctXFx1MDAzZWNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKF9fdTMyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjMxLjg5Mzc5MTgwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5OTQ0MTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGRldm1lbWAgVENQIEZlYXR1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIGhvdyB0aGUgYFNDTV9ERVZNRU1fRE1BQlVGYCBjb250cm9sIG1lc3NhZ2UgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYF9fc29ja19jbXNnX3NlbmRgIHBhcnNlcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgc29ja2MuZG1hYnVmX2lkYCB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29uZGl0aW9uYWwuIFRoZSByZWFsIGNydXggb2YgdGhpcyBsaWVzIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AuXG5cbklmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgKm5vdCogZW5hYmxlZCwgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoaXMgaXMgdGhlIGtleS4gV2l0aG91dCBgQ09ORklHX05FVF9ERVZNRU1gLCB0aGUgd2hvbGUgbW9kaWZpZWQgc2VjdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBiZWNhdXNlIHRoZSBjaGVjayBgaWYgKElTX0VSUihiaW5kaW5nKSlgIHdpbGwgaW1tZWRpYXRlbHkgaGl0IHRoZSBlcnJvciBjYXNlIGJlZm9yZSByZWFjaGluZyB0aGUgY2hlY2sgZm9yIGB6YyAhPSBNU0dfWkVST0NPUFlgLiBUaGlzIHRlbGxzIG1lIHRoYXQgYENPTkZJR19ORVRfREVWTUVNYCBpcyAqYWJzb2x1dGVseSogcmVxdWlyZWQgdG8gZXZlbiByZWFjaCB0aGUgbG9naWMgd2hlcmUgdGhlIGBNU0dfWkVST0NPUFlgIGNoZWNrIGlzIGludHJvZHVjZWQuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQncyBiZWluZyBpbnRyb2R1Y2VkIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNlbmRtc2dgIHdpdGggYFNDTV9ERVZNRU1fRE1BQlVGYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgcGF0aCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYE1TR19aRVJPQ09QWWAgaWYgYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBXb3J0aEZ1enppbmc6IHRydWVgIGdpdmVuIHRoaXMuIFRoZSByZWFzb25pbmcgaXMgc29saWQsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIFRoZSBrZXkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOiBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIGFyZSBmb3IgKmJpbmRpbmcqIHRoZSBETUEgYnVmZmVyIHRvIHRoZSBuZXR3b3JrIGRldmljZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UgZm9yIGRldm1lbSBUQ1AuIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBpcyB0aGVuIGNhbGxlZCBkdXJpbmcgYHNlbmRtc2dgIHRvIHZhbGlkYXRlIHRoZSBkbWFidWYgSUQuIEV4Y2VsbGVudCwgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgc3RhdGljPyBOb3BlLCBpdCdzIG5vdC4gSXQncyBleHBvcnRlZCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGFzIGl0J3MgdGhlIGludGVyZmFjZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBkbWFidWYuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIGBORVRfREVWTUVNYCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIEknbGwgbWFrZSBzdXJlIHRvIGxpc3QgYWxsIHRocmVlIGluIGBFbmFibGVDb25maWdzYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTE0LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4wOTMyMzUzMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjY1NDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgYE1TR19aRVJPQ09QWWAgaXMgbm90IHNldCB3aGVuIGEgZG1hYnVmIGlzIGJvdW5kIHRvIHRoZSBzb2NrZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc2VuZG1zZyBwYXRoIHJlbGF0ZWQgdG8gdGhlIGRldm1lbSBUQ1AgZmVhdHVyZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCB3aXRoIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byByZXR1cm4gYC1FT1BOT1RTVVBQYCBpZiBgTVNHX1pFUk9DT1BZYCBpcyBub3Qgc2V0IHdoZW4gYSBkbWFidWYgaXMgYm91bmQgdG8gdGhlIHNvY2tldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRDUCBzZW5kbXNnIHBhdGggcmVsYXRlZCB0byB0aGUgZGV2bWVtIFRDUCBmZWF0dXJlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIHdpdGggYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4xNjU4OTcxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMDAzNjUwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMTo1NTo0NC4xNjcwMTIxMzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQxOTkyNDU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byByZXR1cm4gLUVPUE5PVFNVUFAgaWYgZG1hYnVmIGlzIHVzZWQgd2l0aG91dCBNU0dfWkVST0NPUFkgc3VwcG9ydCAod2hlbiBgemMgIT0gTVNHX1pFUk9DT1BZYCkuIFRoaXMgaXMgYSBsb2dpYyBhbmQgZmVhdHVyZSBzdXBwb3J0IGNoZWNrIHRoYXQgcHJldmVudHMgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIGRtYWJ1ZnMgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgd291bGQgbGlrZWx5IGJlIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGVkNzYxZDYzZjhjNTZhNTMwMDg1Y2I4ZDk4NDdkMzg0YmM2OWM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDExOjUzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uZjQwMzgzMGFmNjVmNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjIsNiArMTE2MiwxMCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU1OjQ0LjE2NzAxNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4ODgxOTA2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VuZCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gVGhpcyBmdW5jdGlvbiwgYXMgSSByZWNhbGwsIGlzIHRoZSBjb3JlIG9mIHRoZSBUQ1Agc2VuZCBwYXRoIG9uIHRoZSBJUHY0IHN0YWNrLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhpcyBjaGVjazpcblxuYGBgY1xuXHRcdFx0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZKSB7XG5cdFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuXHRcdFx0XHR9XG5gYGBcblxuVGhpcyBpcyBiZWluZyBpbnNlcnRlZCB3aXRoaW4gYSBjb25kaXRpb25hbCBibG9jayB0aGF0IGRlYWxzIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGJpbmRpbmdgLCB3aGljaCBpbXBsaWVzIHNvbWUga2luZCBvZiBzb2NrZXQtbGV2ZWwgYmluZGluZyBjb25maWd1cmF0aW9uIG9yIHBvc3NpYmx5IGFkZHJlc3Mgc2VsZWN0aW9uLiAgSXQgc2VlbXMgdG8gYmUgbmVzdGVkIHdpdGhpbiBhIGxhcmdlciBgaWZgIGJsb2NrLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIHNvY2tldCBpcyBjb25maWd1cmVkLiBNb3JlIGNvbnRleHQgaXMgbmVlZGVkIHRvIHNlZSB3aGF0IGBiaW5kaW5nYCByZWZlcnMgdG8gaGVyZS5cblxuVGhlIGtleSBwYXJ0LCBob3dldmVyLCBpcyB0aGUgYGlmICh6YyAhPSBNU0dfWkVST0NPUFkpYCBjaGVjay4gIElmIGB6Y2AgaXNuJ3QgYE1TR19aRVJPQ09QWWAsIHRoZW4gYW4gYC1FT1BOT1RTVVBQYCBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHdlIGp1bXAgdG8gYG91dF9lcnJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY29kZSBwYXRoIGlzIGJlaW5nIGV4cGxpY2l0bHkgKmxpbWl0ZWQqIHRvIG9ubHkgaGFuZGxpbmcgemVyby1jb3B5IG9wZXJhdGlvbnMuICBTbywgdGhpcyBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgbG9naWMgd2l0aGluIHRoaXMgYmxvY2sgb2YgY29kZSBpcyAqb25seSogYXBwbGljYWJsZSBpbiB0aGUgY29udGV4dCBvZiB6ZXJvLWNvcHksIGFuZCBvdGhlciBzZW5kIHBhdGhzIHdpbGwgaGl0IHRoaXMgXCJub3Qgc3VwcG9ydGVkXCIgZXJyb3IsIGluZGljYXRpbmcgYSBmZWF0dXJlIHRoYXQgaXMgbm90IGltcGxlbWVudGVkICh5ZXQpLCBvciBpbnRlbmRlZCBvbmx5IGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGxhcmdlciBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgYHpjYCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTY6MDIuMDU1MjA4NDY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcxMDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTExNS1cXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTI0NC1cXG5uZXQvaXB2NC90Y3AuYzoxMjQ1OlxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxubmV0L2lwdjQvdGNwLmMtMTI0Ni1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDctfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDQ5LVxcbm5ldC9pcHY0L3RjcC5jPTE0NTA9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NTQtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxNDU1OlxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDU2LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjAyLjEwNjkyNjkzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI3NzMyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29yZSoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG5ldC9pcHY0L3RjcC5jYCDigJMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxMTYyLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yIGEgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZywgcGVyaGFwcyByZWxhdGVkIHRvIGNvbmdlc3Rpb24gY29udHJvbCwgd2luZG93aW5nLCBvciByZXRyYW5zbWlzc2lvbiBzdHJhdGVnaWVzLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIGxpbmUgbnVtYmVyIGJlY2F1c2UgSSdtIGVpdGhlcjpcblxuKiAgIENoYXNpbmcgZG93biBhIGxlYWQgZnJvbSBhIHByZXZpb3VzIGRlYnVnZ2luZyBzZXNzaW9uLCBhIHBlcmZvcm1hbmNlIHJlcG9ydCwgb3IgZXZlbiBhIGNyYXNoIGR1bXAsIGFuZCB0aGlzIGxpbmUgaXMgZmxhZ2dlZCBhcyBpbnRlcmVzdGluZy5cbiogICBEaWdnaW5nIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBhIHNwZWNpZmljIFRDUCBmZWF0dXJlIHRoYXQgSSdtIGN1cnJlbnRseSB3b3JraW5nIHdpdGgsIGJlIHRoYXQgZm9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBvciB1bmRlcnN0YW5kaW5nIGJlaGF2aW91ciBpbiBzb21lIHVudXN1YWwgc2NlbmFyaW8gSSd2ZSBnb3QgaW4gbWluZC5cbiogICBSZXZpZXdpbmcgdGhlIGNvZGUgYXMgcGFydCBvZiBhIGdlbmVyYWwgYXVkaXQgb3IgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHNwZWNpZmljIGNvbnRleHQgYXJvdW5kIGxpbmUgMTE2MiBpcyB0aGUga2V5LiBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGxpa2VseSBgc3RydWN0IHNvY2tgLCBgc3RydWN0IHRjcF9zb2NrYCwgYW5kIG1heWJlIGV2ZW4gYHN0cnVjdCBza19idWZmYCksIGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSdtIGV4cGVjdGluZyB0byBpbW1lZGlhdGVseSBzY2FuIGZvcjpcblxuKiAgIENvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbXkgdGVzdCBjYXNlcy5cbiogICBDcml0aWNhbCByZXNvdXJjZSBhbGxvY2F0aW9ucyBvciByZWxlYXNlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLlxuKiAgIEFueSB1bnVzdWFsIG9yIGluZWZmaWNpZW50IGFsZ29yaXRobXMuXG4qICAgRGF0YSByYWNlcyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGltbWVkaWF0ZSBhaW0gaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgaW1wb3J0YW50LCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgVENQIHN0YWNrLiBJJ20gYXJtZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIFRDUC9JUCwgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaG9wZWZ1bGx5LCBzb21lIHByaW9yIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZSB0byBtYWtlIHNlbnNlIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjA3LjgzNDY2MjQ4N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE0MTpcXHRcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjExNDI6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZy1cXHUwMDNlbXNnX3VidWY7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE0NTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcXG4xMTQ2OlxcdFxcdFxcdFxcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcXG4xMTQ3OlxcdFxcdFxcdFxcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xcbjExNDk6XFx0XFx0XFx0XFx0aWYgKCF1YXJnKSB7XFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTUyOlxcdFxcdFxcdFxcdH1cXG4xMTUzOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE1NDpcXHRcXHRcXHRcXHRcXHR6YyA9IE1TR19aRVJPQ09QWTtcXG4xMTU1OlxcdFxcdFxcdFxcdGVsc2VcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxuMTE1OTpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxuMTE2MjpcXHRcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG4xMTYzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY1OlxcdFxcdFxcdFxcdFxcdGlmICh6YyAhPSBNU0dfWkVST0NPUFkpIHtcXG4xMTY2OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbjExNjc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjExNjg6XFx0XFx0XFx0XFx0XFx0fVxcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFx0XFx0fVxcbjExNzE6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IHNpemUpIHtcXG4xMTcyOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE3MzpcXHRcXHRcXHRcXHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XFxuMTE3NDpcXHRcXHR9XFxuMTE3NTpcXHRcXG4xMTc2OlxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcXHUwMDI2XFx1MDAyNlxcbjExNzc6XFx0XFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4xMTc4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTE3OTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4MDpcXHRcXHR9XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxcbjExODM6XFx0XFx0XFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdCAgICAhdHAtXFx1MDAzZXJlcGFpcikge1xcbjExODU6XFx0XFx0XFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xcbjExODY6XFx0XFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXFx1MDAyNlxcdTAwMjYgY29waWVkX3N5biBcXHUwMDNlIDApXFxuMTE4NzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg4OlxcdFxcdFxcdGVsc2UgaWYgKGVycilcXG4xMTg5OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTE6NTY6MDcuODM0ODcxNTI3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTMxMzY0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBaZXJvLUNvcHkgYW5kIGRtYWJ1ZiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhpcyBjb25kaXRpb25hbCBjaGVjaywgc3BlY2lmaWNhbGx5IGBpZiAoemMgIT0gTVNHX1pFUk9DT1BZKWAsIHdoZXJlIGB6Y2AgaXMgYSBmbGFnIGFuZCBgc29ja2MuZG1hYnVmX2lkYCBpcyBzZXQsIGxvb2tzIGxpa2UgYSBjb250cm9sIGZsb3cgY2hhbmdlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0IGV4cG9zZXMgb3IgZml4ZXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciB3cml0ZS5cblxuSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhpcyBjaGVjayBpcyB0aGVyZSB0byBlbmZvcmNlIHRoZSByZXF1aXJlbWVudCB0aGF0IHplcm8tY29weSAoYE1TR19aRVJPQ09QWWApIGlzIGFjdHVhbGx5IGVuYWJsZWQgYmVmb3JlIHdlIHRyeSB0byB1c2UgYSBkbWFidWYgKGBzb2NrYy5kbWFidWZfaWRgKS4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBkZXNpZ25lZCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgYGRtYWJ1ZmAgdW5sZXNzIHplcm8tY29weSBpcyBzdXBwb3J0ZWQuIFNwZWNpZmljYWxseSwgaWYgemVyby1jb3B5IGlzICpub3QqIHN1cHBvcnRlZCwgdGhlbiB0aGUgYHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0dgIGlzIGZhbHNlLiBUaGlzIG1lYW5zIHRoYXQgd2UgZXhwZWN0IGB6Y2Agd2lsbCBiZSBzZXQgdG8gMC5cblxuSWYgYHpjYCBpcyAwLCB0aGVuIHRoZSBkYXRhIHdvdWxkIGJlIGNvcGllZCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSB6ZXJvLWNvcHkgcGF0aC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCBpcyB0aGF0IGRtYWJ1ZiBkYXRhICpjYW5ub3QqIGJlIGNvcGllZCBpbiB0aGUgc2FtZSB3YXksIG9yIG1heWJlIG1vcmUgYWNjdXJhdGVseSwgaXQncyBzaW1wbHkgbm90IHN1cHBvcnRlZC4gVGhpcyBpbmRpY2F0ZXMgYSBsb2dpYyBidWcgb3IsIG1vcmUgbGlrZWx5LCBhIGNoZWNrIGZvciBhbiB1bnN1cHBvcnRlZCBmZWF0dXJlIGNvbWJpbmF0aW9uLCByYXRoZXIgdGhhbiBhbnkgYXR0ZW1wdCB0byBkZWFsIHdpdGggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZGlyZWN0bHkuXG5cbkltcG9ydGFudGx5LCBgemNgIGlzIGluaXRpYWxpemVkIGxvY2FsbHksIHNvIHRoZXJlJ3Mgbm8gd2F5IGl0J3MgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBLTVNBTi4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgcG9wdWxhdGVkIGZyb20gdGhlIGBjbXNnaGRyYCBwYXJzaW5nLCB3aGljaCBJIGFtIGNvbWZvcnRhYmxlIHdpdGguIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhbiBlcnJvciByZXR1cm4gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBydWxlIG91dCB0aGlzIHNwZWNpZmljIGNoYW5nZSBhcyBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbldoaWxlIEtBU0FOIG9yIGdlbmVyYWwgZnV6emluZyAqbWlnaHQqIHVuY292ZXIgY3Jhc2hlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGlmIGBkbWFidWZgIGlzIGF0dGVtcHRlZCB3aXRob3V0IHplcm8tY29weSBzdXBwb3J0LCB0aGVzZSBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgbG9naWMgZXJyb3JzIHJlbGF0ZWQgdG8gdW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBLTVNBTiBhdHRlbnRpb24uIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA4LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDExOjU2OjE4LjM2NjIzOTA5NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHJldHVybiAtRU9QTk9UU1VQUCBpZiBkbWFidWYgaXMgdXNlZCB3aXRob3V0IE1TR19aRVJPQ09QWSBzdXBwb3J0ICh3aGVuIGB6YyAhPSBNU0dfWkVST0NPUFlgKS4gVGhpcyBpcyBhIGxvZ2ljIGFuZCBmZWF0dXJlIHN1cHBvcnQgY2hlY2sgdGhhdCBwcmV2ZW50cyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zIHdoZW4gdXNpbmcgZG1hYnVmcyBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayB3b3VsZCBsaWtlbHkgYmUgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcmV0dXJuIC1FT1BOT1RTVVBQIGlmIGRtYWJ1ZiBpcyB1c2VkIHdpdGhvdXQgTVNHX1pFUk9DT1BZIHN1cHBvcnQgKHdoZW4gYHpjICE9IE1TR19aRVJPQ09QWWApLiBUaGlzIGlzIGEgbG9naWMgYW5kIGZlYXR1cmUgc3VwcG9ydCBjaGVjayB0aGF0IHByZXZlbnRzIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgd2hlbiB1c2luZyBkbWFidWZzIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIHdvdWxkIGxpa2VseSBiZSBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowk8chc[1] Phase: Succeeded StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 11:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2] Phase: Succeeded StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 11:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 11:56:29 +0000 UTC FinishedAt: 2026-08-22 11:56:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowk8chc/series-workflowk8chc-convert-artifact-747392578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 11:56:40 +0000 UTC FinishedAt: 2026-08-22 12:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 11:56:40 +0000 UTC FinishedAt: 2026-08-22 12:13:23 +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:*f2fcc903-db4d-44a5-9b1c-1226e7ad5eb7,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-workflowk8chc/series-workflowk8chc-convert-artifact-747392578/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": "ac8c4318-fb16-41a7-a7ef-35610faa4466", "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-workflowk8chc/series-workflowk8chc-build-action-402589952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 11:56:40 +0000 UTC FinishedAt: 2026-08-22 12:13:13 +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:*f2fcc903-db4d-44a5-9b1c-1226e7ad5eb7,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-workflowk8chc/series-workflowk8chc-convert-artifact-747392578/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": "ac8c4318-fb16-41a7-a7ef-35610faa4466", "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-workflowk8chc/series-workflowk8chc-build-action-402589952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 12:13:23 +0000 UTC FinishedAt: 2026-08-22 12:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 12:13:23 +0000 UTC FinishedAt: 2026-08-22 12:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 12:13:23 +0000 UTC FinishedAt: 2026-08-22 12:13:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 12:13:23 +0000 UTC FinishedAt: 2026-08-22 12:13:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowk8chc/series-workflowk8chc-convert-artifact-767020189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 12:13:34 +0000 UTC FinishedAt: 2026-08-22 12:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 12:13:34 +0000 UTC FinishedAt: 2026-08-22 12:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac8c4318-fb16-41a7-a7ef-35610faa4466,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-workflowk8chc/series-workflowk8chc-build-action-402589952/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-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 12:15:24 +0000 UTC FinishedAt: 2026-08-22 12:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 12:15:24 +0000 UTC FinishedAt: 2026-08-22 12:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 12:15:24 +0000 UTC FinishedAt: 2026-08-22 12:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 12:15:24 +0000 UTC FinishedAt: 2026-08-22 12:32:05 +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:*f2fcc903-db4d-44a5-9b1c-1226e7ad5eb7,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-workflowk8chc/series-workflowk8chc-convert-artifact-767020189/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": "95fbca6a-10c6-4b21-ac8c-8cde2ae19602", "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-workflowk8chc/series-workflowk8chc-build-action-2029558137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 12:15:24 +0000 UTC FinishedAt: 2026-08-22 12:31:55 +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:*f2fcc903-db4d-44a5-9b1c-1226e7ad5eb7,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-workflowk8chc/series-workflowk8chc-convert-artifact-767020189/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": "95fbca6a-10c6-4b21-ac8c-8cde2ae19602", "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-workflowk8chc/series-workflowk8chc-build-action-2029558137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 12:32:05 +0000 UTC FinishedAt: 2026-08-22 12:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 12:32:05 +0000 UTC FinishedAt: 2026-08-22 12:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 12:32:05 +0000 UTC FinishedAt: 2026-08-22 12:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 12:32:05 +0000 UTC FinishedAt: 2026-08-22 12:33:47 +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:*95fbca6a-10c6-4b21-ac8c-8cde2ae19602,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-workflowk8chc/series-workflowk8chc-build-action-2029558137/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-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"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:*ac8c4318-fb16-41a7-a7ef-35610faa4466,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95fbca6a-10c6-4b21-ac8c-8cde2ae19602,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-workflowk8chc/series-workflowk8chc-build-action-402589952/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-workflowk8chc/series-workflowk8chc-build-action-2029558137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 12:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 12:34:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"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-workflowk8chc/series-workflowk8chc-convert-artifact-2739502626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 12:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 12:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 12:33:57 +0000 UTC FinishedAt: 2026-08-22 12:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 12:34:07 +0000 UTC FinishedAt: 2026-08-22 15:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8chc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["net_devmem_get_binding","net_devmem_bind_dmabuf","net_devmem_bind_dmabuf_to_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"68d8c6532659168430e489bb659c0d41de7d75fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"0725f52f-711e-4358-89d5-510d555030bf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 12:34:07 +0000 UTC FinishedAt: 2026-08-22 15:37:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac8c4318-fb16-41a7-a7ef-35610faa4466,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95fbca6a-10c6-4b21-ac8c-8cde2ae19602,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-workflowk8chc/series-workflowk8chc-build-action-402589952/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-workflowk8chc/series-workflowk8chc-build-action-2029558137/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-workflowk8chc/series-workflowk8chc-convert-artifact-2739502626/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,}