Name: series-workflowbk2q2 Phase: Succeeded StartedAt: 2026-08-24 07:38:07 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[0] Phase: Succeeded StartedAt: 2026-08-24 07:38:07 +0000 UTC FinishedAt: 2026-08-24 07:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 07:38:07 +0000 UTC FinishedAt: 2026-08-24 07:41:33 +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": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS" ], "series_id": "b17952db-50c4-4cbd-aab0-b9493487ebdf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_input", "iptfs_output_collect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IHdoZXJlIHRoZSBkcm9wIHRpbWVyIHdhcyBpbmNvcnJlY3RseSBjYW5jZWxsZWQgZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5LCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExY2RmNzliOWZhNjdlY2YwYjFhYzBhYzJlMmJlYWI4ZTZiNzY5MDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwNzo0MDowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICYjNDM7Njk5LDEyIEBAIHN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbiB7XG4gXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xuIFxuLVx0LyogV2UgZG9uJiMzOTt0IGNhcmUgaWYgaXQgd29ya3MgbG9ja2luZyB0YWtlcyBjYXJlIG9mIHRoaW5ncyAqL1xuLVx0aHJ0aW1lcl90cnlfdG9fY2FuY2VsKFx1MDAyNnh0ZnMtXHUwMDNlZHJvcF90aW1lcik7XG4mIzQzOyAgICAgICAgLypcbiYjNDM7ICAgICAgICAgKiBUaGUgZHJvcCB0aW1lciBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gTG9ja2luZyBtYWtlc1xuJiM0MzsgICAgICAgICAqIGEgZmFpbGVkIGNhbmNlbCBoYXJtbGVzcy5cbiYjNDM7ICAgICAgICAgKi9cbiYjNDM7ICAgICAgICBpZiAoIXh0ZnMtXHUwMDNld19zYXZlZGxlbilcbiYjNDM7ICAgICAgICAgICAgICAgIGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuIFx0aWYgKGZyZWUpXG4gXHRcdGtmcmVlX3NrYih4dGZzLVx1MDAzZXJhX25ld3NrYik7XG4gXHR4dGZzLVx1MDAzZXJhX25ld3NrYiA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB3aGVyZSB0aGUgZHJvcCB0aW1lciB3YXMgaW5jb3JyZWN0bHkgY2FuY2VsbGVkIGR1cmluZyBwYWNrZXQgcmVhc3NlbWJseSwgd2hpY2ggY291bGQgYWZmZWN0IHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBJUC1URlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKaW5kZXggNTk3YWVkZWFjMjZlYi4uYzBkNzEyYjU5NGEzNyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwpAQCAtNjk5LDggJiM0Mzs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKQogewogCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3h0ZnMtJmd0O2Ryb3BfbG9jayk7CiAKLQkvKiBXZSBkb24mIzM5O3QgY2FyZSBpZiBpdCB3b3JrcyBsb2NraW5nIHRha2VzIGNhcmUgb2YgdGhpbmdzICovCi0JaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZhbXA7eHRmcy0mZ3Q7ZHJvcF90aW1lcik7CiYjNDM7ICAgICAgICAvKgomIzQzOyAgICAgICAgICogVGhlIGRyb3AgdGltZXIgYWxzbyBkcml2ZXMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIExvY2tpbmcgbWFrZXMKJiM0MzsgICAgICAgICAqIGEgZmFpbGVkIGNhbmNlbCBoYXJtbGVzcy4KJiM0MzsgICAgICAgICAqLwomIzQzOyAgICAgICAgaWYgKCF4dGZzLSZndDt3X3NhdmVkbGVuKQomIzQzOyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKTsKIAlpZiAoZnJlZSkKIAkJa2ZyZWVfc2tiKHh0ZnMtJmd0O3JhX25ld3NrYik7CiAJeHRmcy0mZ3Q7cmFfbmV3c2tiID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBJUCBGcmFnbWVudGF0aW9uIENvZGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB0aGUgSVBzZWMgZnJhZ21lbnRhdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZyYWdtZW50IHJlYXNzZW1ibHkgZnVuY3Rpb25hbGl0eS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIHRoZSBgX19pcHRmc19yZWFzc2VtX2RvbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZmlsZSBpdHNlbGYsIGFuZCB0aGUgd2F5IHRoZSByZWFzc2VtYmx5IGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBtb2RpZmljYXRpb24gaXMgcmVsYXRlZCB0byB0aGUgYGRyb3BfdGltZXJgIGxvZ2ljLCBvbmx5IGNhbmNlbGxpbmcgaXQgaWYgYHh0ZnMtJmd0O3dfc2F2ZWRsZW5gIGlzIHplcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEl04oCZcyBsaWtlbHkgYSBzdWJ0bGUgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRyb3BwZWQgZnJhZ21lbnRzIGFuZCB0aW1lb3V0IHNjZW5hcmlvcyBkdXJpbmcgcmVhc3NlbWJseS4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzIHRoYXQgdGhlIG9yaWdpbmFsIGxvZ2ljIG1pZ2h0IGhhdmUgaGFkLCBhbmQgaG93IHRoaXMgbmV3IGNvbmRpdGlvbmFsIGJlaGF2aW9yIGFkZHJlc3NlcyB0aGVtLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIHdpdGhpbiB0aGUgcmVhc3NlbWJseSBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pcHRmc19yZWFzc2VtX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2OTg6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcxNz1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MjY9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgZml4IGlzIGJ1cmllZCBkZWVwIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQga2VybmVsIG9wdGlvbnMgb3IgbW9kdWxlcyAqYWN0aXZhdGUqIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgdG8gZXZlbiBiZWdpbiBjb21wcmVoZW5kaW5nIHRoZSBidWcmIzM5O3MgY29udGV4dCBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgd2hhdCBjb25maWcgdmFyaWFibGVzIGFyZSB0aWVkIHRvIHRoaXMgZmlsZSB0byBzZWUgaG93IGl0JiMzOTtzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gdGhlIGFjdGl2ZSBjb25maWcgaXMgY3VycmVudGx5IHNldCB0byBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBzdGFydCB1bnBhY2tpbmcgdGhpcy4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggYSBjb25maWcgbGlrZSB0aGlzLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogaXQgdG91Y2hlcy4gVGhpcyBtZWFucyBkcmlsbGluZyBkb3duIGludG8gaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgYFhGUk1fSVBURlNgIGJlaW5nIGFjdGl2ZS4gQSBmdWxsIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMga25vd2luZyB0aGUga25vY2stb24gZWZmZWN0cywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgaW1wb3J0YW50bHksIHdoYXQgYXJlYXMgb2YgdGhlIHN5c3RlbSBhcmUgKmd1YXJhbnRlZWQqIHRvIGJlIGFjdGl2ZSBvciBkb3JtYW50IGFzIGEgcmVzdWx0IG9mIHRoaXMgc2V0dGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmN5IHRyZWUgYW5kIG1hcCB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDEwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhGUk0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0bywgd2VsbCwgZXZlcnl0aGluZyAqYXJvdW5kKiBsaW5lIDE0MSBpbiBgbmV0L3hmcm0vS2NvbmZpZ2AuIEkga25vdyB0aGUgYXJlYSwgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBvcHRpb25zLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG1heWJlIHNwb3Qgc29tZXRoaW5nIG5ldyB0aGF0JiMzOTtzIGJlZW4gYWRkZWQuIExldCYjMzk7cyBzZWUgd2hhdCBwb3BzIG91dC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IGdpdmVuIFhGUk0mIzM5O3MgY29tcGxleGl0eSwgSSYjMzk7bSBwcmVwYXJlZCBmb3IgYSBmZXcgdHdpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdFx0ICBjaGFuZ2UgdGhlaXIgYXR0YWNobWVudCBwb2ludCB0byB0aGUgSW50ZXJuZXQuICBEZXRhaWxcbiAxMzY6XHRcdCAgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBpbnRlcm5ldC1kcmFmdFxuIDEzNzpcdFx0ICBcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcdTAwM2UuXG4gMTM4Olx0XG4gMTM5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2OAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaXB0ZnMgQ29uZmlndXJhdGlvbiBhbmQgUmVhc3NlbWJseSBGdW5jdGlvbnMqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaGVyZSBpcyBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgX19pcHRmc19yZWFzc2VtX2RvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaW1wYWN0LiBBIGNyaXRpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgYGlwdGZzX3JlYXNzZW1fYWJvcnRgIGFuZCBgaXB0ZnNfcmVhc3NlbV9kb25lYCBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG9mIHRoZSBgaXB0ZnNgIHJlYXNzZW1ibHkgcHJvY2VzcyBpcyBiZWluZyBpbml0aWF0ZWQgYW5kIGZpbmFsaXplZCwgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3JlYXNzZW1fYWJvcnR8aXB0ZnNfcmVhc3NlbV9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE0OiAqIGlwdGZzX3JlYXNzZW1fYWJvcnQoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBhYm9ydGVkIGZyZWUgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNS0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTc6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxOC17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5Olx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIwLX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyMzogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjY6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzQ2PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkyNy1cdFx0LyogV2UgYXJlIGRvbmUgd2l0aCBwYWNrZXQgcmVhc3NlbWJseSEgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5Mjg6XHRcdGlwdGZzX3JlYXNzZW1fZG9uZSh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MjktXHRcdGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYih4dGZzLVx1MDAzZXgsIG5ld3NrYik7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNy1cdGlmICh4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkzODpcdFx0aXB0ZnNfcmVhc3NlbV9hYm9ydCh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKkRlZXAgRGl2ZTogYGlwdGZzX3JlYXNzZW1fY29udGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIHdlZWRzLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGRlbHZlIGludG8gdGhlIGBpcHRmc19yZWFzc2VtX2NvbnRgIGNhbGxlcnMuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgY2FsbCBncmFwaCBpbiBteSBoZWFkOyBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGlzIGNvZGUgbG9uZyBlbm91Z2ggdG8gaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBhcmVhcywgYnV0IGEgZm9ybWFsIGNoZWNrIGlzIGFsd2F5cyB0aGUgcmlnaHQgd2F5IHRvIGJlIGNlcnRhaW4uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/IEFyZSB0aGVyZSBhbnkgcGF0dGVybnM/IEFyZSB0aGVyZSBhcmVhcyBJIGNhbiBzZWUsIGF0IGZpcnN0IGdsYW5jZSwgdGhhdCBtaWdodCBiZSByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3Jpbmc/IEFyZSB0aGVyZSBrbm93biBpc3N1ZXMgdGhhdCBhcmUgaW1wYWN0aW5nIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IG9mIGl0IHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBjb250ZXh0IGZvciBldmFsdWF0aW5nIGl0cyBwdXJwb3NlLCBwZXJmb3JtYW5jZSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMxLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMzLSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0NS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDY6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDctXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjIyPXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODMtXHRcdGlmIChibGtvZmYgfHwgeHRmcy1cdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXHUwMDNlcmFfbmV3c2tiKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4NDpcdFx0XHRkYXRhID0gaXB0ZnNfcmVhc3NlbV9jb250KHh0ZnMsIHNlcSwgXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4NS1cdFx0XHRcdFx0XHQgIGJsa29mZiwgXHUwMDI2c3VibGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpcHRmc19pbnB1dF9vcmRlcmVkYCBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGlwdGZzX2lucHV0X29yZGVyZWRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBpcHRmc19yZWFzc2VtX2NvbnRgLiBUaGF0JiMzOTtzIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbiwgYW5kIGl0JiMzOTtzIGEga2V5IG9uZSB0byB1bmRlcnN0YW5kLiBTaW5jZSBJJiMzOTttIGtuZWUtZGVlcCBpbiB0aGlzIGNvZGUsIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgYGlwdGZzX2lucHV0X29yZGVyZWRgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBgaXB0ZnNfcmVhc3NlbV9jb250YCBpcyBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGRpcmVjdGlvbiB3aWxsIHJlYWxseSBoZWxwIHdpdGggZGVidWdnaW5nIGFuZCBhbnkgZnV0dXJlIG1vZGlmaWNhdGlvbnMuIFJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgY2FsbHMgdG8gYGlwdGZzX2lucHV0X29yZGVyZWRgIGFuZCBzZWUgd2hhdCB0aGF0IGlsbHVtaW5hdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19pbnB1dF9vcmRlcmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDc9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE1LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMTY6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE3LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjcyPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcwMy1cdFx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MDQ6XHRcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDUtXHRcdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTcyMT1zdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDQtXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NTpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnB1dCBGbG93KioKCk9rYXksIHNvIGBpcHRmc19pbnB1dGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGlucHV0IGluIHRoaXMgc3lzdGVtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpjYWxsaW5nKiBgaXB0ZnNfaW5wdXRgLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgYWJvdXQgdGhlIGtpbmQgb2YgZGF0YSBiZWluZyBmZWQgaW50byBpdCwgdGhlIGV4cGVjdGVkIGZvcm1hdCwgYW5kIHRoZSBvdmVyYWxsIGlucHV0IHBpcGVsaW5lLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgd2hlcmUgdGhlc2UgaW5wdXRzIGFyZSBvcmlnaW5hdGluZyBhbmQgaG93IHRoZXkgYXJlIHByb2Nlc3NlZCBiZWZvcmUgcmVhY2hpbmcgYGlwdGZzX2lucHV0YC4gVGhpcyBpcyB0aGUgbW9zdCBjcnVjaWFsIHN0ZXAgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTU3OD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTkyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MzogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTk0LSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAzLVx0XHRcdFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDc9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OTctXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5OTg6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTk5LVx0XHRcdFx0XHRcdCAgICAgIHJlbWFpbmluZyk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMTYtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDE3Olx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMTgtXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjE2OiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNy0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIzLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTQ3OD1zdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX3NoaWZ0cyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjIzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MjQ6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfcmVvcmRlcihzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjUtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzI9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzAzLVx0XHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwNDpcdFx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcwNS1cdFx0fVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MTI6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzEzLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyMTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzktXHRzcGluX2xvY2soXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDA6XHRpcHRmc19pbnB1dF9yZW9yZGVyKHh0ZnMsIHNrYiwgXHUwMDI2bGlzdCwgXHUwMDI2ZnJlZWxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDEtXHRzcGluX3VubG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDQtXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NTpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDYtXHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVx0LmdldF9pbm5lcl9tdHUgPSBpcHRmc19nZXRfaW5uZXJfbXR1LFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NzM6XHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LVx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyB0aGUgRGF0YSBJbnB1dCBQYXRoIGluIHRoZSBJUFRGUyBTeXN0ZW0qKgoKT2theSwgc28gYGlwdGZzX2lucHV0YCBoYXMgYmVlbiByZWdpc3RlcmVkLCBJIHJlbWVtYmVyIHRoYXQsIGFzIHRoZSBgLmlucHV0YCBoYW5kbGVyIHdpdGhpbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGF0YSBmbG93LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IHdoZXJlIGRvZXMgdGhpcyBgaXB0ZnNfbW9kZV9jYnNgIHN0cnVjdHVyZSBhY3R1YWxseSAqZ2V0KiB1c2VkPyBLbm93aW5nIHRoYXQgd2lsbCBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGlucHV0IHdpdGhpbiB0aGlzIElQVEZTIGNvbnRleHQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGluZ2VzdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZGUuIFRpbWUgdG8gdHJhY2UgdGhhdCBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19tb2RlX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjcyOD1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzYzLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc3OD1zdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4My1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzg0Olx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg1LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQc2VjIElQLVRGUyBJbnB1dCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXB0ZnNfaW5wdXRgIGhlcmUuIEl0JiMzOTtzIHRoZSBpbnB1dCBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgYFhGUk1fTU9ERV9JUFRGU2AsIHdoaWNoIGlzIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0LiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4IGZvciB0aGUgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB0byBiZSBwcmVjaXNlLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdoZXJlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKWAgd2FzIGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQmIzM5O3MgYSBwcm9ibGVtIGJlY2F1c2UgdGhlIGRyb3AgdGltZXIgaXNuJiMzOTt0IGp1c3QgZm9yIGRyb3BwaW5nIHBhY2tldHM7IGl0IGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBTbywgY2FuY2VsbGF0aW9uIHNob3VsZCBiZSBjb25kaXRpb25hbCwgb25seSBpZiBgIXh0ZnMtJmd0O3dfc2F2ZWRsZW5gLiBHb3QgaXQuCgpUaGlzIGNlcnRhaW5seSBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgYFhGUk1fSVBURlNgIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkIHdoZW4gdGVzdGluZy4gTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBsaWtlbHkgYmUgYXJvdW5kIHRoZSBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAgc3ltYm9scy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGV4cGxvcmUgdGhvc2UgdGhvcm91Z2hseS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHNhbWUgY29kZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MTgxMj1zdGF0aWMgaW50IGlwdGZzX2lzX3Rvb19iaWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG10dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzNi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODM3OnN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzOC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzczLVx0LmlucHV0ID0gaXB0ZnNfaW5wdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NDpcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc1LVx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODgKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBSZWFzc2VtYmx5IExvZ2ljKioKCk9rYXksIHNvIHRoZSBvdXRwdXQgaGFuZGxlciBpcyBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBnb3QgaXQuIFRoZSBidWcmIzM5O3MgaW4gcmVhc3NlbWJseSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGxvb2tpbmcgYXQgdGhlIGlucHV0IHBhdGguIGBpcHRmc19pbnB1dGAgaXMgdGhlIGVudHJ5IHBvaW50IHRoZXJlLCByaWdodD8gRmlyc3QsIEkgd2FzIHRoaW5raW5nLCAmIzM0O0lzIGBpcHRmc19pbnB1dGAgc3RhdGljPyYjMzQ7IFllYWgsIGl0IGlzLiBCdXQgaG9sZCBvbiwgdGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zICpjYW4qIGdldCBpbmxpbmVkLCBhbmQgdGhvc2UgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9scywgbWFraW5nIGRlYnVnZ2luZyB0b3VnaGVyLiBMZXQgbWUgZG91YmxlLWNoZWNrOiBgc3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBBaGEhIEl0ICppcyogc3RhdGljISBCdXQuLi4gaXQmIzM5O3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gSWYgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBjYW4mIzM5O3QgY29tcGxldGVseSBpbmxpbmUgaXQsIHJpZ2h0PyBJdCAqaGFzKiB0byBoYXZlIGEgZGlzdGluY3QgYWRkcmVzcy4gU28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3Mgc3RpbGwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBPciwgSSBjYW4gbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2Agb3IganVzdCB1c2UgYGlwdGZzX2lucHV0YCBzaW5jZSBpdCYjMzk7cyBhbiBhZGRyZXNzLXRha2VuIHN0YXRpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgaW4gY2FzZS4gSSYjMzk7bGwgY2hlY2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NQoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWZpbmluZyB0aGUgQXBwcm9hY2g6IEEgTmV3IFJlZ2V4IFN0cmF0ZWd5KioKCkFscmlnaHQsIEkmIzM5O3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBwYXR0ZXJuIGZvciBhIGJpdCBub3csIGFuZCB3aGlsZSB0aGUgY3VycmVudCByZWdleCBpcyAqY2xvc2UqLCBJJiMzOTttIHNlbnNpbmcgaXQmIzM5O3Mgbm90IHF1aXRlIG9wdGltYWwuIFRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgaXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIG1pc3Mgc29tZSBlZGdlIGNhc2VzIG9yLCB3b3JzZSwgYmVjb21lIG92ZXJseSBwZXJtaXNzaXZlIGFuZCBpbnRyb2R1Y2UgZmFsc2UgcG9zaXRpdmVzIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgc29tZXRoaW5nIG1vcmUgcm9idXN0LCBtb3JlIHByZWNpc2UuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY29tcGxldGVseSByZWNvbnNpZGVyIHRoZSBhcHByb2FjaC4gTGV0JiMzOTtzIHNjcmFwIHdoYXQgd2UgaGF2ZSBhbmQgdHJ5IGJ1aWxkaW5nIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBncm91bmQgdXAsIGtlZXBpbmcgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIGNhcHR1cmUgdGhlIG51YW5jZSBpbiB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBzb21lIGh5cG90aGVzZXMgSSBjYW4gd29yayB3aXRoLiBIb3BlZnVsbHksIHRoaXMgbmV4dCB2ZXJzaW9uIHdpbGwgYmUgdGhlIGNoYXJtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwqPyBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHhmcm1faXB0ZnMuY2AgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBvZiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTGV0JiMzOTtzIGdldCBzdHJhaWdodCB0byB0aGUgcG9pbnQg4oCTIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgY29tcGxldGUgZnVuY3Rpb24gbGlzdGluZy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBzY29wZSBvZiB3aGF0IGB4ZnJtX2lwdGZzLmNgIGlzIHJlc3BvbnNpYmxlIGZvci4gSSYjMzk7bSBmb2N1c2luZyBvbiBhIGhpZ2gtbGV2ZWwgY29tcHJlaGVuc2lvbiBvZiB0aGUgaW1wbGVtZW50YXRpb247IGEgZnVsbCBjb2RlIHJldmlldyBpcyBub3QgbmVjZXNzYXJ5IGF0IHRoaXMgdGltZSwgYnV0IGhhdmluZyBhIHJlZmVyZW5jZSBmb3IgZWFjaCBkZWZpbmVkIGZ1bmN0aW9uIGhlbHBzLiBUaGUgbGlzdGluZyBzaG91bGQgc2VydmUgYXMgYSBzb2xpZCBiYXNlIGZyb20gd2hpY2ggSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGludG8gbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtejAtOV9dJiM0MzsgKSYjNDM7W2EtejAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTE0OT1zdHJ1Y3QgeGZybV9pcHRmc19kYXRhIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgwOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mi1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg3LSNpZmRlZiBUUkFDRVBPSU5UU19FTkFCTEVEXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg4OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90byhzdHJ1Y3QgaXBoZHIgKmlwaClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTQtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTk1OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90b19zZXEoc3RydWN0IGlwaGRyICppcGgpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTk2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIxLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIyMjpzdGF0aWMgdTY0IF9fZXNwX3NlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMy17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdGZzX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCB1MzIgbGVuLCBib29sIGwzcmVzdilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI5NzpzdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzE1PXN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzMzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjMzNDpzdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNS1cdFx0XHRcdFx0c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGspXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozODA6c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4MS1cdFx0XHRcdCAgICAgdTMyIG9mZnNldClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDA4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQwOTpzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMC1cdFx0XHRcdCAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1ODpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktXHRcdFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01Nzg9aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAzLVx0XHRcdFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE5OnN0YXRpYyB1MzIgX19pcHRmc19pcGhsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjIwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjM4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYzOTpzdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1OTpzdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjYwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY5ODpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNzpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNjpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03Mjcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDUtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzQ2OnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ3LVx0XHRcdCAgICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTQ2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NzpzdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTQ4LVx0XHRcdFx0ICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpza2JzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzA0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMDU6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMDYte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE4LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTk6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjAtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjQtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMyNTpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3MS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzcyOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzczLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwMTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDI3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0Mjg6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyOS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0Nzg6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc5LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjI0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjI1LVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjcxLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2NzI6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIwLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjE6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIyLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3NC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzc1OnN0YXRpYyBib29sIGlwdGZzX2VucXVldWUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzc2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc5OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzk5OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODEyOnN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MTMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4Mzc6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTkzNS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxOTM2OnN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9wcmVwYXJlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYmxrb2ZmKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5Mzcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTY3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjAwMC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDAxOnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDk3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwOTg6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwOTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNTgtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE1OTpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE2MC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxODktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE5MDpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxOTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMjU6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3NS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzc2OnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3Ny17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQyMjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjY6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY3LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ5MC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDkxOnN0YXRpYyB1MzIgX19pcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0OTIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTA4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MDk6c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1Mjg6c3RhdGljIGludCBpcHRmc191c2VyX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI5LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU4NC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB0ZnNfc2FfbGVuKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1ODYte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDU6c3RhdGljIGludCBpcHRmc19jb3B5X3RvX3VzZXIoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NDMtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjY0NDpzdGF0aWMgdm9pZCBfX2lwdGZzX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY0NS1cdFx0XHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY2OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjY5OnN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NzAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzA5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3MTA6c3RhdGljIGludCBpcHRmc19pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3MTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Mjg6c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3ODpzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc5MC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkxOnN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX2lwdGZzX2Zpbmkodm9pZClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAtVEZTIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgZm9jdXNlcyBvbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gQWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhlcmUgYXJlIHN0YXRpYywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLiBJIGNhbiBzZWUgdGhlIGNhbGxiYWNrcyByZWdpc3RlcmVkIGluIGBpcHRmc19tb2RlX2Nic2A6IGBpcHRmc19nZXRfaW5uZXJfbXR1YCwgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYGlwdGZzX3VzZXJfaW5pdGAsIGBpcHRmc19jbG9uZV9zdGF0ZWAsIGBpcHRmc19pbml0X3N0YXRlYCwgYGlwdGZzX2Rlc3Ryb3lfc3RhdGVgLCBgaXB0ZnNfc2FfbGVuYCwgYW5kIGBpcHRmc19jb3B5X3RvX3VzZXJgLiBSaWdodCBhd2F5LCBgaXB0ZnNfaW5wdXRgIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFzIHRoZSBwcmltYXJ5IGlucHV0IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCBhbiBleWUgb24gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBhcyB3ZWxsLgoKVGhlIGNvbmZpZ3VyYXRpb24gc3ltYm9sIGlzIGBYRlJNX0lQVEZTYC4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgaW4gdGhlIElQLVRGUyByZWFzc2VtYmx5LCBzcGVjaWZpY2FsbHkgdGhlIGluY29ycmVjdCBjYW5jZWxsYXRpb24gb2YgdGhlIGRyb3AgdGltZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGlzc3VlcyB3aXRoIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBTbywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgaW4gdGhlIGNvcmUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGl0ICpkZXBlbmRzIG9uKiBgWEZSTWAuIFRoYXQgbWFrZXMgc2Vuc2UuIE1lYW5pbmcgYFhGUk1gICptdXN0KiBiZSBlbmFibGVkIGZvciBgWEZSTV9JUFRGU2AgdG8gd29yay4gU2luY2UgYFhGUk1gIGlzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIHVzdWFsbHkgZW5hYmxlZCwgaXQgd29uJiMzOTt0IGJlIGFuIGlzc3VlLiBTbywgY29uZmlybWluZyBgWEZSTV9JUFRGU2AgaXMgYWxsIEkgbmVlZCB0byByZXR1cm4sIGdpdmVuIGl0IGltcGxpZXMgdGhlIG5lY2Vzc2FyeSB1bmRlcmx5aW5nIGBYRlJNYC4KCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgcXVpY2tseSBnbGFuY2UgYXJvdW5kIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnLTgtXHRzZWxlY3QgR1JPX0NFTExTXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9NDM9Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElQVjZcbm5ldC94ZnJtL0tjb25maWctNDYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNTQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBYRlJNXG5uZXQveGZybS9LY29uZmlnLTY0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubmV0L3hmcm0vS2NvbmZpZy03NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyNi1cdGJvb2wgXCYjMzQ7UEZfS0VZIE1JR1JBVEVcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTI3Olx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTEyOC1cdHNlbGVjdCBYRlJNX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxNDM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTQ0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE0NAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IHRvIHRlc3QgaXQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYFhGUk1fSVBURlNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBTaW5jZSBgWEZSTV9JUFRGU2AgZGVwZW5kcyBvbiBib3RoIGBYRlJNYCBhbmQsIGluZGlyZWN0bHksIGBJTkVUYCwgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IHRob3NlIGJyb2FkZXIgY29uZmlncyBleHBsaWNpdGx5LiBgWEZSTV9JUFRGU2AgaXMgdGhlIG9ubHkgb25lIHRoYXQgcmVhbGx5IG1hdHRlcnMgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLgoKVG8gZ3VpZGUgbXkgZnV6emluZyBlZmZvcnRzLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIGlzIGRlZmluaXRlbHkgYW4gYXJlYSB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIHRlc3RpbmcuIE15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O2lwdGZzX2lucHV0JiMzNDssICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0O11gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpcyBidWcgaW52b2x2aW5nIHRoZSBkcm9wIHRpbWVyIGFuZCByZWFzc2VtYmx5IGlzIG9jY3VycmluZy4gVGhhdCByZWFzc2VtYmx5IGFuZCByZW9yZGVyIHdpbmRvdyBhcmUgY3J1Y2lhbCBoZXJlLiBTbywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGRhdGEgcGF0aHMsIGlucHV0IGFuZCBvdXRwdXQsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhhdC4KCkZpbmFsbHksIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFsmIzM0O1hGUk1fSVBURlMmIzM0O11gLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIElQc2VjJiMzOTtzIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQsIHNwZWNpZmljYWxseSB0aGUgZHJvcCB0aW1lciBjYW5jZWxsYXRpb24gZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5IHdoaWNoIHBvdGVudGlhbGx5IGltcGFjdHMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYywgbm90IHNvbWUgbWlub3IgY29zbWV0aWMgdHdlYWsuIFNvLCBlbmFibGluZyBgWEZSTV9JUFRGU2AgaXMgdGhlIGNvcnJlY3QgcGF0aCBmb3IgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExY2RmNzliOWZhNjdlY2YwYjFhYzBhYzJlMmJlYWI4ZTZiNzY5MDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAwNzo0MDowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi5jMGQ3MTJiNTk0YTM3IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC02OTksOCAmIzQzOzY5OSwxMiBAQCBzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpCiB7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7eHRmcy0mZ3Q7ZHJvcF9sb2NrKTsKIAotCS8qIFdlIGRvbiYjMzk7dCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi8KLQlocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKTsKJiM0MzsgICAgICAgIC8qCiYjNDM7ICAgICAgICAgKiBUaGUgZHJvcCB0aW1lciBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gTG9ja2luZyBtYWtlcwomIzQzOyAgICAgICAgICogYSBmYWlsZWQgY2FuY2VsIGhhcm1sZXNzLgomIzQzOyAgICAgICAgICovCiYjNDM7ICAgICAgICBpZiAoIXh0ZnMtJmd0O3dfc2F2ZWRsZW4pCiYjNDM7ICAgICAgICAgICAgICAgIGhydGltZXJfdHJ5X3RvX2NhbmNlbCgmYW1wO3h0ZnMtJmd0O2Ryb3BfdGltZXIpOwogCWlmIChmcmVlKQogCQlrZnJlZV9za2IoeHRmcy0mZ3Q7cmFfbmV3c2tiKTsKIAl4dGZzLSZndDtyYV9uZXdza2IgPSBOVUxMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaW1lciBDYW5jZWxsYXRpb24gaW4gYHhmcm1faXB0ZnMuY2AqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19pcHRmc19yZWFzc2VtX2RvbmVgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGEgdGltZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCBmb3Igd2hlbiB3ZSBhdHRlbXB0IHRvIGNhbmNlbCB0aGUgYGhydGltZXJfdHJ5X3RvX2NhbmNlbCgmYW1wO3h0ZnMtJmd0O2Ryb3BfdGltZXIpYC4gVGhlIGFkZGl0aW9uIG9mIGBpZiAoIXh0ZnMtJmd0O3dfc2F2ZWRsZW4pYCBhcm91bmQgdGhlIHRpbWVyIGNhbmNlbGxhdGlvbiBpcyB0aGUgY29yZSBvZiBpdC4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHVzYWdlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEl0IGxvb2tzIHB1cmVseSBsaWtlIGEgdGltZXIgY2FuY2VsbGF0aW9uIGNvbmRpdGlvbiBiZWluZyByZWZpbmVkLiAKClRoYXQgYmVpbmcgc2FpZCwgYmVjYXVzZSBpdCBpcyBkZWFsaW5nIHdpdGggYSB0aW1lciwgYW5kIHRpbWVycyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgY29ycmVjdG5lc3MgaW4gbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBtb2RpZmljYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgdGltZXIsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwYWNrZXQgcmVhc3NlbWJseSBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGRyb3BwaW5nIHBhY2tldHMgb3IgY2F1c2luZyBvdGhlciBpc3N1ZXMgd2l0aCB0aGlzIGNvbmRpdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pcHRmc19yZWFzc2VtX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2OTg6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcxNz1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MjY9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MwoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25jZXJuaW5nIHRoZSBUaW1lciBDYW5jZWxsYXRpb24gTG9naWMgVXBkYXRlKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzICplbnRpcmVseSogb24gaG93IHRoZSB0aW1lciBjYW5jZWxsYXRpb24gd29ya3MuIFRoYXQmIzM5O3MgdGhlIG9ubHkgdGhpbmcgdGhhdCYjMzk7cyBiZWluZyB0b3VjaGVkIGluIHRoaXMgcmV2aXNpb24uIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gYXNzZXNzaW5nIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmlzayBvZiBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgY29yZSBjb25jZXJuLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgSSBkb24mIzM5O3QgYmVsaWV2ZSB0aGlzIGlzIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2UgY2FuIHByb2NlZWQgd2l0aCB0aGF0IGFzc3VtcHRpb24gYXMgd2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggbWVtb3J5IHVuaW5pdGlhbGl6ZWQgaXNzdWVzLCB0aGVyZWZvcmUgS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBjaGFuZ2UuIFdlIGFyZSBvbmx5IGZvY3VzZWQgb24gdGhlIGNhbmNlbGxhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cdTAwM2Vkcm9wX3RpbWVyYCkgaW4gYF9faXB0ZnNfcmVhc3NlbV9kb25lKClgLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIHRpbWVyIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjAyLjM4OTg1NDczM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzQyNDIzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXFx1MDAzZWRyb3BfdGltZXJgKSBpbiBgX19pcHRmc19yZWFzc2VtX2RvbmUoKWAuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gdGltZXIgbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGFjY2Vzc2VkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IHdoZXJlIHRoZSBkcm9wIHRpbWVyIHdhcyBpbmNvcnJlY3RseSBjYW5jZWxsZWQgZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5LCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDIuMzg5ODU5MjgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxNzk4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDA3OjQwOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxcbiB7XFxuIFxcdGFzc2VydF9zcGluX2xvY2tlZChcXHUwMDI2eHRmcy1cXHUwMDNlZHJvcF9sb2NrKTtcXG4gXFxuLVxcdC8qIFdlIGRvbid0IGNhcmUgaWYgaXQgd29ya3MgbG9ja2luZyB0YWtlcyBjYXJlIG9mIHRoaW5ncyAqL1xcbi1cXHRocnRpbWVyX3RyeV90b19jYW5jZWwoXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfdGltZXIpO1xcbisgICAgICAgIC8qXFxuKyAgICAgICAgICogVGhlIGRyb3AgdGltZXIgYWxzbyBkcml2ZXMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIExvY2tpbmcgbWFrZXNcXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXFxuKyAgICAgICAgICovXFxuKyAgICAgICAgaWYgKCF4dGZzLVxcdTAwM2V3X3NhdmVkbGVuKVxcbisgICAgICAgICAgICAgICAgaHJ0aW1lcl90cnlfdG9fY2FuY2VsKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX3RpbWVyKTtcXG4gXFx0aWYgKGZyZWUpXFxuIFxcdFxcdGtmcmVlX3NrYih4dGZzLVxcdTAwM2VyYV9uZXdza2IpO1xcbiBcXHR4dGZzLVxcdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDowMi44MDk5MDE1NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2OTIxMDg3Mzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxuIHtcbiBcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4gXG4tXHQvKiBXZSBkb24ndCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi9cbi1cdGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuKyAgICAgICAgLypcbisgICAgICAgICAqIFRoZSBkcm9wIHRpbWVyIGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBMb2NraW5nIG1ha2VzXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXG4rICAgICAgICAgKi9cbisgICAgICAgIGlmICgheHRmcy1cdTAwM2V3X3NhdmVkbGVuKVxuKyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKTtcbiBcdGlmIChmcmVlKVxuIFx0XHRrZnJlZV9za2IoeHRmcy1cdTAwM2VyYV9uZXdza2IpO1xuIFx0eHRmcy1cdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDIuODA5OTAzMTI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0OTc2ODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gSVAgRnJhZ21lbnRhdGlvbiBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBJUHNlYyBmcmFnbWVudGF0aW9uIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgZnJhZ21lbnQgcmVhc3NlbWJseSBmdW5jdGlvbmFsaXR5LiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhlIGBfX2lwdGZzX3JlYXNzZW1fZG9uZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGZpbGUgaXRzZWxmLCBhbmQgdGhlIHdheSB0aGUgcmVhc3NlbWJseSBpcyBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIGBkcm9wX3RpbWVyYCBsb2dpYywgb25seSBjYW5jZWxsaW5nIGl0IGlmIGB4dGZzLVx1MDAzZXdfc2F2ZWRsZW5gIGlzIHplcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEl04oCZcyBsaWtlbHkgYSBzdWJ0bGUgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRyb3BwZWQgZnJhZ21lbnRzIGFuZCB0aW1lb3V0IHNjZW5hcmlvcyBkdXJpbmcgcmVhc3NlbWJseS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMgdGhhdCB0aGUgb3JpZ2luYWwgbG9naWMgbWlnaHQgaGF2ZSBoYWQsIGFuZCBob3cgdGhpcyBuZXcgY29uZGl0aW9uYWwgYmVoYXZpb3IgYWRkcmVzc2VzIHRoZW0uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IGB3X3NhdmVkbGVuYCBpcyBzZXQgYW5kIHVzZWQgd2l0aGluIHRoZSByZWFzc2VtYmx5IHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDcuMzU5NjczOTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODgyNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faXB0ZnNfcmVhc3NlbV9kb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9NjU5PXN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY5ODpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzE3PXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI4OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDcuNDExNTYwMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkxNzQ3MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGZpeCBpcyBidXJpZWQgZGVlcCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGtlcm5lbCBvcHRpb25zIG9yIG1vZHVsZXMgKmFjdGl2YXRlKiB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHRvIGV2ZW4gYmVnaW4gY29tcHJlaGVuZGluZyB0aGUgYnVnJ3MgY29udGV4dCBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCdzIHNlZSB3aGF0IGNvbmZpZyB2YXJpYWJsZXMgYXJlIHRpZWQgdG8gdGhpcyBmaWxlIHRvIHNlZSBob3cgaXQncyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MTEuNzAzMzA5NTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1faXB0ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjExLjc1MTgxMzUyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE5NjE4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhlIGFjdGl2ZSBjb25maWcgaXMgY3VycmVudGx5IHNldCB0byBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBzdGFydCB1bnBhY2tpbmcgdGhpcy4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhIGNvbmZpZyBsaWtlIHRoaXMsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCB0b3VjaGVzLiBUaGlzIG1lYW5zIGRyaWxsaW5nIGRvd24gaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBgWEZSTV9JUFRGU2AgYmVpbmcgYWN0aXZlLiBBIGZ1bGwgdW5kZXJzdGFuZGluZyByZXF1aXJlcyBrbm93aW5nIHRoZSBrbm9jay1vbiBlZmZlY3RzLCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBpbXBvcnRhbnRseSwgd2hhdCBhcmVhcyBvZiB0aGUgc3lzdGVtIGFyZSAqZ3VhcmFudGVlZCogdG8gYmUgYWN0aXZlIG9yIGRvcm1hbnQgYXMgYSByZXN1bHQgb2YgdGhpcyBzZXR0aW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgbWFwIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MTUuNjUzNzc3ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTU2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjE1LjcwMTkzODI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzgxNDI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyByZWxhdGVkIHRvLCB3ZWxsLCBldmVyeXRoaW5nICphcm91bmQqIGxpbmUgMTQxIGluIGBuZXQveGZybS9LY29uZmlnYC4gSSBrbm93IHRoZSBhcmVhLCBhbmQgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHZhcmlvdXMgb3B0aW9ucy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG1heWJlIHNwb3Qgc29tZXRoaW5nIG5ldyB0aGF0J3MgYmVlbiBhZGRlZC4gTGV0J3Mgc2VlIHdoYXQgcG9wcyBvdXQuIEknbSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IGdpdmVuIFhGUk0ncyBjb21wbGV4aXR5LCBJJ20gcHJlcGFyZWQgZm9yIGEgZmV3IHR3aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjE4Ljk4MDA4MzMyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNTpcXHRcXHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxcbiAxMzY6XFx0XFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XFxuIDEzNzpcXHRcXHQgIFxcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcXHUwMDNlLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBYRlJNX0lQVEZTXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDE0MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXFxuIDE0NjpcXHRcXHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcXG4gMTQ3OlxcdFxcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxcbiAxNDg6XFx0XFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXFxuIDE0OTpcXHRcXHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxcbiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDoxOC45ODAxNDA4OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MTk5NTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwdGZzIENvbmZpZ3VyYXRpb24gYW5kIFJlYXNzZW1ibHkgRnVuY3Rpb25zKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaGVyZSBpcyBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgX19pcHRmc19yZWFzc2VtX2RvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaW1wYWN0LiBBIGNyaXRpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgYGlwdGZzX3JlYXNzZW1fYWJvcnRgIGFuZCBgaXB0ZnNfcmVhc3NlbV9kb25lYCBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhlIGBpcHRmc2AgcmVhc3NlbWJseSBwcm9jZXNzIGlzIGJlaW5nIGluaXRpYXRlZCBhbmQgZmluYWxpemVkLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdmlzdWFsaXplIHRoZSBsYXJnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2OCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjMuNDMyMTM5NTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMzYyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcmVhc3NlbV9hYm9ydHxpcHRmc19yZWFzc2VtX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNDogKiBpcHRmc19yZWFzc2VtX2Fib3J0KCkgLSBJbi1wcm9ncmVzcyBwYWNrZXQgaXMgYWJvcnRlZCBmcmVlIHRoZSBzdGF0ZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE1LSAqIEB4dGZzOiB4dGZzIHN0YXRlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNi0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE3OnN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMi0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzIzOiAqIGlwdGZzX3JlYXNzZW1fZG9uZSgpIC0gSW4tcHJvZ3Jlc3MgcGFja2V0IGlzIGNvbXBsZXRlLCBjbGVhciB0aGUgc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjUtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNjpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI4OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03NDY9c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MjctXFx0XFx0LyogV2UgYXJlIGRvbmUgd2l0aCBwYWNrZXQgcmVhc3NlbWJseSEgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTI4OlxcdFxcdGlwdGZzX3JlYXNzZW1fZG9uZSh4dGZzKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTI5LVxcdFxcdGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYih4dGZzLVxcdTAwM2V4LCBuZXdza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNy1cXHRpZiAoeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkzODpcXHRcXHRpcHRmc19yZWFzc2VtX2Fib3J0KHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzktXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjMuNjc1MTgxNzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjcyODExMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3Mgc2VsZi1yZWZsZWN0aW9uOlxuXG4qKkRlZXAgRGl2ZTogYGlwdGZzX3JlYXNzZW1fY29udGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgd2VlZHMuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gZGVsdmUgaW50byB0aGUgYGlwdGZzX3JlYXNzZW1fY29udGAgY2FsbGVycy4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIGNhbGwgZ3JhcGggaW4gbXkgaGVhZDsgSSd2ZSB3b3JrZWQgd2l0aCB0aGlzIGNvZGUgbG9uZyBlbm91Z2ggdG8gaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBhcmVhcywgYnV0IGEgZm9ybWFsIGNoZWNrIGlzIGFsd2F5cyB0aGUgcmlnaHQgd2F5IHRvIGJlIGNlcnRhaW4uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb250ZXh0cz8gQXJlIHRoZXJlIGFueSBwYXR0ZXJucz8gQXJlIHRoZXJlIGFyZWFzIEkgY2FuIHNlZSwgYXQgZmlyc3QgZ2xhbmNlLCB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZz8gQXJlIHRoZXJlIGtub3duIGlzc3VlcyB0aGF0IGFyZSBpbXBhY3RpbmcgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNvbnRleHQgZm9yIGV2YWx1YXRpbmcgaXRzIHB1cnBvc2UsIHBlcmZvcm1hbmNlLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbi1kZXB0aCBhbmFseXNpcyBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDoyNy4xNDI0NjU3MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTU5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzEtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0NS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzQ2OnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyMj1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODMtXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg0OlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjcuMTkyNjMwNzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODgwNTg3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwdGZzX2lucHV0X29yZGVyZWRgIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBpcHRmc19pbnB1dF9vcmRlcmVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBgaXB0ZnNfcmVhc3NlbV9jb250YC4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbiwgYW5kIGl0J3MgYSBrZXkgb25lIHRvIHVuZGVyc3RhbmQuIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gdGhpcyBjb2RlLCBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hvKiBpcyBjYWxsaW5nIGBpcHRmc19pbnB1dF9vcmRlcmVkYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGlwdGZzX3JlYXNzZW1fY29udGAgaXMgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBkaXJlY3Rpb24gd2lsbCByZWFsbHkgaGVscCB3aXRoIGRlYnVnZ2luZyBhbmQgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zLiBSaWdodCwgbGV0J3MgdHJhY2sgZG93biB0aGUgY2FsbHMgdG8gYGlwdGZzX2lucHV0X29yZGVyZWRgIGFuZCBzZWUgd2hhdCB0aGF0IGlsbHVtaW5hdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzEuMDgwNjkzMTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgwODQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dF9vcmRlcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9OTQ3PXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE1LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjE2OiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMTctICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzI9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDMtXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwNDpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDUtXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjE9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVxcdGlmICh4dGZzLVxcdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ0LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDU6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzEuMTI3NTA3NDYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzU3NjU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIElucHV0IEZsb3cqKlxuXG5Pa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBpbnB1dCBpbiB0aGlzIHN5c3RlbS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmNhbGxpbmcqIGBpcHRmc19pbnB1dGAuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBhYm91dCB0aGUga2luZCBvZiBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0LCB0aGUgZXhwZWN0ZWQgZm9ybWF0LCBhbmQgdGhlIG92ZXJhbGwgaW5wdXQgcGlwZWxpbmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHNlZSB3aGVyZSB0aGVzZSBpbnB1dHMgYXJlIG9yaWdpbmF0aW5nIGFuZCBob3cgdGhleSBhcmUgcHJvY2Vzc2VkIGJlZm9yZSByZWFjaGluZyBgaXB0ZnNfaW5wdXRgLiBUaGlzIGlzIHRoZSBtb3N0IGNydWNpYWwgc3RlcCBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzUuMzYzMjc1MzAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1MjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTU3OD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01OTItLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MzogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5NC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDMtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk0Nz1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTk3LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5OTg6XFx0XFx0XFx0XFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDE2LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDE3OlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAxOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMTUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMTY6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNy0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTQ3OD1zdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX3NoaWZ0cyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MjQ6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfcmVvcmRlcihzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjI1LVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjcyPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzAzLVxcdFxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MDQ6XFx0XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA1LVxcdFxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzEyOiAqIGlwdGZzX2lucHV0KCkgLSBoYW5kbGUgcmVjZWlwdCBvZiBpcHRmcyBwYXlsb2FkXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTMtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzIxOnN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjgtXFx0aWYgKHh0ZnMtXFx1MDAzZWNmZy5yZW9yZGVyX3dpbl9zaXplID09IDApIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzAtXFx0XFx0Z290byBkb25lO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzktXFx0c3Bpbl9sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzQwOlxcdGlwdGZzX2lucHV0X3Jlb3JkZXIoeHRmcywgc2tiLCBcXHUwMDI2bGlzdCwgXFx1MDAyNmZyZWVsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0MS1cXHRzcGluX3VubG9jayhcXHUwMDI2eHRmcy1cXHUwMDNlZHJvcF9sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ0LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDU6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ2LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC1cXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjM1LjQxMDAzNjQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcxMjQ3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBEYXRhIElucHV0IFBhdGggaW4gdGhlIElQVEZTIFN5c3RlbSoqXG5cbk9rYXksIHNvIGBpcHRmc19pbnB1dGAgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgSSByZW1lbWJlciB0aGF0LCBhcyB0aGUgYC5pbnB1dGAgaGFuZGxlciB3aXRoaW4gdGhlIGBpcHRmc19tb2RlX2Nic2Agc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGRhdGEgZmxvdy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzOiB3aGVyZSBkb2VzIHRoaXMgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUgYWN0dWFsbHkgKmdldCogdXNlZD8gS25vd2luZyB0aGF0IHdpbGwgcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbnB1dCB3aXRoaW4gdGhpcyBJUFRGUyBjb250ZXh0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGluZ2VzdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZGUuIFRpbWUgdG8gdHJhY2UgdGhhdCBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzkuMDgxMjg2NDI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYxNzI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19tb2RlX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Mjg9c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzYzLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2NS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzc4PXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODMtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODQ6XFx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFxcdTAwMjZpcHRmc19tb2RlX2Nicyk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODUtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjM5LjEyNjkwODkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjQ4NDU0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHNlYyBJUC1URlMgSW5wdXQgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHRmc19pbnB1dGAgaGVyZS4gSXQncyB0aGUgaW5wdXQgaGFuZGxlciBzcGVjaWZpY2FsbHkgZm9yIGBYRlJNX01PREVfSVBURlNgLCB3aGljaCBpcyB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydC4gVGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgdG8gYmUgcHJlY2lzZS5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdoZXJlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKWAgd2FzIGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQncyBhIHByb2JsZW0gYmVjYXVzZSB0aGUgZHJvcCB0aW1lciBpc24ndCBqdXN0IGZvciBkcm9wcGluZyBwYWNrZXRzOyBpdCBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gU28sIGNhbmNlbGxhdGlvbiBzaG91bGQgYmUgY29uZGl0aW9uYWwsIG9ubHkgaWYgYCF4dGZzLVx1MDAzZXdfc2F2ZWRsZW5gLiBHb3QgaXQuXG5cblRoaXMgY2VydGFpbmx5IGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBgWEZSTV9JUFRGU2AgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIHdoZW4gdGVzdGluZy4gTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBsaWtlbHkgYmUgYXJvdW5kIHRoZSBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAgc3ltYm9scy4gSSdsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB0aG9zZSB0aG9yb3VnaGx5LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHNhbWUgY29kZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjQ0LjE5MTc1NzYzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MDQ0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODEyPXN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MzYtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4Mzc6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzOC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3My1cXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NDpcXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzUtXFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjQ0LjI0MDU3MDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTEzNDU2NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgUmVhc3NlbWJseSBMb2dpYyoqXG5cbk9rYXksIHNvIHRoZSBvdXRwdXQgaGFuZGxlciBpcyBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBnb3QgaXQuIFRoZSBidWcncyBpbiByZWFzc2VtYmx5LCB3aGljaCBtZWFucyBJIG5lZWQgdG8gYmUgbG9va2luZyBhdCB0aGUgaW5wdXQgcGF0aC4gYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQgdGhlcmUsIHJpZ2h0PyBGaXJzdCwgSSB3YXMgdGhpbmtpbmcsIFwiSXMgYGlwdGZzX2lucHV0YCBzdGF0aWM/XCIgWWVhaCwgaXQgaXMuIEJ1dCBob2xkIG9uLCB0aGUgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogZ2V0IGlubGluZWQsIGFuZCB0aG9zZSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMsIG1ha2luZyBkZWJ1Z2dpbmcgdG91Z2hlci4gTGV0IG1lIGRvdWJsZS1jaGVjazogYHN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpYC4gQWhhISBJdCAqaXMqIHN0YXRpYyEgQnV0Li4uIGl0J3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gSWYgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgdGhlIGNvbXBpbGVyIGNhbid0IGNvbXBsZXRlbHkgaW5saW5lIGl0LCByaWdodD8gSXQgKmhhcyogdG8gaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFNvLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE9yLCBJIGNhbiBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCBvciBqdXN0IHVzZSBgaXB0ZnNfaW5wdXRgIHNpbmNlIGl0J3MgYW4gYWRkcmVzcy10YWtlbiBzdGF0aWMgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgaW4gY2FzZS4gSSdsbCBjaGVjayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODgsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTAuMTU0MDMwMzEzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MDkwNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjUwLjMxMjk0OTM0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxMjgwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlZmluaW5nIHRoZSBBcHByb2FjaDogQSBOZXcgUmVnZXggU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBwYXR0ZXJuIGZvciBhIGJpdCBub3csIGFuZCB3aGlsZSB0aGUgY3VycmVudCByZWdleCBpcyAqY2xvc2UqLCBJJ20gc2Vuc2luZyBpdCdzIG5vdCBxdWl0ZSBvcHRpbWFsLiBUaGVyZSdzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgaXQncyBlaXRoZXIgZ29pbmcgdG8gbWlzcyBzb21lIGVkZ2UgY2FzZXMgb3IsIHdvcnNlLCBiZWNvbWUgb3Zlcmx5IHBlcm1pc3NpdmUgYW5kIGludHJvZHVjZSBmYWxzZSBwb3NpdGl2ZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCBzb21ldGhpbmcgbW9yZSByb2J1c3QsIG1vcmUgcHJlY2lzZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUsIEkgdGhpbmsgaXQncyB0aW1lIHRvIGNvbXBsZXRlbHkgcmVjb25zaWRlciB0aGUgYXBwcm9hY2guIExldCdzIHNjcmFwIHdoYXQgd2UgaGF2ZSBhbmQgdHJ5IGJ1aWxkaW5nIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBncm91bmQgdXAsIGtlZXBpbmcgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIGNhcHR1cmUgdGhlIG51YW5jZSBpbiB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBzb21lIGh5cG90aGVzZXMgSSBjYW4gd29yayB3aXRoLiBIb3BlZnVsbHksIHRoaXMgbmV4dCB2ZXJzaW9uIHdpbGwgYmUgdGhlIGNoYXJtIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NSwiT3V0cHV0VG9rZW5zIjo3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTQuMDg0MjMyNzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY2NzEzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKj8gW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTQuMTMxOTA4NDY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU3ODE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgeGZybV9pcHRmcy5jYCBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiBsYW5kc2NhcGUgb2YgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIExldCdzIGdldCBzdHJhaWdodCB0byB0aGUgcG9pbnQg4oCTIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgY29tcGxldGUgZnVuY3Rpb24gbGlzdGluZy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBzY29wZSBvZiB3aGF0IGB4ZnJtX2lwdGZzLmNgIGlzIHJlc3BvbnNpYmxlIGZvci4gSSdtIGZvY3VzaW5nIG9uIGEgaGlnaC1sZXZlbCBjb21wcmVoZW5zaW9uIG9mIHRoZSBpbXBsZW1lbnRhdGlvbjsgYSBmdWxsIGNvZGUgcmV2aWV3IGlzIG5vdCBuZWNlc3NhcnkgYXQgdGhpcyB0aW1lLCBidXQgaGF2aW5nIGEgcmVmZXJlbmNlIGZvciBlYWNoIGRlZmluZWQgZnVuY3Rpb24gaGVscHMuIFRoZSBsaXN0aW5nIHNob3VsZCBzZXJ2ZSBhcyBhIHNvbGlkIGJhc2UgZnJvbSB3aGljaCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDgsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDo1Ny45Njc2OTIzNjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQwMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtejAtOV9dKyApK1thLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTE0OT1zdHJ1Y3QgeGZybV9pcHRmc19kYXRhIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODctI2lmZGVmIFRSQUNFUE9JTlRTX0VOQUJMRURcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg4OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90byhzdHJ1Y3QgaXBoZHIgKmlwaClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTQtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE5NTpzdGF0aWMgdTMyIF9fdHJhY2VfaXBfcHJvdG9fc2VxKHN0cnVjdCBpcGhkciAqaXBoKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTYte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIyOnN0YXRpYyB1NjQgX19lc3Bfc2VxKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfYWxsb2Nfc2tiKHN0cnVjdCBza19idWZmICp0cGwsIHUzMiBsZW4sIGJvb2wgbDNyZXN2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5Ni0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk3OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTU9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM0OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNzktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MDpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4MS1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmZzZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDk6c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDEwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1ODpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaywgdTMyIG9mZnNldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01Nzg9aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMy1cXHRcXHRcXHRcXHQgIHU4ICpidWYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjE4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MTk6c3RhdGljIHUzMiBfX2lwdGZzX2lwaGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjIwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MzgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjYzOTpzdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY0MC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NTk6c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTYtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNzpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxOC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjY6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDY6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NzpzdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnNrYnNlcSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMDQtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMDU6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzA2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzE5OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9wYXN0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzI1OnN0YXRpYyB1MzIgX19yZW9yZGVyX2Ryb3Aoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzcxLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzcyOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MDE6c3RhdGljIHZvaWQgaXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGludCBpbmRleClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQwMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyNy1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQyODpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX2ZpdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDc4OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0NzktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjIzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjI0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyNS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY3MS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY3MjpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjE6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3NC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc3NTpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3OTgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTk6c3RhdGljIGludCBpcHRmc19nZXRfY3VyX3BtdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODExLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODEyOnN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODEzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM2LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODM3OnN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mzgte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5MzUtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE5MzY6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3ByZXBhcmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBibGtvZmYpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5Mzcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE5Njc9c3RhdGljIHN0cnVjdCBza19idWZmICppcHRmc19jb3B5X2NyZWF0ZV9mcmFnKHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZnNldCwgdTMyIGNvcHlfbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwMDE6c3RhdGljIGludCBpcHRmc19jb3B5X2NyZWF0ZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBtdHUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwOTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwOTg6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE1OC1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE1OTpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxODktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxOTA6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE5MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyNC1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMyNTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzc1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzc2OnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjEtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0MjI6c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2NS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NjpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDkwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDkxOnN0YXRpYyB1MzIgX19pcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDkyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTA5OnN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUyODpzdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI5LVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTg0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB0ZnNfc2FfbGVuKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTg2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjA1OnN0YXRpYyBpbnQgaXB0ZnNfY29weV90b191c2VyKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjQzLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjQ0OnN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY0NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjY4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjY5OnN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjcwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzA5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzEwOnN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcxMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyNy1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjcyODpzdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzc4OnN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkwLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkxOnN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX2lwdGZzX2Zpbmkodm9pZClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjU4LjAxNjczODU0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIzOTY0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQLVRGUyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBmb2N1c2VzIG9uIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLiBBbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGVyZSBhcmUgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBhIG1vZHVsZSBsaWtlIHRoaXMuIEkgY2FuIHNlZSB0aGUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgaW4gYGlwdGZzX21vZGVfY2JzYDogYGlwdGZzX2dldF9pbm5lcl9tdHVgLCBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBgaXB0ZnNfdXNlcl9pbml0YCwgYGlwdGZzX2Nsb25lX3N0YXRlYCwgYGlwdGZzX2luaXRfc3RhdGVgLCBgaXB0ZnNfZGVzdHJveV9zdGF0ZWAsIGBpcHRmc19zYV9sZW5gLCBhbmQgYGlwdGZzX2NvcHlfdG9fdXNlcmAuIFJpZ2h0IGF3YXksIGBpcHRmc19pbnB1dGAgaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBhcyB0aGUgcHJpbWFyeSBpbnB1dCBlbnRyeSBwb2ludC4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCBhbiBleWUgb24gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBhcyB3ZWxsLlxuXG5UaGUgY29uZmlndXJhdGlvbiBzeW1ib2wgaXMgYFhGUk1fSVBURlNgLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiB0aGUgSVAtVEZTIHJlYXNzZW1ibHksIHNwZWNpZmljYWxseSB0aGUgaW5jb3JyZWN0IGNhbmNlbGxhdGlvbiBvZiB0aGUgZHJvcCB0aW1lciwgd2hpY2ggY291bGQgY2F1c2UgaXNzdWVzIHdpdGggdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCBpbiB0aGUgY29yZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbi5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBBaCwgaXQgKmRlcGVuZHMgb24qIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZS4gTWVhbmluZyBgWEZSTWAgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBYRlJNX0lQVEZTYCB0byB3b3JrLiBTaW5jZSBgWEZSTWAgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgdXN1YWxseSBlbmFibGVkLCBpdCB3b24ndCBiZSBhbiBpc3N1ZS4gU28sIGNvbmZpcm1pbmcgYFhGUk1fSVBURlNgIGlzIGFsbCBJIG5lZWQgdG8gcmV0dXJuLCBnaXZlbiBpdCBpbXBsaWVzIHRoZSBuZWNlc3NhcnkgdW5kZXJseWluZyBgWEZSTWAuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdsbCBxdWlja2x5IGdsYW5jZSBhcm91bmQgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MsIGJ1dCBJIGRvbid0IHNlZSBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MTowNS4wNDA3MDY1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2ODY2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC94ZnJtL0tjb25maWctOC1cXHRzZWxlY3QgR1JPX0NFTExTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTMyPWNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5uZXQveGZybS9LY29uZmlnOjM0OlxcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFxcdTAwMjZcXHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cXHRcXHRIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTQzPWNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbm5ldC94ZnJtL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElQVjZcXG5uZXQveGZybS9LY29uZmlnLTQ2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy01NC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTYxPWNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG5uZXQveGZybS9LY29uZmlnOjc0OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubmV0L3hmcm0vS2NvbmZpZy03NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXFx0Ym9vbCBcXFwiUEZfS0VZIE1JR1JBVEVcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMjc6XFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xNDE9Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxNDM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy0xNDQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MTowNS4wODgzOTcyNjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg1NDI5ODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IHRvIHRlc3QgaXQgZWZmZWN0aXZlbHkuIEl0J3MgY2xlYXIgdGhhdCBgWEZSTV9JUFRGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIFNpbmNlIGBYRlJNX0lQVEZTYCBkZXBlbmRzIG9uIGJvdGggYFhGUk1gIGFuZCwgaW5kaXJlY3RseSwgYElORVRgLCBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aG9zZSBicm9hZGVyIGNvbmZpZ3MgZXhwbGljaXRseS4gYFhGUk1fSVBURlNgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS5cblxuVG8gZ3VpZGUgbXkgZnV6emluZyBlZmZvcnRzLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIHRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHRoYXQgd2FycmFudHMgcmlnb3JvdXMgdGVzdGluZy4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wiaXB0ZnNfaW5wdXRcIiwgXCJpcHRmc19vdXRwdXRfY29sbGVjdFwiXWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aGVyZSB0aGlzIGJ1ZyBpbnZvbHZpbmcgdGhlIGRyb3AgdGltZXIgYW5kIHJlYXNzZW1ibHkgaXMgb2NjdXJyaW5nLiBUaGF0IHJlYXNzZW1ibHkgYW5kIHJlb3JkZXIgd2luZG93IGFyZSBjcnVjaWFsIGhlcmUuIFNvLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZGF0YSBwYXRocywgaW5wdXQgYW5kIG91dHB1dCwgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGF0LlxuXG5GaW5hbGx5LCBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFtcIlhGUk1fSVBURlNcIl1gLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIElQc2VjJ3MgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBkcm9wIHRpbWVyIGNhbmNlbGxhdGlvbiBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHkgd2hpY2ggcG90ZW50aWFsbHkgaW1wYWN0cyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLCBub3Qgc29tZSBtaW5vciBjb3NtZXRpYyB0d2Vhay4gU28sIGVuYWJsaW5nIGBYRlJNX0lQVEZTYCBpcyB0aGUgY29ycmVjdCBwYXRoIGZvciBleGVyY2lzaW5nIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDQsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjExLjk0MjY5ODg2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDc0MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB3aGVyZSB0aGUgZHJvcCB0aW1lciB3YXMgaW5jb3JyZWN0bHkgY2FuY2VsbGVkIGR1cmluZyBwYWNrZXQgcmVhc3NlbWJseSwgd2hpY2ggY291bGQgYWZmZWN0IHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBJUC1URlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjEyLjAyMDc3OTEyM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExMTQ4ODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjEyLjAyMTQ2NDg0M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTEwNzk3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBjYW5jZWxsaW5nIGEgdGltZXIgKGB4dGZzLVxcdTAwM2Vkcm9wX3RpbWVyYCkgaW4gYF9faXB0ZnNfcmVhc3NlbV9kb25lKClgLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIHRpbWVyIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxuIHtcbiBcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4gXG4tXHQvKiBXZSBkb24ndCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi9cbi1cdGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuKyAgICAgICAgLypcbisgICAgICAgICAqIFRoZSBkcm9wIHRpbWVyIGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBMb2NraW5nIG1ha2VzXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXG4rICAgICAgICAgKi9cbisgICAgICAgIGlmICgheHRmcy1cdTAwM2V3X3NhdmVkbGVuKVxuKyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKTtcbiBcdGlmIChmcmVlKVxuIFx0XHRrZnJlZV9za2IoeHRmcy1cdTAwM2VyYV9uZXdza2IpO1xuIFx0eHRmcy1cdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDE6MTIuMDIxNDY2MDIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTEyNzE4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGltZXIgQ2FuY2VsbGF0aW9uIGluIGB4ZnJtX2lwdGZzLmNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19pcHRmc19yZWFzc2VtX2RvbmVgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSByZWdhcmRpbmcgYSB0aW1lci4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgY29uZGl0aW9uYWwgZm9yIHdoZW4gd2UgYXR0ZW1wdCB0byBjYW5jZWwgdGhlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKWAuIFRoZSBhZGRpdGlvbiBvZiBgaWYgKCF4dGZzLVx1MDAzZXdfc2F2ZWRsZW4pYCBhcm91bmQgdGhlIHRpbWVyIGNhbmNlbGxhdGlvbiBpcyB0aGUgY29yZSBvZiBpdC5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBsaWtlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1c2FnZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBJdCBsb29rcyBwdXJlbHkgbGlrZSBhIHRpbWVyIGNhbmNlbGxhdGlvbiBjb25kaXRpb24gYmVpbmcgcmVmaW5lZC4gXG5cblRoYXQgYmVpbmcgc2FpZCwgYmVjYXVzZSBpdCBpcyBkZWFsaW5nIHdpdGggYSB0aW1lciwgYW5kIHRpbWVycyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgY29ycmVjdG5lc3MgaW4gbmV0d29ya2luZyBjb2RlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSB0aGlzIG1vZGlmaWNhdGlvbiBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIGZvY3VzIG9uIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgdGltZXIsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwYWNrZXQgcmVhc3NlbWJseSBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgZHJvcHBpbmcgcGFja2V0cyBvciBjYXVzaW5nIG90aGVyIGlzc3VlcyB3aXRoIHRoaXMgY29uZGl0aW9uYWwgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDE6MTYuNTMyNzQxMTAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg4NDY2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pcHRmc19yZWFzc2VtX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MTc9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTgte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XFx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMC19XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzI2PXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03Mjcte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XFx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgZmFsc2UpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MToxNi44MDE1OTMzMjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMDY0Nzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uY2VybmluZyB0aGUgVGltZXIgQ2FuY2VsbGF0aW9uIExvZ2ljIFVwZGF0ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzICplbnRpcmVseSogb24gaG93IHRoZSB0aW1lciBjYW5jZWxsYXRpb24gd29ya3MuIFRoYXQncyB0aGUgb25seSB0aGluZyB0aGF0J3MgYmVpbmcgdG91Y2hlZCBpbiB0aGlzIHJldmlzaW9uLiBJdCdzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIEknbSBhc3Nlc3NpbmcgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSByaXNrIG9mIGFjY2Vzc2luZyBtZW1vcnkgdGhhdCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZC4gVGhhdCdzIGEgY29yZSBjb25jZXJuLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgSSBkb24ndCBiZWxpZXZlIHRoaXMgaXMgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoYXQgYXNzdW1wdGlvbiBhcyB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBtZW1vcnkgdW5pbml0aWFsaXplZCBpc3N1ZXMsIHRoZXJlZm9yZSBLTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGlzIGNoYW5nZS4gV2UgYXJlIG9ubHkgZm9jdXNlZCBvbiB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjIxLjEzMjI0NDc4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 07:38:07 +0000 UTC FinishedAt: 2026-08-24 07:41:23 +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": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS" ], "series_id": "b17952db-50c4-4cbd-aab0-b9493487ebdf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_input", "iptfs_output_collect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IHdoZXJlIHRoZSBkcm9wIHRpbWVyIHdhcyBpbmNvcnJlY3RseSBjYW5jZWxsZWQgZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5LCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExY2RmNzliOWZhNjdlY2YwYjFhYzBhYzJlMmJlYWI4ZTZiNzY5MDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwNzo0MDowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICYjNDM7Njk5LDEyIEBAIHN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbiB7XG4gXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xuIFxuLVx0LyogV2UgZG9uJiMzOTt0IGNhcmUgaWYgaXQgd29ya3MgbG9ja2luZyB0YWtlcyBjYXJlIG9mIHRoaW5ncyAqL1xuLVx0aHJ0aW1lcl90cnlfdG9fY2FuY2VsKFx1MDAyNnh0ZnMtXHUwMDNlZHJvcF90aW1lcik7XG4mIzQzOyAgICAgICAgLypcbiYjNDM7ICAgICAgICAgKiBUaGUgZHJvcCB0aW1lciBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gTG9ja2luZyBtYWtlc1xuJiM0MzsgICAgICAgICAqIGEgZmFpbGVkIGNhbmNlbCBoYXJtbGVzcy5cbiYjNDM7ICAgICAgICAgKi9cbiYjNDM7ICAgICAgICBpZiAoIXh0ZnMtXHUwMDNld19zYXZlZGxlbilcbiYjNDM7ICAgICAgICAgICAgICAgIGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuIFx0aWYgKGZyZWUpXG4gXHRcdGtmcmVlX3NrYih4dGZzLVx1MDAzZXJhX25ld3NrYik7XG4gXHR4dGZzLVx1MDAzZXJhX25ld3NrYiA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19pbnB1dCYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB3aGVyZSB0aGUgZHJvcCB0aW1lciB3YXMgaW5jb3JyZWN0bHkgY2FuY2VsbGVkIGR1cmluZyBwYWNrZXQgcmVhc3NlbWJseSwgd2hpY2ggY291bGQgYWZmZWN0IHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBJUC1URlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKaW5kZXggNTk3YWVkZWFjMjZlYi4uYzBkNzEyYjU5NGEzNyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwpAQCAtNjk5LDggJiM0Mzs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKQogewogCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3h0ZnMtJmd0O2Ryb3BfbG9jayk7CiAKLQkvKiBXZSBkb24mIzM5O3QgY2FyZSBpZiBpdCB3b3JrcyBsb2NraW5nIHRha2VzIGNhcmUgb2YgdGhpbmdzICovCi0JaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZhbXA7eHRmcy0mZ3Q7ZHJvcF90aW1lcik7CiYjNDM7ICAgICAgICAvKgomIzQzOyAgICAgICAgICogVGhlIGRyb3AgdGltZXIgYWxzbyBkcml2ZXMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIExvY2tpbmcgbWFrZXMKJiM0MzsgICAgICAgICAqIGEgZmFpbGVkIGNhbmNlbCBoYXJtbGVzcy4KJiM0MzsgICAgICAgICAqLwomIzQzOyAgICAgICAgaWYgKCF4dGZzLSZndDt3X3NhdmVkbGVuKQomIzQzOyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKTsKIAlpZiAoZnJlZSkKIAkJa2ZyZWVfc2tiKHh0ZnMtJmd0O3JhX25ld3NrYik7CiAJeHRmcy0mZ3Q7cmFfbmV3c2tiID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBJUCBGcmFnbWVudGF0aW9uIENvZGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB0aGUgSVBzZWMgZnJhZ21lbnRhdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGZyYWdtZW50IHJlYXNzZW1ibHkgZnVuY3Rpb25hbGl0eS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIHRoZSBgX19pcHRmc19yZWFzc2VtX2RvbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZmlsZSBpdHNlbGYsIGFuZCB0aGUgd2F5IHRoZSByZWFzc2VtYmx5IGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBtb2RpZmljYXRpb24gaXMgcmVsYXRlZCB0byB0aGUgYGRyb3BfdGltZXJgIGxvZ2ljLCBvbmx5IGNhbmNlbGxpbmcgaXQgaWYgYHh0ZnMtJmd0O3dfc2F2ZWRsZW5gIGlzIHplcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEl04oCZcyBsaWtlbHkgYSBzdWJ0bGUgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRyb3BwZWQgZnJhZ21lbnRzIGFuZCB0aW1lb3V0IHNjZW5hcmlvcyBkdXJpbmcgcmVhc3NlbWJseS4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlZGdlIGNhc2VzIHRoYXQgdGhlIG9yaWdpbmFsIGxvZ2ljIG1pZ2h0IGhhdmUgaGFkLCBhbmQgaG93IHRoaXMgbmV3IGNvbmRpdGlvbmFsIGJlaGF2aW9yIGFkZHJlc3NlcyB0aGVtLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIHdpdGhpbiB0aGUgcmVhc3NlbWJseSBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pcHRmc19yZWFzc2VtX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2OTg6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcxNz1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MjY9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgZml4IGlzIGJ1cmllZCBkZWVwIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQga2VybmVsIG9wdGlvbnMgb3IgbW9kdWxlcyAqYWN0aXZhdGUqIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgdG8gZXZlbiBiZWdpbiBjb21wcmVoZW5kaW5nIHRoZSBidWcmIzM5O3MgY29udGV4dCBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgd2hhdCBjb25maWcgdmFyaWFibGVzIGFyZSB0aWVkIHRvIHRoaXMgZmlsZSB0byBzZWUgaG93IGl0JiMzOTtzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gdGhlIGFjdGl2ZSBjb25maWcgaXMgY3VycmVudGx5IHNldCB0byBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBzdGFydCB1bnBhY2tpbmcgdGhpcy4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggYSBjb25maWcgbGlrZSB0aGlzLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogaXQgdG91Y2hlcy4gVGhpcyBtZWFucyBkcmlsbGluZyBkb3duIGludG8gaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgYFhGUk1fSVBURlNgIGJlaW5nIGFjdGl2ZS4gQSBmdWxsIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMga25vd2luZyB0aGUga25vY2stb24gZWZmZWN0cywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgaW1wb3J0YW50bHksIHdoYXQgYXJlYXMgb2YgdGhlIHN5c3RlbSBhcmUgKmd1YXJhbnRlZWQqIHRvIGJlIGFjdGl2ZSBvciBkb3JtYW50IGFzIGEgcmVzdWx0IG9mIHRoaXMgc2V0dGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmN5IHRyZWUgYW5kIG1hcCB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDEwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFhGUk0gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhGUk0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0bywgd2VsbCwgZXZlcnl0aGluZyAqYXJvdW5kKiBsaW5lIDE0MSBpbiBgbmV0L3hmcm0vS2NvbmZpZ2AuIEkga25vdyB0aGUgYXJlYSwgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBvcHRpb25zLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG1heWJlIHNwb3Qgc29tZXRoaW5nIG5ldyB0aGF0JiMzOTtzIGJlZW4gYWRkZWQuIExldCYjMzk7cyBzZWUgd2hhdCBwb3BzIG91dC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IGdpdmVuIFhGUk0mIzM5O3MgY29tcGxleGl0eSwgSSYjMzk7bSBwcmVwYXJlZCBmb3IgYSBmZXcgdHdpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdFx0ICBjaGFuZ2UgdGhlaXIgYXR0YWNobWVudCBwb2ludCB0byB0aGUgSW50ZXJuZXQuICBEZXRhaWxcbiAxMzY6XHRcdCAgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBpbnRlcm5ldC1kcmFmdFxuIDEzNzpcdFx0ICBcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcdTAwM2UuXG4gMTM4Olx0XG4gMTM5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2OAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaXB0ZnMgQ29uZmlndXJhdGlvbiBhbmQgUmVhc3NlbWJseSBGdW5jdGlvbnMqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaGVyZSBpcyBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgX19pcHRmc19yZWFzc2VtX2RvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaW1wYWN0LiBBIGNyaXRpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgYGlwdGZzX3JlYXNzZW1fYWJvcnRgIGFuZCBgaXB0ZnNfcmVhc3NlbV9kb25lYCBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG9mIHRoZSBgaXB0ZnNgIHJlYXNzZW1ibHkgcHJvY2VzcyBpcyBiZWluZyBpbml0aWF0ZWQgYW5kIGZpbmFsaXplZCwgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3JlYXNzZW1fYWJvcnR8aXB0ZnNfcmVhc3NlbV9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE0OiAqIGlwdGZzX3JlYXNzZW1fYWJvcnQoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBhYm9ydGVkIGZyZWUgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNS0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTc6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxOC17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5Olx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIwLX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyMzogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjY6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzQ2PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkyNy1cdFx0LyogV2UgYXJlIGRvbmUgd2l0aCBwYWNrZXQgcmVhc3NlbWJseSEgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5Mjg6XHRcdGlwdGZzX3JlYXNzZW1fZG9uZSh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MjktXHRcdGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYih4dGZzLVx1MDAzZXgsIG5ld3NrYik7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNy1cdGlmICh4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkzODpcdFx0aXB0ZnNfcmVhc3NlbV9hYm9ydCh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKkRlZXAgRGl2ZTogYGlwdGZzX3JlYXNzZW1fY29udGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIHdlZWRzLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGRlbHZlIGludG8gdGhlIGBpcHRmc19yZWFzc2VtX2NvbnRgIGNhbGxlcnMuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgY2FsbCBncmFwaCBpbiBteSBoZWFkOyBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGlzIGNvZGUgbG9uZyBlbm91Z2ggdG8gaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBhcmVhcywgYnV0IGEgZm9ybWFsIGNoZWNrIGlzIGFsd2F5cyB0aGUgcmlnaHQgd2F5IHRvIGJlIGNlcnRhaW4uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgY29udGV4dHM/IEFyZSB0aGVyZSBhbnkgcGF0dGVybnM/IEFyZSB0aGVyZSBhcmVhcyBJIGNhbiBzZWUsIGF0IGZpcnN0IGdsYW5jZSwgdGhhdCBtaWdodCBiZSByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3Jpbmc/IEFyZSB0aGVyZSBrbm93biBpc3N1ZXMgdGhhdCBhcmUgaW1wYWN0aW5nIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IG9mIGl0IHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBjb250ZXh0IGZvciBldmFsdWF0aW5nIGl0cyBwdXJwb3NlLCBwZXJmb3JtYW5jZSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMxLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMzLSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0NS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDY6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDctXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjIyPXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODMtXHRcdGlmIChibGtvZmYgfHwgeHRmcy1cdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXHUwMDNlcmFfbmV3c2tiKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4NDpcdFx0XHRkYXRhID0gaXB0ZnNfcmVhc3NlbV9jb250KHh0ZnMsIHNlcSwgXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4NS1cdFx0XHRcdFx0XHQgIGJsa29mZiwgXHUwMDI2c3VibGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpcHRmc19pbnB1dF9vcmRlcmVkYCBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGlwdGZzX2lucHV0X29yZGVyZWRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBpcHRmc19yZWFzc2VtX2NvbnRgLiBUaGF0JiMzOTtzIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbiwgYW5kIGl0JiMzOTtzIGEga2V5IG9uZSB0byB1bmRlcnN0YW5kLiBTaW5jZSBJJiMzOTttIGtuZWUtZGVlcCBpbiB0aGlzIGNvZGUsIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgYGlwdGZzX2lucHV0X29yZGVyZWRgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBgaXB0ZnNfcmVhc3NlbV9jb250YCBpcyBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGRpcmVjdGlvbiB3aWxsIHJlYWxseSBoZWxwIHdpdGggZGVidWdnaW5nIGFuZCBhbnkgZnV0dXJlIG1vZGlmaWNhdGlvbnMuIFJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgY2FsbHMgdG8gYGlwdGZzX2lucHV0X29yZGVyZWRgIGFuZCBzZWUgd2hhdCB0aGF0IGlsbHVtaW5hdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19pbnB1dF9vcmRlcmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDc9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE1LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMTY6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE3LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjcyPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcwMy1cdFx0XHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MDQ6XHRcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDUtXHRcdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTcyMT1zdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDQtXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NTpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnB1dCBGbG93KioKCk9rYXksIHNvIGBpcHRmc19pbnB1dGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGlucHV0IGluIHRoaXMgc3lzdGVtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpjYWxsaW5nKiBgaXB0ZnNfaW5wdXRgLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgYWJvdXQgdGhlIGtpbmQgb2YgZGF0YSBiZWluZyBmZWQgaW50byBpdCwgdGhlIGV4cGVjdGVkIGZvcm1hdCwgYW5kIHRoZSBvdmVyYWxsIGlucHV0IHBpcGVsaW5lLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgd2hlcmUgdGhlc2UgaW5wdXRzIGFyZSBvcmlnaW5hdGluZyBhbmQgaG93IHRoZXkgYXJlIHByb2Nlc3NlZCBiZWZvcmUgcmVhY2hpbmcgYGlwdGZzX2lucHV0YC4gVGhpcyBpcyB0aGUgbW9zdCBjcnVjaWFsIHN0ZXAgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTU3OD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTkyLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MzogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTk0LSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAzLVx0XHRcdFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDc9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OTctXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5OTg6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTk5LVx0XHRcdFx0XHRcdCAgICAgIHJlbWFpbmluZyk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMTYtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDE3Olx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMTgtXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjE2OiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNy0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIzLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTQ3OD1zdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX3NoaWZ0cyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjIzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MjQ6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfcmVvcmRlcihzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjUtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzI9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzAzLVx0XHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwNDpcdFx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcwNS1cdFx0fVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MTI6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzEzLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyMTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzktXHRzcGluX2xvY2soXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDA6XHRpcHRmc19pbnB1dF9yZW9yZGVyKHh0ZnMsIHNrYiwgXHUwMDI2bGlzdCwgXHUwMDI2ZnJlZWxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDEtXHRzcGluX3VubG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDQtXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc0NTpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDYtXHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVx0LmdldF9pbm5lcl9tdHUgPSBpcHRmc19nZXRfaW5uZXJfbXR1LFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NzM6XHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LVx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyB0aGUgRGF0YSBJbnB1dCBQYXRoIGluIHRoZSBJUFRGUyBTeXN0ZW0qKgoKT2theSwgc28gYGlwdGZzX2lucHV0YCBoYXMgYmVlbiByZWdpc3RlcmVkLCBJIHJlbWVtYmVyIHRoYXQsIGFzIHRoZSBgLmlucHV0YCBoYW5kbGVyIHdpdGhpbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGF0YSBmbG93LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IHdoZXJlIGRvZXMgdGhpcyBgaXB0ZnNfbW9kZV9jYnNgIHN0cnVjdHVyZSBhY3R1YWxseSAqZ2V0KiB1c2VkPyBLbm93aW5nIHRoYXQgd2lsbCBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGlucHV0IHdpdGhpbiB0aGlzIElQVEZTIGNvbnRleHQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGluZ2VzdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZGUuIFRpbWUgdG8gdHJhY2UgdGhhdCBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19tb2RlX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjcyOD1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzYzLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc3OD1zdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4My1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzg0Olx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg1LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQc2VjIElQLVRGUyBJbnB1dCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXB0ZnNfaW5wdXRgIGhlcmUuIEl0JiMzOTtzIHRoZSBpbnB1dCBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgYFhGUk1fTU9ERV9JUFRGU2AsIHdoaWNoIGlzIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0LiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZml4IGZvciB0aGUgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB0byBiZSBwcmVjaXNlLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdoZXJlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKWAgd2FzIGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQmIzM5O3MgYSBwcm9ibGVtIGJlY2F1c2UgdGhlIGRyb3AgdGltZXIgaXNuJiMzOTt0IGp1c3QgZm9yIGRyb3BwaW5nIHBhY2tldHM7IGl0IGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBTbywgY2FuY2VsbGF0aW9uIHNob3VsZCBiZSBjb25kaXRpb25hbCwgb25seSBpZiBgIXh0ZnMtJmd0O3dfc2F2ZWRsZW5gLiBHb3QgaXQuCgpUaGlzIGNlcnRhaW5seSBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgYFhGUk1fSVBURlNgIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkIHdoZW4gdGVzdGluZy4gTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBsaWtlbHkgYmUgYXJvdW5kIHRoZSBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAgc3ltYm9scy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGV4cGxvcmUgdGhvc2UgdGhvcm91Z2hseS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHNhbWUgY29kZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19vdXRwdXRfY29sbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MTgxMj1zdGF0aWMgaW50IGlwdGZzX2lzX3Rvb19iaWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG10dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzNi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODM3OnN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzOC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzczLVx0LmlucHV0ID0gaXB0ZnNfaW5wdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NDpcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc1LVx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODgKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBSZWFzc2VtYmx5IExvZ2ljKioKCk9rYXksIHNvIHRoZSBvdXRwdXQgaGFuZGxlciBpcyBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBnb3QgaXQuIFRoZSBidWcmIzM5O3MgaW4gcmVhc3NlbWJseSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGxvb2tpbmcgYXQgdGhlIGlucHV0IHBhdGguIGBpcHRmc19pbnB1dGAgaXMgdGhlIGVudHJ5IHBvaW50IHRoZXJlLCByaWdodD8gRmlyc3QsIEkgd2FzIHRoaW5raW5nLCAmIzM0O0lzIGBpcHRmc19pbnB1dGAgc3RhdGljPyYjMzQ7IFllYWgsIGl0IGlzLiBCdXQgaG9sZCBvbiwgdGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zICpjYW4qIGdldCBpbmxpbmVkLCBhbmQgdGhvc2UgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9scywgbWFraW5nIGRlYnVnZ2luZyB0b3VnaGVyLiBMZXQgbWUgZG91YmxlLWNoZWNrOiBgc3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBBaGEhIEl0ICppcyogc3RhdGljISBCdXQuLi4gaXQmIzM5O3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gSWYgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBjYW4mIzM5O3QgY29tcGxldGVseSBpbmxpbmUgaXQsIHJpZ2h0PyBJdCAqaGFzKiB0byBoYXZlIGEgZGlzdGluY3QgYWRkcmVzcy4gU28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3Mgc3RpbGwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBPciwgSSBjYW4gbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2Agb3IganVzdCB1c2UgYGlwdGZzX2lucHV0YCBzaW5jZSBpdCYjMzk7cyBhbiBhZGRyZXNzLXRha2VuIHN0YXRpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgaW4gY2FzZS4gSSYjMzk7bGwgY2hlY2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NQoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWZpbmluZyB0aGUgQXBwcm9hY2g6IEEgTmV3IFJlZ2V4IFN0cmF0ZWd5KioKCkFscmlnaHQsIEkmIzM5O3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBwYXR0ZXJuIGZvciBhIGJpdCBub3csIGFuZCB3aGlsZSB0aGUgY3VycmVudCByZWdleCBpcyAqY2xvc2UqLCBJJiMzOTttIHNlbnNpbmcgaXQmIzM5O3Mgbm90IHF1aXRlIG9wdGltYWwuIFRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgaXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIG1pc3Mgc29tZSBlZGdlIGNhc2VzIG9yLCB3b3JzZSwgYmVjb21lIG92ZXJseSBwZXJtaXNzaXZlIGFuZCBpbnRyb2R1Y2UgZmFsc2UgcG9zaXRpdmVzIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgc29tZXRoaW5nIG1vcmUgcm9idXN0LCBtb3JlIHByZWNpc2UuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY29tcGxldGVseSByZWNvbnNpZGVyIHRoZSBhcHByb2FjaC4gTGV0JiMzOTtzIHNjcmFwIHdoYXQgd2UgaGF2ZSBhbmQgdHJ5IGJ1aWxkaW5nIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBncm91bmQgdXAsIGtlZXBpbmcgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIGNhcHR1cmUgdGhlIG51YW5jZSBpbiB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBzb21lIGh5cG90aGVzZXMgSSBjYW4gd29yayB3aXRoLiBIb3BlZnVsbHksIHRoaXMgbmV4dCB2ZXJzaW9uIHdpbGwgYmUgdGhlIGNoYXJtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwqPyBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHhmcm1faXB0ZnMuY2AgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBvZiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTGV0JiMzOTtzIGdldCBzdHJhaWdodCB0byB0aGUgcG9pbnQg4oCTIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgY29tcGxldGUgZnVuY3Rpb24gbGlzdGluZy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBzY29wZSBvZiB3aGF0IGB4ZnJtX2lwdGZzLmNgIGlzIHJlc3BvbnNpYmxlIGZvci4gSSYjMzk7bSBmb2N1c2luZyBvbiBhIGhpZ2gtbGV2ZWwgY29tcHJlaGVuc2lvbiBvZiB0aGUgaW1wbGVtZW50YXRpb247IGEgZnVsbCBjb2RlIHJldmlldyBpcyBub3QgbmVjZXNzYXJ5IGF0IHRoaXMgdGltZSwgYnV0IGhhdmluZyBhIHJlZmVyZW5jZSBmb3IgZWFjaCBkZWZpbmVkIGZ1bmN0aW9uIGhlbHBzLiBUaGUgbGlzdGluZyBzaG91bGQgc2VydmUgYXMgYSBzb2xpZCBiYXNlIGZyb20gd2hpY2ggSSBjYW4gZHJpbGwgZG93biBmdXJ0aGVyIGludG8gbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtejAtOV9dJiM0MzsgKSYjNDM7W2EtejAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTE0OT1zdHJ1Y3QgeGZybV9pcHRmc19kYXRhIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgwOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mi1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg3LSNpZmRlZiBUUkFDRVBPSU5UU19FTkFCTEVEXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg4OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90byhzdHJ1Y3QgaXBoZHIgKmlwaClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTQtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTk1OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90b19zZXEoc3RydWN0IGlwaGRyICppcGgpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTk2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIxLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIyMjpzdGF0aWMgdTY0IF9fZXNwX3NlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMy17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdGZzX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCB1MzIgbGVuLCBib29sIGwzcmVzdilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI5NzpzdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzE1PXN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzMzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjMzNDpzdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNS1cdFx0XHRcdFx0c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGspXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozODA6c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4MS1cdFx0XHRcdCAgICAgdTMyIG9mZnNldClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDA4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQwOTpzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMC1cdFx0XHRcdCAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1ODpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktXHRcdFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01Nzg9aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAzLVx0XHRcdFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE5OnN0YXRpYyB1MzIgX19pcHRmc19pcGhsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjIwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjM4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYzOTpzdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1OTpzdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjYwLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY5ODpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNzpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNjpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03Mjcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDUtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzQ2OnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ3LVx0XHRcdCAgICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTQ2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NzpzdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTQ4LVx0XHRcdFx0ICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpza2JzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzA0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMDU6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMDYte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE4LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTk6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjAtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjQtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMyNTpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3MS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzcyOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzczLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwMTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDI3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0Mjg6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyOS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0Nzg6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc5LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjI0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjI1LVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjcxLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2NzI6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIwLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjE6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIyLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3NC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzc1OnN0YXRpYyBib29sIGlwdGZzX2VucXVldWUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzc2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc5OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzk5OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODEyOnN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MTMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4Mzc6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM4LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTkzNS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxOTM2OnN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9wcmVwYXJlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYmxrb2ZmKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5Mzcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTY3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjAwMC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDAxOnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDk3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwOTg6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwOTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNTgtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE1OTpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE2MC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxODktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE5MDpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxOTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMjU6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI2LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3NS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzc2OnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3Ny17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQyMjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjY6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY3LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ5MC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDkxOnN0YXRpYyB1MzIgX19pcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0OTIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTA4LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MDk6c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI3LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1Mjg6c3RhdGljIGludCBpcHRmc191c2VyX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI5LVx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU4NC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB0ZnNfc2FfbGVuKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1ODYte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA0LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDU6c3RhdGljIGludCBpcHRmc19jb3B5X3RvX3VzZXIoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NDMtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjY0NDpzdGF0aWMgdm9pZCBfX2lwdGZzX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY0NS1cdFx0XHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY2OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjY5OnN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NzAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzA5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3MTA6c3RhdGljIGludCBpcHRmc19pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3MTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Mjg6c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3ODpzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc5LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc5MC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkxOnN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX2lwdGZzX2Zpbmkodm9pZClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAtVEZTIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgZm9jdXNlcyBvbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gQWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhlcmUgYXJlIHN0YXRpYywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBtb2R1bGUgbGlrZSB0aGlzLiBJIGNhbiBzZWUgdGhlIGNhbGxiYWNrcyByZWdpc3RlcmVkIGluIGBpcHRmc19tb2RlX2Nic2A6IGBpcHRmc19nZXRfaW5uZXJfbXR1YCwgYGlwdGZzX2lucHV0YCwgYGlwdGZzX291dHB1dF9jb2xsZWN0YCwgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCwgYGlwdGZzX3VzZXJfaW5pdGAsIGBpcHRmc19jbG9uZV9zdGF0ZWAsIGBpcHRmc19pbml0X3N0YXRlYCwgYGlwdGZzX2Rlc3Ryb3lfc3RhdGVgLCBgaXB0ZnNfc2FfbGVuYCwgYW5kIGBpcHRmc19jb3B5X3RvX3VzZXJgLiBSaWdodCBhd2F5LCBgaXB0ZnNfaW5wdXRgIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFzIHRoZSBwcmltYXJ5IGlucHV0IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCBhbiBleWUgb24gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBhcyB3ZWxsLgoKVGhlIGNvbmZpZ3VyYXRpb24gc3ltYm9sIGlzIGBYRlJNX0lQVEZTYC4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgaW4gdGhlIElQLVRGUyByZWFzc2VtYmx5LCBzcGVjaWZpY2FsbHkgdGhlIGluY29ycmVjdCBjYW5jZWxsYXRpb24gb2YgdGhlIGRyb3AgdGltZXIsIHdoaWNoIGNvdWxkIGNhdXNlIGlzc3VlcyB3aXRoIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBTbywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgaW4gdGhlIGNvcmUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGl0ICpkZXBlbmRzIG9uKiBgWEZSTWAuIFRoYXQgbWFrZXMgc2Vuc2UuIE1lYW5pbmcgYFhGUk1gICptdXN0KiBiZSBlbmFibGVkIGZvciBgWEZSTV9JUFRGU2AgdG8gd29yay4gU2luY2UgYFhGUk1gIGlzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIHVzdWFsbHkgZW5hYmxlZCwgaXQgd29uJiMzOTt0IGJlIGFuIGlzc3VlLiBTbywgY29uZmlybWluZyBgWEZSTV9JUFRGU2AgaXMgYWxsIEkgbmVlZCB0byByZXR1cm4sIGdpdmVuIGl0IGltcGxpZXMgdGhlIG5lY2Vzc2FyeSB1bmRlcmx5aW5nIGBYRlJNYC4KCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgcXVpY2tseSBnbGFuY2UgYXJvdW5kIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnLTgtXHRzZWxlY3QgR1JPX0NFTExTXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9NDM9Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElQVjZcbm5ldC94ZnJtL0tjb25maWctNDYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNTQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBYRlJNXG5uZXQveGZybS9LY29uZmlnLTY0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubmV0L3hmcm0vS2NvbmZpZy03NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyNi1cdGJvb2wgXCYjMzQ7UEZfS0VZIE1JR1JBVEVcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTI3Olx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTEyOC1cdHNlbGVjdCBYRlJNX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxNDM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTQ0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE0NAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IHRvIHRlc3QgaXQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYFhGUk1fSVBURlNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBTaW5jZSBgWEZSTV9JUFRGU2AgZGVwZW5kcyBvbiBib3RoIGBYRlJNYCBhbmQsIGluZGlyZWN0bHksIGBJTkVUYCwgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IHRob3NlIGJyb2FkZXIgY29uZmlncyBleHBsaWNpdGx5LiBgWEZSTV9JUFRGU2AgaXMgdGhlIG9ubHkgb25lIHRoYXQgcmVhbGx5IG1hdHRlcnMgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLgoKVG8gZ3VpZGUgbXkgZnV6emluZyBlZmZvcnRzLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIGlzIGRlZmluaXRlbHkgYW4gYXJlYSB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIHRlc3RpbmcuIE15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O2lwdGZzX2lucHV0JiMzNDssICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0O11gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpcyBidWcgaW52b2x2aW5nIHRoZSBkcm9wIHRpbWVyIGFuZCByZWFzc2VtYmx5IGlzIG9jY3VycmluZy4gVGhhdCByZWFzc2VtYmx5IGFuZCByZW9yZGVyIHdpbmRvdyBhcmUgY3J1Y2lhbCBoZXJlLiBTbywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGRhdGEgcGF0aHMsIGlucHV0IGFuZCBvdXRwdXQsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhhdC4KCkZpbmFsbHksIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFsmIzM0O1hGUk1fSVBURlMmIzM0O11gLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIElQc2VjJiMzOTtzIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQsIHNwZWNpZmljYWxseSB0aGUgZHJvcCB0aW1lciBjYW5jZWxsYXRpb24gZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5IHdoaWNoIHBvdGVudGlhbGx5IGltcGFjdHMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYywgbm90IHNvbWUgbWlub3IgY29zbWV0aWMgdHdlYWsuIFNvLCBlbmFibGluZyBgWEZSTV9JUFRGU2AgaXMgdGhlIGNvcnJlY3QgcGF0aCBmb3IgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB0ZnNfaW5wdXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X2NvbGxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNzo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA3OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExY2RmNzliOWZhNjdlY2YwYjFhYzBhYzJlMmJlYWI4ZTZiNzY5MDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAwNzo0MDowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi5jMGQ3MTJiNTk0YTM3IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC02OTksOCAmIzQzOzY5OSwxMiBAQCBzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpCiB7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7eHRmcy0mZ3Q7ZHJvcF9sb2NrKTsKIAotCS8qIFdlIGRvbiYjMzk7dCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi8KLQlocnRpbWVyX3RyeV90b19jYW5jZWwoJmFtcDt4dGZzLSZndDtkcm9wX3RpbWVyKTsKJiM0MzsgICAgICAgIC8qCiYjNDM7ICAgICAgICAgKiBUaGUgZHJvcCB0aW1lciBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gTG9ja2luZyBtYWtlcwomIzQzOyAgICAgICAgICogYSBmYWlsZWQgY2FuY2VsIGhhcm1sZXNzLgomIzQzOyAgICAgICAgICovCiYjNDM7ICAgICAgICBpZiAoIXh0ZnMtJmd0O3dfc2F2ZWRsZW4pCiYjNDM7ICAgICAgICAgICAgICAgIGhydGltZXJfdHJ5X3RvX2NhbmNlbCgmYW1wO3h0ZnMtJmd0O2Ryb3BfdGltZXIpOwogCWlmIChmcmVlKQogCQlrZnJlZV9za2IoeHRmcy0mZ3Q7cmFfbmV3c2tiKTsKIAl4dGZzLSZndDtyYV9uZXdza2IgPSBOVUxMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaW1lciBDYW5jZWxsYXRpb24gaW4gYHhmcm1faXB0ZnMuY2AqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19pcHRmc19yZWFzc2VtX2RvbmVgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGEgdGltZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCBmb3Igd2hlbiB3ZSBhdHRlbXB0IHRvIGNhbmNlbCB0aGUgYGhydGltZXJfdHJ5X3RvX2NhbmNlbCgmYW1wO3h0ZnMtJmd0O2Ryb3BfdGltZXIpYC4gVGhlIGFkZGl0aW9uIG9mIGBpZiAoIXh0ZnMtJmd0O3dfc2F2ZWRsZW4pYCBhcm91bmQgdGhlIHRpbWVyIGNhbmNlbGxhdGlvbiBpcyB0aGUgY29yZSBvZiBpdC4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHVzYWdlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEl0IGxvb2tzIHB1cmVseSBsaWtlIGEgdGltZXIgY2FuY2VsbGF0aW9uIGNvbmRpdGlvbiBiZWluZyByZWZpbmVkLiAKClRoYXQgYmVpbmcgc2FpZCwgYmVjYXVzZSBpdCBpcyBkZWFsaW5nIHdpdGggYSB0aW1lciwgYW5kIHRpbWVycyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgY29ycmVjdG5lc3MgaW4gbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBtb2RpZmljYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgdGltZXIsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwYWNrZXQgcmVhc3NlbWJseSBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGRyb3BwaW5nIHBhY2tldHMgb3IgY2F1c2luZyBvdGhlciBpc3N1ZXMgd2l0aCB0aGlzIGNvbmRpdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pcHRmc19yZWFzc2VtX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2OTg6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcxNz1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MjY9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MwoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25jZXJuaW5nIHRoZSBUaW1lciBDYW5jZWxsYXRpb24gTG9naWMgVXBkYXRlKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzICplbnRpcmVseSogb24gaG93IHRoZSB0aW1lciBjYW5jZWxsYXRpb24gd29ya3MuIFRoYXQmIzM5O3MgdGhlIG9ubHkgdGhpbmcgdGhhdCYjMzk7cyBiZWluZyB0b3VjaGVkIGluIHRoaXMgcmV2aXNpb24uIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gYXNzZXNzaW5nIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmlzayBvZiBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgY29yZSBjb25jZXJuLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgSSBkb24mIzM5O3QgYmVsaWV2ZSB0aGlzIGlzIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2UgY2FuIHByb2NlZWQgd2l0aCB0aGF0IGFzc3VtcHRpb24gYXMgd2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggbWVtb3J5IHVuaW5pdGlhbGl6ZWQgaXNzdWVzLCB0aGVyZWZvcmUgS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBjaGFuZ2UuIFdlIGFyZSBvbmx5IGZvY3VzZWQgb24gdGhlIGNhbmNlbGxhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cdTAwM2Vkcm9wX3RpbWVyYCkgaW4gYF9faXB0ZnNfcmVhc3NlbV9kb25lKClgLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIHRpbWVyIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjAyLjM4OTg1NDczM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzQyNDIzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGNhbmNlbGxpbmcgYSB0aW1lciAoYHh0ZnMtXFx1MDAzZWRyb3BfdGltZXJgKSBpbiBgX19pcHRmc19yZWFzc2VtX2RvbmUoKWAuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlIHJlbGF0ZWQgdG8gdGltZXIgbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGFjY2Vzc2VkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IHdoZXJlIHRoZSBkcm9wIHRpbWVyIHdhcyBpbmNvcnJlY3RseSBjYW5jZWxsZWQgZHVyaW5nIHBhY2tldCByZWFzc2VtYmx5LCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIElQLVRGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDIuMzg5ODU5MjgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxNzk4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDA3OjQwOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxcbiB7XFxuIFxcdGFzc2VydF9zcGluX2xvY2tlZChcXHUwMDI2eHRmcy1cXHUwMDNlZHJvcF9sb2NrKTtcXG4gXFxuLVxcdC8qIFdlIGRvbid0IGNhcmUgaWYgaXQgd29ya3MgbG9ja2luZyB0YWtlcyBjYXJlIG9mIHRoaW5ncyAqL1xcbi1cXHRocnRpbWVyX3RyeV90b19jYW5jZWwoXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfdGltZXIpO1xcbisgICAgICAgIC8qXFxuKyAgICAgICAgICogVGhlIGRyb3AgdGltZXIgYWxzbyBkcml2ZXMgdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIExvY2tpbmcgbWFrZXNcXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXFxuKyAgICAgICAgICovXFxuKyAgICAgICAgaWYgKCF4dGZzLVxcdTAwM2V3X3NhdmVkbGVuKVxcbisgICAgICAgICAgICAgICAgaHJ0aW1lcl90cnlfdG9fY2FuY2VsKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX3RpbWVyKTtcXG4gXFx0aWYgKGZyZWUpXFxuIFxcdFxcdGtmcmVlX3NrYih4dGZzLVxcdTAwM2VyYV9uZXdza2IpO1xcbiBcXHR4dGZzLVxcdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDowMi44MDk5MDE1NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2OTIxMDg3Mzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxuIHtcbiBcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4gXG4tXHQvKiBXZSBkb24ndCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi9cbi1cdGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuKyAgICAgICAgLypcbisgICAgICAgICAqIFRoZSBkcm9wIHRpbWVyIGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBMb2NraW5nIG1ha2VzXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXG4rICAgICAgICAgKi9cbisgICAgICAgIGlmICgheHRmcy1cdTAwM2V3X3NhdmVkbGVuKVxuKyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKTtcbiBcdGlmIChmcmVlKVxuIFx0XHRrZnJlZV9za2IoeHRmcy1cdTAwM2VyYV9uZXdza2IpO1xuIFx0eHRmcy1cdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDIuODA5OTAzMTI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0OTc2ODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gSVAgRnJhZ21lbnRhdGlvbiBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBJUHNlYyBmcmFnbWVudGF0aW9uIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgZnJhZ21lbnQgcmVhc3NlbWJseSBmdW5jdGlvbmFsaXR5LiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhlIGBfX2lwdGZzX3JlYXNzZW1fZG9uZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGZpbGUgaXRzZWxmLCBhbmQgdGhlIHdheSB0aGUgcmVhc3NlbWJseSBpcyBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIGBkcm9wX3RpbWVyYCBsb2dpYywgb25seSBjYW5jZWxsaW5nIGl0IGlmIGB4dGZzLVx1MDAzZXdfc2F2ZWRsZW5gIGlzIHplcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEl04oCZcyBsaWtlbHkgYSBzdWJ0bGUgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRyb3BwZWQgZnJhZ21lbnRzIGFuZCB0aW1lb3V0IHNjZW5hcmlvcyBkdXJpbmcgcmVhc3NlbWJseS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMgdGhhdCB0aGUgb3JpZ2luYWwgbG9naWMgbWlnaHQgaGF2ZSBoYWQsIGFuZCBob3cgdGhpcyBuZXcgY29uZGl0aW9uYWwgYmVoYXZpb3IgYWRkcmVzc2VzIHRoZW0uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IGB3X3NhdmVkbGVuYCBpcyBzZXQgYW5kIHVzZWQgd2l0aGluIHRoZSByZWFzc2VtYmx5IHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDcuMzU5NjczOTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODgyNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faXB0ZnNfcmVhc3NlbV9kb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9NjU5PXN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02OTctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY5ODpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzE3PXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI4OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MDcuNDExNTYwMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkxNzQ3MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGZpeCBpcyBidXJpZWQgZGVlcCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGtlcm5lbCBvcHRpb25zIG9yIG1vZHVsZXMgKmFjdGl2YXRlKiB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHRvIGV2ZW4gYmVnaW4gY29tcHJlaGVuZGluZyB0aGUgYnVnJ3MgY29udGV4dCBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCdzIHNlZSB3aGF0IGNvbmZpZyB2YXJpYWJsZXMgYXJlIHRpZWQgdG8gdGhpcyBmaWxlIHRvIHNlZSBob3cgaXQncyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MTEuNzAzMzA5NTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1faXB0ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjExLjc1MTgxMzUyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE5NjE4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhlIGFjdGl2ZSBjb25maWcgaXMgY3VycmVudGx5IHNldCB0byBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBzdGFydCB1bnBhY2tpbmcgdGhpcy4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhIGNvbmZpZyBsaWtlIHRoaXMsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCB0b3VjaGVzLiBUaGlzIG1lYW5zIGRyaWxsaW5nIGRvd24gaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBgWEZSTV9JUFRGU2AgYmVpbmcgYWN0aXZlLiBBIGZ1bGwgdW5kZXJzdGFuZGluZyByZXF1aXJlcyBrbm93aW5nIHRoZSBrbm9jay1vbiBlZmZlY3RzLCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBpbXBvcnRhbnRseSwgd2hhdCBhcmVhcyBvZiB0aGUgc3lzdGVtIGFyZSAqZ3VhcmFudGVlZCogdG8gYmUgYWN0aXZlIG9yIGRvcm1hbnQgYXMgYSByZXN1bHQgb2YgdGhpcyBzZXR0aW5nLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY3kgdHJlZSBhbmQgbWFwIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MTUuNjUzNzc3ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTU2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjE1LjcwMTkzODI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzgxNDI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyByZWxhdGVkIHRvLCB3ZWxsLCBldmVyeXRoaW5nICphcm91bmQqIGxpbmUgMTQxIGluIGBuZXQveGZybS9LY29uZmlnYC4gSSBrbm93IHRoZSBhcmVhLCBhbmQgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHZhcmlvdXMgb3B0aW9ucy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG1heWJlIHNwb3Qgc29tZXRoaW5nIG5ldyB0aGF0J3MgYmVlbiBhZGRlZC4gTGV0J3Mgc2VlIHdoYXQgcG9wcyBvdXQuIEknbSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IGdpdmVuIFhGUk0ncyBjb21wbGV4aXR5LCBJJ20gcHJlcGFyZWQgZm9yIGEgZmV3IHR3aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjE4Ljk4MDA4MzMyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNTpcXHRcXHQgIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC4gIERldGFpbFxcbiAxMzY6XFx0XFx0ICBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVybmV0LWRyYWZ0XFxuIDEzNzpcXHRcXHQgIFxcdTAwM2NkcmFmdC1zdWdpbW90by1taXA2LXBma2V5LW1pZ3JhdGVcXHUwMDNlLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBYRlJNX0lQVEZTXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDE0MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXFxuIDE0NjpcXHRcXHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcXG4gMTQ3OlxcdFxcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxcbiAxNDg6XFx0XFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXFxuIDE0OTpcXHRcXHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxcbiAxNTA6XFx0XFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcXG4gMTUxOlxcdFxcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXFxuIDE1MjpcXHRcXHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxcbiAxNTM6XFx0XFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cXG4gMTU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDoxOC45ODAxNDA4OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MTk5NTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwdGZzIENvbmZpZ3VyYXRpb24gYW5kIFJlYXNzZW1ibHkgRnVuY3Rpb25zKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaGVyZSBpcyBgWEZSTV9JUFRGU2AuIE15IGltbWVkaWF0ZSBmb2N1cyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBgX19pcHRmc19yZWFzc2VtX2RvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaW1wYWN0LiBBIGNyaXRpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgYGlwdGZzX3JlYXNzZW1fYWJvcnRgIGFuZCBgaXB0ZnNfcmVhc3NlbV9kb25lYCBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhlIGBpcHRmc2AgcmVhc3NlbWJseSBwcm9jZXNzIGlzIGJlaW5nIGluaXRpYXRlZCBhbmQgZmluYWxpemVkLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdmlzdWFsaXplIHRoZSBsYXJnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2OCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjMuNDMyMTM5NTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMzYyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcmVhc3NlbV9hYm9ydHxpcHRmc19yZWFzc2VtX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNDogKiBpcHRmc19yZWFzc2VtX2Fib3J0KCkgLSBJbi1wcm9ncmVzcyBwYWNrZXQgaXMgYWJvcnRlZCBmcmVlIHRoZSBzdGF0ZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE1LSAqIEB4dGZzOiB4dGZzIHN0YXRlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxNi0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE3OnN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzE4LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzE5OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjAtfVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMi0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzIzOiAqIGlwdGZzX3JlYXNzZW1fZG9uZSgpIC0gSW4tcHJvZ3Jlc3MgcGFja2V0IGlzIGNvbXBsZXRlLCBjbGVhciB0aGUgc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjUtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNjpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI4OlxcdF9faXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI5LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03NDY9c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MjctXFx0XFx0LyogV2UgYXJlIGRvbmUgd2l0aCBwYWNrZXQgcmVhc3NlbWJseSEgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTI4OlxcdFxcdGlwdGZzX3JlYXNzZW1fZG9uZSh4dGZzKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTI5LVxcdFxcdGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYih4dGZzLVxcdTAwM2V4LCBuZXdza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNy1cXHRpZiAoeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkzODpcXHRcXHRpcHRmc19yZWFzc2VtX2Fib3J0KHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzktXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjMuNjc1MTgxNzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjcyODExMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3Mgc2VsZi1yZWZsZWN0aW9uOlxuXG4qKkRlZXAgRGl2ZTogYGlwdGZzX3JlYXNzZW1fY29udGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgd2VlZHMuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gZGVsdmUgaW50byB0aGUgYGlwdGZzX3JlYXNzZW1fY29udGAgY2FsbGVycy4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIGNhbGwgZ3JhcGggaW4gbXkgaGVhZDsgSSd2ZSB3b3JrZWQgd2l0aCB0aGlzIGNvZGUgbG9uZyBlbm91Z2ggdG8gaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBhcmVhcywgYnV0IGEgZm9ybWFsIGNoZWNrIGlzIGFsd2F5cyB0aGUgcmlnaHQgd2F5IHRvIGJlIGNlcnRhaW4uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb250ZXh0cz8gQXJlIHRoZXJlIGFueSBwYXR0ZXJucz8gQXJlIHRoZXJlIGFyZWFzIEkgY2FuIHNlZSwgYXQgZmlyc3QgZ2xhbmNlLCB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZz8gQXJlIHRoZXJlIGtub3duIGlzc3VlcyB0aGF0IGFyZSBpbXBhY3RpbmcgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNvbnRleHQgZm9yIGV2YWx1YXRpbmcgaXRzIHB1cnBvc2UsIHBlcmZvcm1hbmNlLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbi1kZXB0aCBhbmFseXNpcyBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDoyNy4xNDI0NjU3MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTU5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTcyNj1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzEtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0NS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzQ2OnN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyMj1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODMtXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg0OlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MjcuMTkyNjMwNzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODgwNTg3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwdGZzX2lucHV0X29yZGVyZWRgIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBpcHRmc19pbnB1dF9vcmRlcmVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBgaXB0ZnNfcmVhc3NlbV9jb250YC4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbiwgYW5kIGl0J3MgYSBrZXkgb25lIHRvIHVuZGVyc3RhbmQuIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gdGhpcyBjb2RlLCBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hvKiBpcyBjYWxsaW5nIGBpcHRmc19pbnB1dF9vcmRlcmVkYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGlwdGZzX3JlYXNzZW1fY29udGAgaXMgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBkaXJlY3Rpb24gd2lsbCByZWFsbHkgaGVscCB3aXRoIGRlYnVnZ2luZyBhbmQgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zLiBSaWdodCwgbGV0J3MgdHJhY2sgZG93biB0aGUgY2FsbHMgdG8gYGlwdGZzX2lucHV0X29yZGVyZWRgIGFuZCBzZWUgd2hhdCB0aGF0IGlsbHVtaW5hdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzEuMDgwNjkzMTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgwODQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dF9vcmRlcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9OTQ3PXN0YXRpYyBib29sIF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgZGF0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjE1LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjE2OiAqIGlwdGZzX2lucHV0X29yZGVyZWQoKSAtIGhhbmRsZSBuZXh0IGluIG9yZGVyIElQVEZTIHBheWxvYWQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMTctICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE2NzI9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDMtXFx0XFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcwNDpcXHRcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MDUtXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3MjE9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzI4LVxcdGlmICh4dGZzLVxcdTAwM2VjZmcucmVvcmRlcl93aW5fc2l6ZSA9PSAwKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mjk6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ0LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDU6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzEuMTI3NTA3NDYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzU3NjU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIElucHV0IEZsb3cqKlxuXG5Pa2F5LCBzbyBgaXB0ZnNfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBpbnB1dCBpbiB0aGlzIHN5c3RlbS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmNhbGxpbmcqIGBpcHRmc19pbnB1dGAuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBhYm91dCB0aGUga2luZCBvZiBkYXRhIGJlaW5nIGZlZCBpbnRvIGl0LCB0aGUgZXhwZWN0ZWQgZm9ybWF0LCBhbmQgdGhlIG92ZXJhbGwgaW5wdXQgcGlwZWxpbmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHNlZSB3aGVyZSB0aGVzZSBpbnB1dHMgYXJlIG9yaWdpbmF0aW5nIGFuZCBob3cgdGhleSBhcmUgcHJvY2Vzc2VkIGJlZm9yZSByZWFjaGluZyBgaXB0ZnNfaW5wdXRgLiBUaGlzIGlzIHRoZSBtb3N0IGNydWNpYWwgc3RlcCBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzUuMzYzMjc1MzAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1MjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTU3OD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01OTItLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MzogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5NC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjAyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDMtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk0Nz1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTk3LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5OTg6XFx0XFx0XFx0XFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDE2LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDE3OlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAxOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMTUtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMTY6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIxNy0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjEtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTQ3OD1zdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX3NoaWZ0cyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MjMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MjQ6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfcmVvcmRlcihzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjI1LVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjcyPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzAzLVxcdFxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MDQ6XFx0XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzA1LVxcdFxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzEyOiAqIGlwdGZzX2lucHV0KCkgLSBoYW5kbGUgcmVjZWlwdCBvZiBpcHRmcyBwYXlsb2FkXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MTMtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzIxOnN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjgtXFx0aWYgKHh0ZnMtXFx1MDAzZWNmZy5yZW9yZGVyX3dpbl9zaXplID09IDApIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzAtXFx0XFx0Z290byBkb25lO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzktXFx0c3Bpbl9sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzQwOlxcdGlwdGZzX2lucHV0X3Jlb3JkZXIoeHRmcywgc2tiLCBcXHUwMDI2bGlzdCwgXFx1MDAyNmZyZWVsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0MS1cXHRzcGluX3VubG9jayhcXHUwMDI2eHRmcy1cXHUwMDNlZHJvcF9sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ0LVxcdFxcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDU6XFx0XFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ2LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC1cXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjM1LjQxMDAzNjQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcxMjQ3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIHRoZSBEYXRhIElucHV0IFBhdGggaW4gdGhlIElQVEZTIFN5c3RlbSoqXG5cbk9rYXksIHNvIGBpcHRmc19pbnB1dGAgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgSSByZW1lbWJlciB0aGF0LCBhcyB0aGUgYC5pbnB1dGAgaGFuZGxlciB3aXRoaW4gdGhlIGBpcHRmc19tb2RlX2Nic2Agc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGRhdGEgZmxvdy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzOiB3aGVyZSBkb2VzIHRoaXMgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUgYWN0dWFsbHkgKmdldCogdXNlZD8gS25vd2luZyB0aGF0IHdpbGwgcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbnB1dCB3aXRoaW4gdGhpcyBJUFRGUyBjb250ZXh0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGluZ2VzdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZGUuIFRpbWUgdG8gdHJhY2UgdGhhdCBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6MzkuMDgxMjg2NDI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYxNzI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19tb2RlX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI3Mjg9c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzYzLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2NS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzc4PXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODMtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODQ6XFx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFxcdTAwMjZpcHRmc19tb2RlX2Nicyk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODUtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjM5LjEyNjkwODkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjQ4NDU0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHNlYyBJUC1URlMgSW5wdXQgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHRmc19pbnB1dGAgaGVyZS4gSXQncyB0aGUgaW5wdXQgaGFuZGxlciBzcGVjaWZpY2FsbHkgZm9yIGBYRlJNX01PREVfSVBURlNgLCB3aGljaCBpcyB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydC4gVGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgdG8gYmUgcHJlY2lzZS5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdoZXJlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKWAgd2FzIGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQncyBhIHByb2JsZW0gYmVjYXVzZSB0aGUgZHJvcCB0aW1lciBpc24ndCBqdXN0IGZvciBkcm9wcGluZyBwYWNrZXRzOyBpdCBhbHNvIGRyaXZlcyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gU28sIGNhbmNlbGxhdGlvbiBzaG91bGQgYmUgY29uZGl0aW9uYWwsIG9ubHkgaWYgYCF4dGZzLVx1MDAzZXdfc2F2ZWRsZW5gLiBHb3QgaXQuXG5cblRoaXMgY2VydGFpbmx5IGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBgWEZSTV9JUFRGU2AgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkIHdoZW4gdGVzdGluZy4gTXkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBsaWtlbHkgYmUgYXJvdW5kIHRoZSBgaXB0ZnNfaW5wdXRgIGFuZCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAgc3ltYm9scy4gSSdsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB0aG9zZSB0aG9yb3VnaGx5LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHNhbWUgY29kZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjQ0LjE5MTc1NzYzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MDQ0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODEyPXN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MzYtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4Mzc6c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgzOC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3My1cXHQuaW5wdXQgPSBpcHRmc19pbnB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3NDpcXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzUtXFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjQ0LjI0MDU3MDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTEzNDU2NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgUmVhc3NlbWJseSBMb2dpYyoqXG5cbk9rYXksIHNvIHRoZSBvdXRwdXQgaGFuZGxlciBpcyBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBnb3QgaXQuIFRoZSBidWcncyBpbiByZWFzc2VtYmx5LCB3aGljaCBtZWFucyBJIG5lZWQgdG8gYmUgbG9va2luZyBhdCB0aGUgaW5wdXQgcGF0aC4gYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQgdGhlcmUsIHJpZ2h0PyBGaXJzdCwgSSB3YXMgdGhpbmtpbmcsIFwiSXMgYGlwdGZzX2lucHV0YCBzdGF0aWM/XCIgWWVhaCwgaXQgaXMuIEJ1dCBob2xkIG9uLCB0aGUgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogZ2V0IGlubGluZWQsIGFuZCB0aG9zZSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMsIG1ha2luZyBkZWJ1Z2dpbmcgdG91Z2hlci4gTGV0IG1lIGRvdWJsZS1jaGVjazogYHN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpYC4gQWhhISBJdCAqaXMqIHN0YXRpYyEgQnV0Li4uIGl0J3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gSWYgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgdGhlIGNvbXBpbGVyIGNhbid0IGNvbXBsZXRlbHkgaW5saW5lIGl0LCByaWdodD8gSXQgKmhhcyogdG8gaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFNvLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE9yLCBJIGNhbiBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCBvciBqdXN0IHVzZSBgaXB0ZnNfaW5wdXRgIHNpbmNlIGl0J3MgYW4gYWRkcmVzcy10YWtlbiBzdGF0aWMgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0ICplbHNlKiBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgaW4gY2FzZS4gSSdsbCBjaGVjayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODgsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTAuMTU0MDMwMzEzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MDkwNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjUwLjMxMjk0OTM0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxMjgwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlZmluaW5nIHRoZSBBcHByb2FjaDogQSBOZXcgUmVnZXggU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBwYXR0ZXJuIGZvciBhIGJpdCBub3csIGFuZCB3aGlsZSB0aGUgY3VycmVudCByZWdleCBpcyAqY2xvc2UqLCBJJ20gc2Vuc2luZyBpdCdzIG5vdCBxdWl0ZSBvcHRpbWFsLiBUaGVyZSdzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgaXQncyBlaXRoZXIgZ29pbmcgdG8gbWlzcyBzb21lIGVkZ2UgY2FzZXMgb3IsIHdvcnNlLCBiZWNvbWUgb3Zlcmx5IHBlcm1pc3NpdmUgYW5kIGludHJvZHVjZSBmYWxzZSBwb3NpdGl2ZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCBzb21ldGhpbmcgbW9yZSByb2J1c3QsIG1vcmUgcHJlY2lzZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUsIEkgdGhpbmsgaXQncyB0aW1lIHRvIGNvbXBsZXRlbHkgcmVjb25zaWRlciB0aGUgYXBwcm9hY2guIExldCdzIHNjcmFwIHdoYXQgd2UgaGF2ZSBhbmQgdHJ5IGJ1aWxkaW5nIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBncm91bmQgdXAsIGtlZXBpbmcgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIGNhcHR1cmUgdGhlIG51YW5jZSBpbiB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBzb21lIGh5cG90aGVzZXMgSSBjYW4gd29yayB3aXRoLiBIb3BlZnVsbHksIHRoaXMgbmV4dCB2ZXJzaW9uIHdpbGwgYmUgdGhlIGNoYXJtIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NSwiT3V0cHV0VG9rZW5zIjo3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTQuMDg0MjMyNzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY2NzEzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKj8gW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDA6NTQuMTMxOTA4NDY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU3ODE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgeGZybV9pcHRmcy5jYCBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiBsYW5kc2NhcGUgb2YgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIExldCdzIGdldCBzdHJhaWdodCB0byB0aGUgcG9pbnQg4oCTIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgY29tcGxldGUgZnVuY3Rpb24gbGlzdGluZy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBzY29wZSBvZiB3aGF0IGB4ZnJtX2lwdGZzLmNgIGlzIHJlc3BvbnNpYmxlIGZvci4gSSdtIGZvY3VzaW5nIG9uIGEgaGlnaC1sZXZlbCBjb21wcmVoZW5zaW9uIG9mIHRoZSBpbXBsZW1lbnRhdGlvbjsgYSBmdWxsIGNvZGUgcmV2aWV3IGlzIG5vdCBuZWNlc3NhcnkgYXQgdGhpcyB0aW1lLCBidXQgaGF2aW5nIGEgcmVmZXJlbmNlIGZvciBlYWNoIGRlZmluZWQgZnVuY3Rpb24gaGVscHMuIFRoZSBsaXN0aW5nIHNob3VsZCBzZXJ2ZSBhcyBhIHNvbGlkIGJhc2UgZnJvbSB3aGljaCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDgsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MDo1Ny45Njc2OTIzNjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQwMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtejAtOV9dKyApK1thLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTE0OT1zdHJ1Y3QgeGZybV9pcHRmc19kYXRhIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODctI2lmZGVmIFRSQUNFUE9JTlRTX0VOQUJMRURcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg4OnN0YXRpYyB1MzIgX190cmFjZV9pcF9wcm90byhzdHJ1Y3QgaXBoZHIgKmlwaClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTQtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE5NTpzdGF0aWMgdTMyIF9fdHJhY2VfaXBfcHJvdG9fc2VxKHN0cnVjdCBpcGhkciAqaXBoKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xOTYte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIyOnN0YXRpYyB1NjQgX19lc3Bfc2VxKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfYWxsb2Nfc2tiKHN0cnVjdCBza19idWZmICp0cGwsIHUzMiBsZW4sIGJvb2wgbDNyZXN2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5Ni0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk3OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTU9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM0OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNzktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MDpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4MS1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmZzZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDk6c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDEwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1ODpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaywgdTMyIG9mZnNldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01Nzg9aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjAxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MDI6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwMy1cXHRcXHRcXHRcXHQgIHU4ICpidWYsIGludCBsZW4pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjE4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MTk6c3RhdGljIHUzMiBfX2lwdGZzX2lwaGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjIwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MzgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjYzOTpzdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY0MC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NTk6c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTYtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxNzpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxOC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjY6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDY6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQ3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NzpzdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnNrYnNlcSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjIxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjIyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMDQtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMDU6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzA2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzE5OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9wYXN0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzI1OnN0YXRpYyB1MzIgX19yZW9yZGVyX2Ryb3Aoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzcxLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzcyOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MDE6c3RhdGljIHZvaWQgaXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGludCBpbmRleClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQwMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyNy1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQyODpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX2ZpdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQyOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDc3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDc4OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0NzktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjIzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjI0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYyNS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY3MS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY3MjpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjE6c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3NC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc3NTpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3OTgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3OTk6c3RhdGljIGludCBpcHRmc19nZXRfY3VyX3BtdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODExLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODEyOnN0YXRpYyBpbnQgaXB0ZnNfaXNfdG9vX2JpZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODEzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODM2LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODM3OnN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4Mzgte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5MzUtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE5MzY6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3ByZXBhcmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBibGtvZmYpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE5Mzcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE5Njc9c3RhdGljIHN0cnVjdCBza19idWZmICppcHRmc19jb3B5X2NyZWF0ZV9mcmFnKHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZnNldCwgdTMyIGNvcHlfbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDAtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwMDE6c3RhdGljIGludCBpcHRmc19jb3B5X2NyZWF0ZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBtdHUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMDIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwOTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIwOTg6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE1OC1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE1OTpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxODktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxOTA6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE5MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyNC1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMyNTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzI2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzc1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzc2OnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzcte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0MjEtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0MjI6c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2NS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NjpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDkwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDkxOnN0YXRpYyB1MzIgX19pcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDkyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTA5OnN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUyODpzdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI5LVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTg0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB0ZnNfc2FfbGVuKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTg2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA0LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjA1OnN0YXRpYyBpbnQgaXB0ZnNfY29weV90b191c2VyKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjA2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjQzLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjQ0OnN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY0NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjY4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjY5OnN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjcwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzA5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzEwOnN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcxMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyNy1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjcyODpzdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzc4OnN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkwLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkxOnN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtX2lwdGZzX2Zpbmkodm9pZClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQwOjU4LjAxNjczODU0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIzOTY0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQLVRGUyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBmb2N1c2VzIG9uIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLiBBbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGVyZSBhcmUgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBhIG1vZHVsZSBsaWtlIHRoaXMuIEkgY2FuIHNlZSB0aGUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgaW4gYGlwdGZzX21vZGVfY2JzYDogYGlwdGZzX2dldF9pbm5lcl9tdHVgLCBgaXB0ZnNfaW5wdXRgLCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCBgaXB0ZnNfdXNlcl9pbml0YCwgYGlwdGZzX2Nsb25lX3N0YXRlYCwgYGlwdGZzX2luaXRfc3RhdGVgLCBgaXB0ZnNfZGVzdHJveV9zdGF0ZWAsIGBpcHRmc19zYV9sZW5gLCBhbmQgYGlwdGZzX2NvcHlfdG9fdXNlcmAuIFJpZ2h0IGF3YXksIGBpcHRmc19pbnB1dGAgaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBhcyB0aGUgcHJpbWFyeSBpbnB1dCBlbnRyeSBwb2ludC4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8ga2VlcCBhbiBleWUgb24gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBhcyB3ZWxsLlxuXG5UaGUgY29uZmlndXJhdGlvbiBzeW1ib2wgaXMgYFhGUk1fSVBURlNgLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiB0aGUgSVAtVEZTIHJlYXNzZW1ibHksIHNwZWNpZmljYWxseSB0aGUgaW5jb3JyZWN0IGNhbmNlbGxhdGlvbiBvZiB0aGUgZHJvcCB0aW1lciwgd2hpY2ggY291bGQgY2F1c2UgaXNzdWVzIHdpdGggdGhlIHJlb3JkZXIgd2luZG93IHRpbWVvdXQuIFNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCBpbiB0aGUgY29yZSBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbi5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBBaCwgaXQgKmRlcGVuZHMgb24qIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZS4gTWVhbmluZyBgWEZSTWAgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBYRlJNX0lQVEZTYCB0byB3b3JrLiBTaW5jZSBgWEZSTWAgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgdXN1YWxseSBlbmFibGVkLCBpdCB3b24ndCBiZSBhbiBpc3N1ZS4gU28sIGNvbmZpcm1pbmcgYFhGUk1fSVBURlNgIGlzIGFsbCBJIG5lZWQgdG8gcmV0dXJuLCBnaXZlbiBpdCBpbXBsaWVzIHRoZSBuZWNlc3NhcnkgdW5kZXJseWluZyBgWEZSTWAuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdsbCBxdWlja2x5IGdsYW5jZSBhcm91bmQgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MsIGJ1dCBJIGRvbid0IHNlZSBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MTowNS4wNDA3MDY1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2ODY2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC94ZnJtL0tjb25maWctOC1cXHRzZWxlY3QgR1JPX0NFTExTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTMyPWNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5uZXQveGZybS9LY29uZmlnOjM0OlxcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFxcdTAwMjZcXHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cXHRcXHRIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTQzPWNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbm5ldC94ZnJtL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElQVjZcXG5uZXQveGZybS9LY29uZmlnLTQ2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy01NC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTYxPWNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG5uZXQveGZybS9LY29uZmlnOjc0OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubmV0L3hmcm0vS2NvbmZpZy03NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXFx0Ym9vbCBcXFwiUEZfS0VZIE1JR1JBVEVcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMjc6XFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xNDE9Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxNDM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy0xNDQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MTowNS4wODgzOTcyNjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg1NDI5ODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IHRvIHRlc3QgaXQgZWZmZWN0aXZlbHkuIEl0J3MgY2xlYXIgdGhhdCBgWEZSTV9JUFRGU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIFNpbmNlIGBYRlJNX0lQVEZTYCBkZXBlbmRzIG9uIGJvdGggYFhGUk1gIGFuZCwgaW5kaXJlY3RseSwgYElORVRgLCBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aG9zZSBicm9hZGVyIGNvbmZpZ3MgZXhwbGljaXRseS4gYFhGUk1fSVBURlNgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS5cblxuVG8gZ3VpZGUgbXkgZnV6emluZyBlZmZvcnRzLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIHRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHRoYXQgd2FycmFudHMgcmlnb3JvdXMgdGVzdGluZy4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wiaXB0ZnNfaW5wdXRcIiwgXCJpcHRmc19vdXRwdXRfY29sbGVjdFwiXWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aGVyZSB0aGlzIGJ1ZyBpbnZvbHZpbmcgdGhlIGRyb3AgdGltZXIgYW5kIHJlYXNzZW1ibHkgaXMgb2NjdXJyaW5nLiBUaGF0IHJlYXNzZW1ibHkgYW5kIHJlb3JkZXIgd2luZG93IGFyZSBjcnVjaWFsIGhlcmUuIFNvLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZGF0YSBwYXRocywgaW5wdXQgYW5kIG91dHB1dCwgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGF0LlxuXG5GaW5hbGx5LCBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFtcIlhGUk1fSVBURlNcIl1gLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZ1bmN0aW9uYWwgYnVnIGluIElQc2VjJ3MgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBkcm9wIHRpbWVyIGNhbmNlbGxhdGlvbiBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHkgd2hpY2ggcG90ZW50aWFsbHkgaW1wYWN0cyB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLCBub3Qgc29tZSBtaW5vciBjb3NtZXRpYyB0d2Vhay4gU28sIGVuYWJsaW5nIGBYRlJNX0lQVEZTYCBpcyB0aGUgY29ycmVjdCBwYXRoIGZvciBleGVyY2lzaW5nIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDQsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjExLjk0MjY5ODg2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDc0MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfaW5wdXRcIixcbiAgICBcImlwdGZzX291dHB1dF9jb2xsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgd2hlcmUgdGhlIGRyb3AgdGltZXIgd2FzIGluY29ycmVjdGx5IGNhbmNlbGxlZCBkdXJpbmcgcGFja2V0IHJlYXNzZW1ibHksIHdoaWNoIGNvdWxkIGFmZmVjdCB0aGUgcmVvcmRlciB3aW5kb3cgdGltZW91dC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgSVAtVEZTIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19pbnB1dFwiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCB3aGVyZSB0aGUgZHJvcCB0aW1lciB3YXMgaW5jb3JyZWN0bHkgY2FuY2VsbGVkIGR1cmluZyBwYWNrZXQgcmVhc3NlbWJseSwgd2hpY2ggY291bGQgYWZmZWN0IHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBJUC1URlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjEyLjAyMDc3OTEyM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExMTQ4ODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjEyLjAyMTQ2NDg0M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTEwNzk3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBjYW5jZWxsaW5nIGEgdGltZXIgKGB4dGZzLVxcdTAwM2Vkcm9wX3RpbWVyYCkgaW4gYF9faXB0ZnNfcmVhc3NlbV9kb25lKClgLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIHRpbWVyIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNkZjc5YjlmYTY3ZWNmMGIxYWMwYWMyZTJiZWFiOGU2Yjc2OTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDc6NDA6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLmMwZDcxMmI1OTRhMzcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTY5OSw4ICs2OTksMTIgQEAgc3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxuIHtcbiBcdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4gXG4tXHQvKiBXZSBkb24ndCBjYXJlIGlmIGl0IHdvcmtzIGxvY2tpbmcgdGFrZXMgY2FyZSBvZiB0aGluZ3MgKi9cbi1cdGhydGltZXJfdHJ5X3RvX2NhbmNlbChcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfdGltZXIpO1xuKyAgICAgICAgLypcbisgICAgICAgICAqIFRoZSBkcm9wIHRpbWVyIGFsc28gZHJpdmVzIHRoZSByZW9yZGVyIHdpbmRvdyB0aW1lb3V0LiBMb2NraW5nIG1ha2VzXG4rICAgICAgICAgKiBhIGZhaWxlZCBjYW5jZWwgaGFybWxlc3MuXG4rICAgICAgICAgKi9cbisgICAgICAgIGlmICgheHRmcy1cdTAwM2V3X3NhdmVkbGVuKVxuKyAgICAgICAgICAgICAgICBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKTtcbiBcdGlmIChmcmVlKVxuIFx0XHRrZnJlZV9za2IoeHRmcy1cdTAwM2VyYV9uZXdza2IpO1xuIFx0eHRmcy1cdTAwM2VyYV9uZXdza2IgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDE6MTIuMDIxNDY2MDIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTEyNzE4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGltZXIgQ2FuY2VsbGF0aW9uIGluIGB4ZnJtX2lwdGZzLmNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19pcHRmc19yZWFzc2VtX2RvbmVgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSByZWdhcmRpbmcgYSB0aW1lci4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgY29uZGl0aW9uYWwgZm9yIHdoZW4gd2UgYXR0ZW1wdCB0byBjYW5jZWwgdGhlIGBocnRpbWVyX3RyeV90b19jYW5jZWwoXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX3RpbWVyKWAuIFRoZSBhZGRpdGlvbiBvZiBgaWYgKCF4dGZzLVx1MDAzZXdfc2F2ZWRsZW4pYCBhcm91bmQgdGhlIHRpbWVyIGNhbmNlbGxhdGlvbiBpcyB0aGUgY29yZSBvZiBpdC5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBsaWtlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1c2FnZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBJdCBsb29rcyBwdXJlbHkgbGlrZSBhIHRpbWVyIGNhbmNlbGxhdGlvbiBjb25kaXRpb24gYmVpbmcgcmVmaW5lZC4gXG5cblRoYXQgYmVpbmcgc2FpZCwgYmVjYXVzZSBpdCBpcyBkZWFsaW5nIHdpdGggYSB0aW1lciwgYW5kIHRpbWVycyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgY29ycmVjdG5lc3MgaW4gbmV0d29ya2luZyBjb2RlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSB0aGlzIG1vZGlmaWNhdGlvbiBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIGZvY3VzIG9uIGhvdyBgd19zYXZlZGxlbmAgaXMgc2V0IGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgdGltZXIsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwYWNrZXQgcmVhc3NlbWJseSBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgZHJvcHBpbmcgcGFja2V0cyBvciBjYXVzaW5nIG90aGVyIGlzc3VlcyB3aXRoIHRoaXMgY29uZGl0aW9uYWwgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDc6NDE6MTYuNTMyNzQxMTAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg4NDY2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pcHRmc19yZWFzc2VtX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz02NTk9c3RhdGljIHZvaWQgaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY5Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Njk4OnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjk5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MTc9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTgte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTk6XFx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMC19XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzI2PXN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03Mjcte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3Mjg6XFx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgZmFsc2UpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNzo0MToxNi44MDE1OTMzMjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMDY0Nzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uY2VybmluZyB0aGUgVGltZXIgQ2FuY2VsbGF0aW9uIExvZ2ljIFVwZGF0ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzICplbnRpcmVseSogb24gaG93IHRoZSB0aW1lciBjYW5jZWxsYXRpb24gd29ya3MuIFRoYXQncyB0aGUgb25seSB0aGluZyB0aGF0J3MgYmVpbmcgdG91Y2hlZCBpbiB0aGlzIHJldmlzaW9uLiBJdCdzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIEknbSBhc3Nlc3NpbmcgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSByaXNrIG9mIGFjY2Vzc2luZyBtZW1vcnkgdGhhdCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZC4gVGhhdCdzIGEgY29yZSBjb25jZXJuLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgSSBkb24ndCBiZWxpZXZlIHRoaXMgaXMgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoYXQgYXNzdW1wdGlvbiBhcyB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBtZW1vcnkgdW5pbml0aWFsaXplZCBpc3N1ZXMsIHRoZXJlZm9yZSBLTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGlzIGNoYW5nZS4gV2UgYXJlIG9ubHkgZm9jdXNlZCBvbiB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA3OjQxOjIxLjEzMjI0NDc4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgY2FuY2VsbGluZyBhIHRpbWVyIChgeHRmcy1cXHUwMDNlZHJvcF90aW1lcmApIGluIGBfX2lwdGZzX3JlYXNzZW1fZG9uZSgpYC4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byB0aW1lciBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[1] Phase: Succeeded StartedAt: 2026-08-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 07:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 07:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2] Phase: Succeeded StartedAt: 2026-08-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 07:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:33 +0000 UTC FinishedAt: 2026-08-24 07:41:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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-workflowbk2q2/series-workflowbk2q2-convert-artifact-95435203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:43 +0000 UTC FinishedAt: 2026-08-24 07:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:43 +0000 UTC FinishedAt: 2026-08-24 07:58:16 +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:*b513e4f5-c513-4a22-b6f5-559a9f69408f,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-workflowbk2q2/series-workflowbk2q2-convert-artifact-95435203/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": "3e2a03a8-6fac-49c9-b1c0-d0f02f6ca0e5", "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-workflowbk2q2/series-workflowbk2q2-build-action-855880753/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:41:43 +0000 UTC FinishedAt: 2026-08-24 07:58:06 +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:*b513e4f5-c513-4a22-b6f5-559a9f69408f,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-workflowbk2q2/series-workflowbk2q2-convert-artifact-95435203/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": "3e2a03a8-6fac-49c9-b1c0-d0f02f6ca0e5", "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-workflowbk2q2/series-workflowbk2q2-build-action-855880753/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:16 +0000 UTC FinishedAt: 2026-08-24 07:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:16 +0000 UTC FinishedAt: 2026-08-24 07:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:16 +0000 UTC FinishedAt: 2026-08-24 07:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:16 +0000 UTC FinishedAt: 2026-08-24 07:58:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-workflowbk2q2/series-workflowbk2q2-convert-artifact-4149825914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:27 +0000 UTC FinishedAt: 2026-08-24 08:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 07:58:27 +0000 UTC FinishedAt: 2026-08-24 08:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e2a03a8-6fac-49c9-b1c0-d0f02f6ca0e5,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-workflowbk2q2/series-workflowbk2q2-build-action-855880753/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-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:00:29 +0000 UTC FinishedAt: 2026-08-24 08:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:00:29 +0000 UTC FinishedAt: 2026-08-24 08:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:00:29 +0000 UTC FinishedAt: 2026-08-24 08:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:00:29 +0000 UTC FinishedAt: 2026-08-24 08:26:41 +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:*b513e4f5-c513-4a22-b6f5-559a9f69408f,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-workflowbk2q2/series-workflowbk2q2-convert-artifact-4149825914/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": "e274be24-0a10-4156-8ffe-7db604b160b3", "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-workflowbk2q2/series-workflowbk2q2-build-action-1437668571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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: Failed StartedAt: 2026-08-24 08:00:29 +0000 UTC FinishedAt: 2026-08-24 08:00:36 +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:*b513e4f5-c513-4a22-b6f5-559a9f69408f,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-workflowbk2q2/series-workflowbk2q2-convert-artifact-4149825914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-08-24 08:06:26 +0000 UTC FinishedAt: 2026-08-24 08:26:30 +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:*b513e4f5-c513-4a22-b6f5-559a9f69408f,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-workflowbk2q2/series-workflowbk2q2-convert-artifact-4149825914/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": "e274be24-0a10-4156-8ffe-7db604b160b3", "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-workflowbk2q2/series-workflowbk2q2-build-action-1437668571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:26:41 +0000 UTC FinishedAt: 2026-08-24 08:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:26:41 +0000 UTC FinishedAt: 2026-08-24 08:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:26:41 +0000 UTC FinishedAt: 2026-08-24 08:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:26:41 +0000 UTC FinishedAt: 2026-08-24 08:28:38 +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:*e274be24-0a10-4156-8ffe-7db604b160b3,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-workflowbk2q2/series-workflowbk2q2-build-action-1437668571/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-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +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":["iptfs_input","iptfs_output_collect"],"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:*3e2a03a8-6fac-49c9-b1c0-d0f02f6ca0e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e274be24-0a10-4156-8ffe-7db604b160b3,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-workflowbk2q2/series-workflowbk2q2-build-action-855880753/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-workflowbk2q2/series-workflowbk2q2-build-action-1437668571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 08:28:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 08:28:52 +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":["iptfs_input","iptfs_output_collect"],"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-workflowbk2q2/series-workflowbk2q2-convert-artifact-2090649775/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 08:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 08:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:48 +0000 UTC FinishedAt: 2026-08-24 08:28:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:58 +0000 UTC FinishedAt: 2026-08-24 09:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbk2q2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"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":["iptfs_input","iptfs_output_collect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS"],"series_id":"b17952db-50c4-4cbd-aab0-b9493487ebdf","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-24 08:28:58 +0000 UTC FinishedAt: 2026-08-24 09:26:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e2a03a8-6fac-49c9-b1c0-d0f02f6ca0e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e274be24-0a10-4156-8ffe-7db604b160b3,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-workflowbk2q2/series-workflowbk2q2-build-action-855880753/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-workflowbk2q2/series-workflowbk2q2-build-action-1437668571/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-workflowbk2q2/series-workflowbk2q2-convert-artifact-2090649775/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,}