Name: series-workflow4lnwm Phase: Succeeded StartedAt: 2026-08-26 19:01:28 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[0] Phase: Succeeded StartedAt: 2026-08-26 19:01:28 +0000 UTC FinishedAt: 2026-08-26 19:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 19:01:28 +0000 UTC FinishedAt: 2026-08-26 19:09:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BEFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BEFS_FS" ], "series_id": "2837ddaa-514a-46c2-b2d1-8424233fcc70" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "befs_fill_super", "befs_check_sb", "befs_load_sb", "befs_read_datastream", "befs_fblock2brun", "befs_check_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JFRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZWZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19zYiYjMzQ7LAogICAgJiMzNDtiZWZzX2xvYWRfc2ImIzM0OywKICAgICYjMzQ7YmVmc19yZWFkX2RhdGFzdHJlYW0mIzM0OywKICAgICYjMzQ7YmVmc19mYmxvY2syYnJ1biYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9iZWZzL2JlZnMuaCBiL2ZzL2JlZnMvYmVmcy5oXG5pbmRleCA3Y2Q0NzI0NTY5NGRlLi5iOGM3YjdmODFmMzljIDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9iZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvYmVmcy5oXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSAmIzQzO1xuJiM0MztcdHJldHVybiAoKChiZWZzX2Jsb2NrbnJfdClpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwIFx1MDAzY1x1MDAzYyBCRUZTX1NCKHNiKS1cdTAwM2VhZ19zaGlmdCkgJiM0MztcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubylcbiBcbiBcdGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vIFx1MDAzZVx1MDAzZSBCRUZTX1NCKHNiKS1cdTAwM2VhZ19zaGlmdDtcbiBcdGlhZGRyLnN0YXJ0ID1cbi1cdCAgICBibG9ja25vIC0gKGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiYjNDM7XHQgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuIFx0aWFkZHIubGVuID0gMTtcbiBcbiBcdHJldHVybiBpYWRkcjtcbmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmNcbmluZGV4IDdjNTAwMjVjOTlkOGEuLjlmMjFmNzMyZDJjMTggMTAwNjQ0XG4tLS0gYS9mcy9iZWZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuY1xuQEAgLTkzLDE3ICYjNDM7OTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbiYjNDM7XHRpZiAoYmVmc19zYi1cdTAwM2VibG9ja19zaGlmdCBcdTAwM2U9IDMyIHx8XG4mIzQzO1x0ICAgICgxVSBcdTAwM2NcdTAwM2MgYmVmc19zYi1cdTAwM2VibG9ja19zaGlmdCkgIT0gYmVmc19zYi1cdTAwM2VibG9ja19zaXplKSB7XG4gXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwmIzM0O1xuIFx0XHRcdCAgIFwmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LlwmIzM0Oyk7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiYjNDM7XHRpZiAoYmVmc19zYi1cdTAwM2VhZ19zaGlmdCBcdTAwM2U9IDMyKSB7XG4mIzQzO1x0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDthZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEJFRlNfRVJSO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCgxVSBcdTAwM2NcdTAwM2MgYmVmc19zYi1cdTAwM2VhZ19zaGlmdCkgIT0gYmVmc19zYi1cdTAwM2VibG9ja3NfcGVyX2FnKVxuIFx0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwmIzM0Oyk7XG4gXG4gXHRpZiAoYmVmc19zYi1cdTAwM2Vsb2dfc3RhcnQgIT0gYmVmc19zYi1cdTAwM2Vsb2dfZW5kIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JFRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZWZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19zYiYjMzQ7LAogICAgJiMzNDtiZWZzX2xvYWRfc2ImIzM0OywKICAgICYjMzQ7YmVmc19yZWFkX2RhdGFzdHJlYW0mIzM0OywKICAgICYjMzQ7YmVmc19mYmxvY2syYnJ1biYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmgKaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmVmcy9iZWZzLmgKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgQkVGU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90CiBpYWRkcjJibG9ja25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfaW5vZGVfYWRkciAqaWFkZHIpCiB7Ci0JcmV0dXJuICgoaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwomIzQzOwlyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwogCQlpYWRkci0mZ3Q7c3RhcnQpOwogfQogCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubykKIAogCWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vICZndDsmZ3Q7IEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdDsKIAlpYWRkci5zdGFydCA9Ci0JICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwomIzQzOwkgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwogCWlhZGRyLmxlbiA9IDE7CiAKIAlyZXR1cm4gaWFkZHI7CmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmMKaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuYwpAQCAtOTMsMTcgJiM0Mzs5MywyMiBAQCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay4KIAkgKi8KIAotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewomIzQzOwlpZiAoYmVmc19zYi0mZ3Q7YmxvY2tfc2hpZnQgJmd0Oz0gMzIgfHwKJiM0MzsJICAgICgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewogCQliZWZzX2Vycm9yKHNiLCAmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuICYjMzQ7CiAJCQkgICAmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LiYjMzQ7KTsKIAkJcmV0dXJuIEJFRlNfRVJSOwogCX0KIAotCiAJLyogYWdfc2hpZnQgYWxzbyBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGJsb2Nrc19wZXJfYWcgaW4gYQogCSAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVjawogCSAqLwotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKJiM0MzsJaWYgKGJlZnNfc2ItJmd0O2FnX3NoaWZ0ICZndDs9IDMyKSB7CiYjNDM7CQliZWZzX2Vycm9yKHNiLCAmIzM0O2FnX3NoaWZ0ICZndDs9IDMyLiBDb3JydXB0aW9uIGxpa2VseS4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gQkVGU19FUlI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKIAkJYmVmc19lcnJvcihzYiwgJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLiYjMzQ7KTsKIAogCWlmIChiZWZzX3NiLSZndDtsb2dfc3RhcnQgIT0gYmVmc19zYi0mZ3Q7bG9nX2VuZCB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJFRlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEJFRlMsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZnMvYmVmcy9iZWZzLmhgIGFuZCBgZnMvYmVmcy9zdXBlci5jYC4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IHNlZW1zIGxpa2UgdGhlIGRldmVsb3BlcnMgYXJlIGFkZGluZyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGluIHRob3NlIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgYWxzbyBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYGJlZnNfc2ItJmd0O2Jsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItJmd0O2FnX3NoaWZ0YCB3aXRoaW4gYGJlZnNfY2hlY2tfc2JgLgoKUmlnaHQgYXdheSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgSSYjMzk7ZCB3YWdlciBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXBgIGlzIGEgMzItYml0IGludGVnZXIuIFRoYXQgc2hpZnQgb3BlcmF0aW9uLCBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0YCwgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIElmIGBhbGxvY2F0aW9uX2dyb3VwYCBpcyAzMi1iaXQsIGFuZCB0aGUgc2hpZnQgcmVzdWx0cyBpbiBhIHZhbHVlIGxhcmdlciB0aGFuIDMyIGJpdHMsIHdlJiMzOTtyZSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gb3ZlcmZsb3cgdGVycml0b3J5LiBObyBnb29kLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhvc2UgZmlsZXMgdG8gdmVyaWZ5IHRoZSBkYXRhIHR5cGUgYXNzdW1wdGlvbnMgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byB2YWxpZGF0ZSB0aGUgcHJvcG9zZWQgZml4IGFuZCBtYWtlIHN1cmUgaXQgaGFuZGxlcyBhbGwgdGhlIGVkZ2UgY2FzZXMgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R5cGVkZWYuKmJlZnNfYmxvY2tucl90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmcy5oLTE3LVxuZnMvYmVmcy9iZWZzLmg6MTg6dHlwZWRlZiB1NjQgYmVmc19ibG9ja25yX3Q7XG5mcy9iZWZzL2JlZnMuaC0xOS0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQkVGUyBEYXRhIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gYmUgemVyb2luZyBpbiBvbiBCRUZTIGRhdGEgc3RydWN0dXJlcy4gRmlyc3QsIGNvbmZpcm1hdGlvbjogeWVzLCB0aGF0IGBiZWZzX2Jsb2NrbnJfdGAgdHlwZSBpcyBpbmRlZWQgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciwgYSBgdTY0YC4gR29vZCwgZ29vZCwgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciBibG9jayBhZGRyZXNzaW5nLiBOb3csIG15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGBiZWZzX2lub2RlX2FkZHJgIGlzIGhhbmRsZWQuIFdoZXJlIGRvZXMgdGhhdCBmaXQgaW4gdGhlIGJsb2NrIG1hcCBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGlub2RlIGFkZHJlc3MgdHlwZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYmxvY2sgbnVtYmVyIHR5cGUgdG8gY29udGludWUgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYmVmc19pbm9kZV9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvQ2hhbmdlTG9nPTIwND1WZXJzaW9uIDAuNCAoMjAwMS0xMC0yOClcbi0tXG5mcy9iZWZzL0NoYW5nZUxvZy0yNDgtPT09PT09PT09PVxuZnMvYmVmcy9DaGFuZ2VMb2c6MjQ5OiogRml4IG5hc3R5IGJ1ZyBpbiBjb252ZXJ0aW5nIGJsb2NrIG51bWJlcnMgdG8gc3RydWN0IGJlZnNfaW5vZGVfYWRkci4gXG5mcy9iZWZzL0NoYW5nZUxvZy0yNTAtXHRTdWJ0bGUsIGJlY2F1c2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBvbmx5IHNvbWV0aW1lcyB3cm9uZy4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYmVmc19pbm9kZV9hZGRyYCBHcmVwKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJlZnNfaW5vZGVfYWRkcmAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgc3VyZmFjaW5nIGFzIGEgdGFyZ2V0IGZvciBhIGBncmVwYCBjb21tYW5kIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIHNpZ25pZmljYW50IGlkZW50aWZpZXIgd2l0aGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtJiMzOTtzIGludGVybmFscy4gSXQmIzM5O3MgZWl0aGVyIGEgZGF0YSBzdHJ1Y3R1cmUgZmllbGQsIGEgZnVuY3Rpb24gbmFtZSwgb3IgbWF5YmUgZXZlbiBhIGNvbnN0YW50IHVzZWQgaW4gaW5vZGUgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgYmV0IGl0JiMzOTtzIHByb2JhYmx5IG9uZSBvZiB0aGUgZmlyc3QgdHdvLiBOb3csIHdpdGhvdXQgbW9yZSBjb250ZXh0LCBpdCYjMzk7cyB0b3VnaCB0byBuYWlsIGRvd24gKmV4YWN0bHkqIHdoYXQgdGhpcyBgZ3JlcGAgaXMgbG9va2luZyBmb3IuIElzIGl0IHRyYWNpbmcgdXNlcyBvZiB0aGUgYWRkcmVzcz8gUG90ZW50aWFsIGJ1Z3MgaW52b2x2aW5nIGhvdyBpdCYjMzk7cyBoYW5kbGVkPyBPciwgYW0gSSBsb29raW5nIHRvIGxvY2F0ZSBhIHNwZWNpZmljIGlub2RlIHN0cnVjdHVyZSwgcGVyaGFwcyBvbmUgdGhhdCYjMzk7cyBiZWVuIGNvcnJ1cHRlZCBvciBpcyBiZWluZyBlcnJvbmVvdXNseSBhY2Nlc3NlZD8gSSYjMzk7ZCByZWFsbHkgbmVlZCB0byBzZWUgdGhlIGBncmVwYCBjb21tYW5kIGl0c2VsZiBhbmQsIGlkZWFsbHksIHRoZSBjb2RlYmFzZSBzdXJyb3VuZGluZyBpdCB0byB1bmRlcnN0YW5kIHRoZSB0cnVlIGludGVudC4gVGhhdCBzYWlkLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBlbm91Z2ggdG8gYmUgKnNlYXJjaGVkIGZvciogc2lnbmlmaWVzIGl0cyBpbXBvcnRhbmNlLCBwb3NzaWJseSBpbiBkZWJ1Z2dpbmcsIGF1ZGl0aW5nIG9yIHBlcmZvcm1hbmNlLiBGdXJ0aGVyIGV4cGxvcmF0aW9uIHJlcXVpcmVzIG1lIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZWRlZi4qYmVmc19pbm9kZV9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmc19mc190eXBlcy5oPTEwNz10eXBlZGVmIGJlZnNfZGlza19ibG9ja19ydW4gYmVmc19kaXNrX2lub2RlX2FkZHI7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaDoxMDg6dHlwZWRlZiBiZWZzX2Jsb2NrX3J1biBiZWZzX2lub2RlX2FkZHI7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBiZWZzX2Jsb2NrX3J1bmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBiZWZzX2Jsb2NrX3J1bmAuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaXQgdG8gc2VlIHdoZXJlIHdlJiMzOTtyZSBhdCwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGEgcG9pbnQgb2Ygb3JpZ2luLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcywgbG9vayBhdCB0aGUgbGFzdCB0aW1lIGl0IHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBsb2dzIGZvciByZWNlbnQgZXJyb3JzLCBpZiBhbnkuIEJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0JiMzOTtzIHJ1bm5pbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIEkgbmVlZCB0byBhZGRyZXNzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgZGV0ZXJtaW5lZC4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIHJlc3RhcnRpbmcgaXQsIG9yIGl0IGNvdWxkIGJlIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVjZW50IG1ldHJpY3MgYXJvdW5kIHRoaXMgaWYgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBiZWZzX2Jsb2NrX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gdG95aW5nIHdpdGggdGhlIGlkZWEgb2YgbmFtaW5nIHRoZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgYmxvY2sgcnVuIGluIHRoZSBiZWZzIGZpbGUgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gd2l0aCBzb21ldGhpbmcgbGlrZSBgdHlwZWRlZiBzdHJ1Y3QgYmVmc19ibG9ja19ydW5gLCB3aGljaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBkZXNjcmlwdGl2ZS4gSXQgY2xlYXJseSB0aWVzIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIEJFIEZpbGUgU3lzdGVtIGFuZCBoaWdobGlnaHRzIGl0cyBwdXJwb3NlIG9mIGhhbmRsaW5nIGJsb2NrIHJ1bnMuIEl0JiMzOTtzIGNvbmNpc2UsIGVhc3kgdG8gdW5kZXJzdGFuZCBhdCBhIGdsYW5jZSwgYW5kIGdldHMgdGhlIGpvYiBkb25lIHdpdGhvdXQgYmVpbmcgb3Zlcmx5IHZlcmJvc2UuIEl0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZmluaW5nIHRoaXMgY3J1Y2lhbCBkYXRhIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmIHN0cnVjdC4qYmVmc19ibG9ja19ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlF1aWNrIFNlYXJjaCBmb3IgYGJlZnNfYmxvY2tfcnVuYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIHNvbWV0aGluZyBvdXQsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBqdXN0ICpncmVwKiBmb3Igc29tZXRoaW5nIEkga25vdyBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQsIGEga25vd24gZnVuY3Rpb24gbmFtZTogYGJlZnNfYmxvY2tfcnVuYC4gVGhhdCBuYW1lIGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBsaWtlbHkgYSBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBCRUZTIGZpbGVzeXN0ZW0gdGhhdCBtYW5hZ2VzIGJsb2NrcyBvZiBkYXRhIGFuZCB0aGUgYWN0IG9mIHJ1bm5pbmcgb3IgZXhlY3V0aW5nIHNvbWUgc29ydCBvZiBvcGVyYXRpb24gaW4gaXQuIEtub3dpbmcgdGhlIG5hbWUgaXMgb25lIHRoaW5nLCBidXQgcXVpY2tseSBzZWVpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBpcyB3aGF0IEkgbmVlZC4gR3JlcHBpbmcgd2lsbCBnaXZlIG1lIGEgZmFzdCB2aWV3IG9mIHRoZSBwbGFjZXMgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfYmxvY2tfcnVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmcy5oPTMyPXN0cnVjdCBiZWZzX3NiX2luZm8ge1xuLS1cbmZzL2JlZnMvYmVmcy5oLTUwLVx0LyogSm91cm5hbCBsb2cgZW50cnkgKi9cbmZzL2JlZnMvYmVmcy5oOjUxOlx0YmVmc19ibG9ja19ydW4gbG9nX2Jsb2NrcztcbmZzL2JlZnMvYmVmcy5oLTUyLVx0YmVmc19vZmZfdCBsb2dfc3RhcnQ7XG4tLVxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg9MTAxPXR5cGVkZWYgc3RydWN0IHtcbi0tXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDQtXHR1MTYgbGVuO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTA1On0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTA2LVxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg9MTA3PXR5cGVkZWYgYmVmc19kaXNrX2Jsb2NrX3J1biBiZWZzX2Rpc2tfaW5vZGVfYWRkcjtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTEwOS1cbi0tXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xNTc9dHlwZWRlZiBzdHJ1Y3Qge1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTU4Olx0YmVmc19ibG9ja19ydW4gZGlyZWN0W0JFRlNfTlVNX0RJUkVDVF9CTE9DS1NdO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTU5LVx0YmVmc19vZmZfdCBtYXhfZGlyZWN0X3JhbmdlO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTYwOlx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3Q7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xNjEtXHRiZWZzX29mZl90IG1heF9pbmRpcmVjdF9yYW5nZTtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE2MjpcdGJlZnNfYmxvY2tfcnVuIGRvdWJsZV9pbmRpcmVjdDtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTE2My1cdGJlZnNfb2ZmX3QgbWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZTtcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0yND1zdGF0aWMgaW50IGJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUtXHRcdFx0XHQgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI2Olx0XHRcdFx0IGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sIGJlZnNfYmxvY2tfcnVuICpydW4pO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjctXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0yOD1zdGF0aWMgaW50IGJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzAtXHRcdFx0XHQgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE6XHRcdFx0XHQgICBiZWZzX2Jsb2NrX3J1biAqcnVuKTtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMyLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTM1LVx0XHRcdFx0ICAgICAgYmVmc19ibG9ja25yX3QgYmxvY2tubyxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjM2Olx0XHRcdFx0ICAgICAgYmVmc19ibG9ja19ydW4gKnJ1bik7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zNy1cbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz00OT1iZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01Mi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MzpcdGJlZnNfYmxvY2tfcnVuIHJ1bjtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTU0LVx0YmVmc19ibG9ja25yX3QgYmxvY2s7XHQvKiBibG9jayBjb3Jlc3BvbmRpbmcgdG8gcG9zICovXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTU9YmVmc19mYmxvY2syYnJ1bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6OTY6XHRcdCBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy05Ny17XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MjUxPWJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjUyOlx0XHQgICAgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLCBiZWZzX2Jsb2NrX3J1biAqcnVuKVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUzLXtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI1NC1cdGludCBpO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjU1Olx0Y29uc3QgYmVmc19ibG9ja19ydW4gKmFycmF5ID0gZGF0YS1cdTAwM2VkaXJlY3Q7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0yNTYtXHRiZWZzX2Jsb2NrbnJfdCBzdW07XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzA1PWJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA3LVx0XHRcdGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMDg6XHRcdFx0YmVmc19ibG9ja19ydW4gKnJ1bilcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMwOS17XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzE2LVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE3Olx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVx1MDAzZWluZGlyZWN0O1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzE4LVx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXHUwMDI2aW5kaXJlY3QpO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQxNi1cdFx0XHQgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDE3Olx0XHRcdCAgIGJlZnNfYmxvY2tfcnVuICpydW4pXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MTgte1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQyOS1cdHN0cnVjdCBidWZmZXJfaGVhZCAqaW5kaXJfYmxvY2s7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0MzA6XHRiZWZzX2Jsb2NrX3J1biBpbmRpcl9ydW47XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MzEtXHRiZWZzX2Rpc2tfaW5vZGVfYWRkciAqaWFkZHJfYXJyYXk7XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmg9MTE9aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjEyOlx0XHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMy1cbi0tXG5mcy9iZWZzL2RlYnVnLmM9NzI9YmVmc19kdW1wX2lub2RlKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKmlub2RlKVxuLS1cbmZzL2JlZnMvZGVidWcuYy03NS1cbmZzL2JlZnMvZGVidWcuYzo3NjpcdGJlZnNfYmxvY2tfcnVuIHRtcF9ydW47XG5mcy9iZWZzL2RlYnVnLmMtNzctXG4tLVxuZnMvYmVmcy9kZWJ1Zy5jPTE1Nj1iZWZzX2R1bXBfc3VwZXJfYmxvY2soY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19zdXBlcl9ibG9jayAqc3VwKVxuLS1cbmZzL2JlZnMvZGVidWcuYy0xNTktXG5mcy9iZWZzL2RlYnVnLmM6MTYwOlx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcbmZzL2JlZnMvZGVidWcuYy0xNjEtXG4tLVxuZnMvYmVmcy9kZWJ1Zy5jPTIxMz1iZWZzX2R1bXBfcnVuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gcnVuKVxuLS1cbmZzL2JlZnMvZGVidWcuYy0yMTYtXG5mcy9iZWZzL2RlYnVnLmM6MjE3Olx0YmVmc19ibG9ja19ydW4gbiA9IGZzcnVuX3RvX2NwdShzYiwgcnVuKTtcbmZzL2JlZnMvZGVidWcuYy0yMTgtXG4tLVxuZnMvYmVmcy9lbmRpYW4uaD02MT1jcHVfdG9fZnMxNihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgbilcbi0tXG5mcy9iZWZzL2VuZGlhbi5oLTcwLVxuZnMvYmVmcy9lbmRpYW4uaDo3MTpzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tfcnVuXG5mcy9iZWZzL2VuZGlhbi5oLTcyLWZzcnVuX3RvX2NwdShjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Rpc2tfYmxvY2tfcnVuIG4pXG5mcy9iZWZzL2VuZGlhbi5oLTczLXtcbmZzL2JlZnMvZW5kaWFuLmg6NzQ6XHRiZWZzX2Jsb2NrX3J1biBydW47XG5mcy9iZWZzL2VuZGlhbi5oLTc1LVxuLS1cbmZzL2JlZnMvZW5kaWFuLmg9ODg9c3RhdGljIGlubGluZSBiZWZzX2Rpc2tfYmxvY2tfcnVuXG5mcy9iZWZzL2VuZGlhbi5oOjg5OmNwdV90b19mc3J1bihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrX3J1biBuKVxuZnMvYmVmcy9lbmRpYW4uaC05MC17XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTM4LVx0YmVmc19kYXRhX3N0cmVhbSAqZHMgPSBcdTAwMjZCRUZTX0koaW5vZGUpLVx1MDAzZWlfZGF0YS5kcztcbmZzL2JlZnMvbGludXh2ZnMuYzoxMzk6XHRiZWZzX2Jsb2NrX3J1biBydW4gPSBCQURfSUFERFI7XG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQwLVx0aW50IHJlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCRUZTIEJsb2NrIEFkZHJlc3NlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJlZnNfaW5vZGVfYWRkcmAgYW5kIGl0JiMzOTtzIHBvaW50aW5nIHRvIGBiZWZzX2Jsb2NrX3J1bmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRpbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYGJlZnNfYmxvY2tfcnVuYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgQkVGUyBoYW5kbGVzIGl0cyBibG9jayBydW5zIGFuZCBob3cgdGhleSYjMzk7cmUgZGVmaW5lZCBhdCB0aGUgZnVuZGFtZW50YWwgbGV2ZWwuIFNvLCBJJiMzOTtsbCBnbyByaWdodCB0byB0aGUgc291cmNlOiB0aGUgYGZzL2JlZnMvYmVmc19mc190eXBlcy5oYCBoZWFkZXIgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMgYWJvdXQgdGhlIG9yZ2FuaXphdGlvbiBvZiB0aGVzZSBibG9ja3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgaGFzIGZvciBhZGRyZXNzaW5nIHdpdGhpbiB0aGUgQkVGUyBmaWxlc3lzdGVtLiBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpbm9kZXMgbWFwIHRvIGFjdHVhbCBkYXRhLiBMZXQmIzM5O3Mgc2Vl4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZWRlZiBzdHJ1Y3QgXFx7LipcXH0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuOyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCRUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBgYmVmc19ibG9ja19ydW5gIHN0cnVjdDoKCmBgYGMKdHlwZWRlZiBzdHJ1Y3QgewoJdTMyIGFsbG9jYXRpb25fZ3JvdXA7Cgl1MTYgc3RhcnQ7Cgl1MTYgbGVuOwp9IFBBQ0tFRCBiZWZzX2Jsb2NrX3J1bjsKYGBgCgpSaWdodCwgYGFsbG9jYXRpb25fZ3JvdXBgIGlzIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIsIGFuZCBgYmVmc19ibG9ja25yX3RgIGlzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIuIE5vdyBJIHNlZSBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBhZ19zaGlmdGAuIElmIGBhZ19zaGlmdGAgaXMgbGFyZ2UgZW5vdWdoICgzMSBvciBncmVhdGVyKSwgdGhlIGxlZnQgc2hpZnQgY291bGQgb3ZlcmZsb3cgYSAzMi1iaXQgaW50ZWdlciwgYW5kIHRoZW4gdGhlIGNhc3QgdG8gNjQgYml0cyBhZnRlcndhcmQgd29uJiMzOTt0IGNoYW5nZSB0aGF0LiBJZiBgYWdfc2hpZnRgIGlzIDMyIG9yIG1vcmUsIHRoZW4gdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KClRoZSBwYXRjaCBoZXJlIGFkZHMgYSBjYXN0IHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHRoZSBzaGlmdCwgZW5zdXJpbmcgaXTigJlzIGEgNjQtYml0IHNoaWZ0LiBTbWFydC4gQW5kIEkgc2VlIGEgY2hlY2sgaW4gYGJlZnNfY2hlY2tfc2JgIHRoYXQgZW5zdXJlcyBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGFyZSBib3RoIGxlc3MgdGhhbiAzMi4KCk9rYXksIG5vdyBsZXTigJlzIHRoaW5rIGFib3V0IGNvbnRleHQuIGBiZWZzX2NoZWNrX3NiYCBnZXRzIGNhbGxlZCB3aGVuIG1vdW50aW5nIGEgQkVGUyBmaWxlc3lzdGVtLiBCRUZTLCByaWdodCwgdGhhdOKAmXMgdGhlIEJlT1MgZmlsZXN5c3RlbS4gSXQmIzM5O3MgYSAqZGlzayogZmlsZXN5c3RlbSwgc28geWVzLCB5b3UgY2FuIGRlZmluaXRlbHkgbW91bnQgYSB1c2VyLXByb3ZpZGVkIGltYWdlLiBTbywgYSBtYWxpY2lvdXNseSBjcmFmdGVkIEJFRlMgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGlzIG92ZXJmbG93IG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gQW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBzZWN1cml0eSBpc3N1ZSBpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBtb3VudCBwYXRoLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBpYWRkcjJibG9ja25vYCwgYGJsb2Nrbm8yaWFkZHJgLCBhbmQgYGJlZnNfY2hlY2tfc2JgLiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9iZWZzL2JlZnMuaGAuIGBiZWZzX2NoZWNrX3NiYCBpcyBpbiBgZnMvYmVmcy9zdXBlci5jYC4gQWgsIHllcywgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBmcm9tIGBiZWZzX2ZpbGxfc3VwZXJgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJlcGFyZSB0aGUgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBnb29kIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfY2hlY2tfc2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy04NDItXHRpZiAoKGJlZnNfbG9hZF9zYihzYiwgZGlza19zYikgIT0gQkVGU19PSykgfHxcbmZzL2JlZnMvbGludXh2ZnMuYzo4NDM6XHQgICAgKGJlZnNfY2hlY2tfc2Ioc2IpICE9IEJFRlNfT0spKVxuZnMvYmVmcy9saW51eHZmcy5jLTg0NC1cdFx0Z290byB1bmFjcXVpcmVfYmg7XG4tLVxuZnMvYmVmcy9zdXBlci5jPTU3PWludFxuZnMvYmVmcy9zdXBlci5jOjU4OmJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JlZnMvc3VwZXIuYy01OS17XG4tLVxuZnMvYmVmcy9zdXBlci5oPTU9aW50IGJlZnNfbG9hZF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpkaXNrX3NiKTtcbmZzL2JlZnMvc3VwZXIuaDo2OmludCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBNb3VudCBQb2ludCBBbmFseXNpcyoqCgpSaWdodCwgc28gYGJlZnNfZmlsbF9zdXBlcmAgaXMgdGhlIGJpZyBrYWh1bmEsIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZm9yIG1vdW50aW5nIHRoaXMgQkVGUyBmaWxlIHN5c3RlbS4gVGhhdCB0ZWxscyBtZSBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIGBiZWZzX2NoZWNrX3NiYCwgc2luY2UgaXQgbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzIGR1cmluZyB0aGUgbW91bnRpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gcmVhbGx5IHBva2UgYW5kIHByb2QgZm9yIHZ1bG5lcmFiaWxpdGllcy4gU2luY2UgSSYjMzk7bSBzdGFydGluZyBmcm9tIGEgY29kZS1maXJzdCBwZXJzcGVjdGl2ZSwgSSBzaG91bGQgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBgS2NvbmZpZ2Agb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byBCRUZTIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCRUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYmVmcy9LY29uZmlnOjI6Y29uZmlnIEJFRlNfRlNcbmZzL2JlZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QmVPUyBmaWxlIHN5c3RlbSAoQmVGUykgc3VwcG9ydCAocmVhZCBvbmx5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZyBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE5vdywgZ2l2ZW4gdGhlIG51YW5jZXMgb2YgdGhpcyBzZXR1cCwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIEkgbmVlZCB0byBwcm9hY3RpdmVseSBjb25zaWRlciBpZiB0aGlzIGlzICphbGwqIEkgcmVxdWlyZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBBcmUgdGhlcmUgYW55IHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMsIGFuY2lsbGFyeSBzZXR0aW5ncywgb3IgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgcGllY2VzIHRoYXQgd291bGQgaW1wYWN0IGl0cyBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJFRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9LY29uZmlnPTIzPWNvbmZpZyBCRUZTX0RFQlVHXG5mcy9iZWZzL0tjb25maWctMjQtXHRib29sIFwmIzM0O0RlYnVnIEJlRlNcJiMzNDtcbmZzL2JlZnMvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gQkVGU19GU1xuZnMvYmVmcy9LY29uZmlnLTI2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQkVGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgQkVGU2AgaXRzZWxmLiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzLCBJIGRvbiYjMzk7dCBzZWUgYW55IGdsYXJpbmcgY29uZmlnIGdvdGNoYXMgb3IgbmVjZXNzYXJ5IHR3ZWFrcyBmb3IgYEJFRlNgIGl0c2VsZi4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluIHRoYXQgcmVnYXJkLiBCdXQsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9mIGBCRUZTX0ZTYD8gV2hhdCBleHRlcm5hbCBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIG90aGVyIGludGVybmFsIG1vZHVsZXMgYXJlIGl0cyBidWlsZGluZyBibG9ja3M/IEkga25vdyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIGVzcGVjaWFsbHkgaWYgdGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmVmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvS2NvbmZpZz0yPWNvbmZpZyBCRUZTX0ZTXG5mcy9iZWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0JlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcJiMzNDtcbmZzL2JlZnMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYmVmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbi0tXG5mcy9iZWZzL0tjb25maWc9MjM9Y29uZmlnIEJFRlNfREVCVUdcbmZzL2JlZnMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7RGVidWcgQmVGU1wmIzM0O1xuZnMvYmVmcy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBCRUZTX0ZTXG5mcy9iZWZzL0tjb25maWctMjYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEJFRlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IGhlcmUgaGluZ2VzIG9uIHRoZSBgQkxPQ0tgIGNvbXBvbmVudCwgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZS4gIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIHRvIGVuYWJsZSBpcyBkZWZpbml0ZWx5IGBCRUZTX0ZTYC4gUmlnaHQsIGdvdCBpdC4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2NoZWNrX3NiYCBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgb25lcyBoYW5kbGluZyBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uLCB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpCdXQgaG9sZCBvbi4uLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgYXJlIHVzZWQgKmV2ZXJ5d2hlcmUqLiAgVGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBjb3JlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcHJvYmFibHkgY3J1Y2lhbCBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMsIHdoaWNoIHdvdWxkIGJlIGZ1bmRhbWVudGFsIHRvIGFsbW9zdCBldmVyeSBCRUZTIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXZhbHVhdGUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBUaGV5JiMzOTtsbCBuZWVkIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lhZGRyMmJsb2Nrbm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nLTMzMy1cdEdvdCByaWQgb2YgYWJvbWluYXRpb25zIGJlZnNfaWFkZHIyaW5vZGUoKSBhbmQgYmVmc19pbm9kZTJpbm8oKS4gXG5mcy9iZWZzL0NoYW5nZUxvZzozMzQ6XHRSZXBsYWNlZCB3aXRoIHNpbmdsZSBmdW5jdGlvbiBpYWRkcjJibG9ja25vKCkuXG5mcy9iZWZzL0NoYW5nZUxvZy0zMzUtXHQoZnMvYmVmcy9zdXBlci5jKSAoZnMvYmVmcy9pbm9kZS5jKVxuLS1cbmZzL2JlZnMvYmVmcy5oPTEyMj1zdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG5mcy9iZWZzL2JlZnMuaDoxMjM6aWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuZnMvYmVmcy9iZWZzLmgtMTI0LXtcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0zMDU9YmVmc19maW5kX2JydW5faW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTctXHRiZWZzX2Jsb2NrX3J1biBpbmRpcmVjdCA9IGRhdGEtXHUwMDNlaW5kaXJlY3Q7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTg6XHRiZWZzX2Jsb2NrbnJfdCBpbmRpcmJsb2Nrbm8gPSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpbmRpcmVjdCk7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTktXHRpbnQgYXJyYXlsZW4gPSBiZWZzX2lhZGRyc19wZXJfYmxvY2soc2IpO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3MS1cdGRibF9pbmRpcl9ibG9jayA9XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0NzI6XHQgICAgc2JfYnJlYWQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmRhdGEtXHUwMDNlZG91YmxlX2luZGlyZWN0KSAmIzQzO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDczLVx0XHRcdFx0XHRkYmxfd2hpY2hfYmxvY2spO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3Ny1cdFx0XHQgICAodW5zaWduZWQgbG9uZylcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ3ODpcdFx0XHQgICBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZkYXRhLVx1MDAzZWRvdWJsZV9pbmRpcmVjdCkgJiM0MztcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3OS1cdFx0XHQgICBkYmxfd2hpY2hfYmxvY2spO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ5OC1cdGluZGlyX2Jsb2NrID1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ5OTpcdCAgICBzYl9icmVhZChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXHUwMDI2aW5kaXJfcnVuKSAmIzQzOyB3aGljaF9ibG9jayk7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01MDAtXHRpZiAoaW5kaXJfYmxvY2sgPT0gTlVMTCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwMi1cdFx0XHQgICBcJiMzNDthdCBibG9ja25vICVsdVwmIzM0OywgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NTAzOlx0XHRcdCAgIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmluZGlyX3J1bikgJiM0Mzsgd2hpY2hfYmxvY2spO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTA0LVx0XHRyZXR1cm4gQkVGU19FUlI7XG4tLVxuZnMvYmVmcy9pbm9kZS5jPTE5PWJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxuLS1cbmZzL2JlZnMvaW5vZGUuYy0zNi1cdCAqL1xuZnMvYmVmcy9pbm9kZS5jOjM3Olx0aWYgKGlub2RlICE9IGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmlub19udW0pKSB7XG5mcy9iZWZzL2lub2RlLmMtMzgtXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2lub2RlIGJsb2NrbnIgZmllbGQgZGlzYWdyZWVzIHdpdGggdmZzIFwmIzM0O1xuZnMvYmVmcy9pbm9kZS5jLTM5LVx0XHRcdCAgIFwmIzM0O1ZGUzogJWx1LCBJbm9kZSAlbHVcJiMzNDssICh1bnNpZ25lZCBsb25nKVxuZnMvYmVmcy9pbm9kZS5jOjQwOlx0XHRcdCAgIGlub2RlLCAodW5zaWduZWQgbG9uZylpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpbm9fbnVtKSk7XG5mcy9iZWZzL2lub2RlLmMtNDEtXHRcdHJldHVybiBCRUZTX0JBRF9JTk9ERTtcbi0tXG5mcy9iZWZzL2lvLmM9Mjc9YmVmc19icmVhZF9pYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlX2FkZHIgaWFkZHIpXG4tLVxuZnMvYmVmcy9pby5jLTQyLVxuZnMvYmVmcy9pby5jOjQzOlx0YmxvY2sgPSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpYWRkcik7XG5mcy9iZWZzL2lvLmMtNDQtXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTYwLVxuZnMvYmVmcy9saW51eHZmcy5jOjE2MTpcdGRpc2tfb2ZmID0gKHVsb25nKSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZydW4pO1xuZnMvYmVmcy9saW51eHZmcy5jLTE2Mi1cbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NzgwPWJlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jLTg2OC1cdHNiLVx1MDAzZXNfdGltZV9tYXggPSAweGZmZmZmZmZmZmZmZmxsO1xuZnMvYmVmcy9saW51eHZmcy5jOjg2OTpcdHJvb3QgPSBiZWZzX2lnZXQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNihiZWZzX3NiLVx1MDAzZXJvb3RfZGlyKSkpO1xuZnMvYmVmcy9saW51eHZmcy5jLTg3MC1cdGlmIChJU19FUlIocm9vdCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSB1c2FnZSwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQ29kZSBJbnNwZWN0aW9uOiBBZGRyZXNzIENvbnZlcnNpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBpYWRkcjJibG9ja25vYCB1c2VkIHByZXR0eSBleHRlbnNpdmVseSBhY3Jvc3MgdGhlIEJFRlMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGluIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgYmVmc19maW5kX2JydW5faW5kaXJlY3RgLCBgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3RgLCBgYmVmc19jaGVja19pbm9kZWAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYGJlZnNfZ2V0X2Jsb2NrYCwgYW5kIGBiZWZzX2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdXRpbGl0eSBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBibG9jayBtYXBwaW5nIHN0cnVjdHVyZXMuIEl0JiMzOTtzIGludm9sdmVkIGluIGZpbmRpbmcgYmxvY2sgcnVucywgY2hlY2tpbmcgaW5vZGUgaW50ZWdyaXR5LCByZWFkaW5nIGJsb2NrIGRhdGEgYmFzZWQgb24gaW5vZGUgYWRkcmVzcywgZ2V0dGluZyBibG9ja3MgZm9yIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsaXppbmcgdGhlIHN1cGVyIGJsb2NrIHdoaWNoIHdvdWxkIGhhdmUgdG8gY29udGFpbiBibG9jayBudW1iZXIgZGF0YS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGJsb2Nrbm8yaWFkZHJgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSB1c2VkIGluIGBiZWZzX2lnZXRgLCB0aGUgaW5vZGUgZ2V0IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdXNhZ2UsIGp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIGtub3cgdGhlIGludmVyc2Ugb2YgdGhlIGZpcnN0IG9uZSB3b3VsZCBoYXZlIHRvIGJlIGhlcmUgdG9vLiBJdCB3b3VsZCBoYXZlIHRvIGJlIGNvbnZlcnRpbmcgYmV0d2VlbiBibG9jayBudW1iZXIgYW5kIGFuIGlub2RlIGFkZHJlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsb2Nrbm8yaWFkZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9iZWZzLmg9MTI5PXN0YXRpYyBpbmxpbmUgYmVmc19pbm9kZV9hZGRyXG5mcy9iZWZzL2JlZnMuaDoxMzA6YmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuZnMvYmVmcy9iZWZzLmgtMTMxLXtcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMzE3LVx0LyogY29udmVydCBmcm9tIHZmcyYjMzk7cyBpbm9kZSBudW1iZXIgdG8gYmVmcyYjMzk7cyBpbm9kZSBudW1iZXIgKi9cbmZzL2JlZnMvbGludXh2ZnMuYzozMTg6XHRiZWZzX2luby1cdTAwM2VpX2lub2RlX251bSA9IGJsb2Nrbm8yaWFkZHIoc2IsIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2JlZnMvbGludXh2ZnMuYy0zMTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCRUZTIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhpcyBpc3N1ZSBiYWNrIHRvIGhvdyBCRUZTIGhhbmRsZXMgc3VwZXJibG9ja3MgYW5kIGlub2RlIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCBgYmxvY2tubzJpYWRkcmAgaXMgdXNlZCB3aXRoaW4gYGJlZnNfaWdldGAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgYmVmc19maWxsX3N1cGVyYCBhbmQgYGJlZnNfbG9va3VwYC4gR2l2ZW4gdGhhdCB0aGlzIGJ1ZyBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGEgY3JhZnRlZCBCRUZTIGltYWdlIGR1cmluZyBtb3VudCBvciBmaWxlIGFjY2VzcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkgdGhhdCYjMzk7cyByaXBlIGZvciBleHBsb2l0YXRpb24uCgpJbml0aWFsbHksIEkgaGFkIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19pZ2V0YCwgYGJlZnNfZmluZF9icnVuX2luZGlyZWN0YCwgYGJlZnNfZmluZF9icnVuX2RibGluZGlyZWN0YCwgYGJlZnNfYnJlYWRfaWFkZHJgLCBhbmQgYGJlZnNfZ2V0X2Jsb2NrYC4gTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoYXQgbGlzdCBiYXNlZCBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LgoKYGJlZnNfZmlsbF9zdXBlcmAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3VudGluZywgYW5kIGBiZWZzX2NoZWNrX3NiYCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYGJlZnNfZmlsbF9zdXBlcmAuIGBiZWZzX2lnZXRgIGlzIGNhbGxlZCBmcm9tIGJvdGggYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2xvb2t1cGAsIHdoaWNoIGdpdmVzIGl0IHRoZSBzZWNvbmQgcG9pbnQgb2YgZW50cnkuIGBiZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdGAgYW5kIGBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdGAgYXJlIHBhcnQgb2YgYGJlZnNfZmJsb2NrMmJydW5gLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgYnkgYGJlZnNfZ2V0X2Jsb2NrYCBhbmQgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYC4gYGJlZnNfZ2V0X2Jsb2NrYCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGBnZXRfYmxvY2tgIGNhbGxiYWNrIGZvciBgbXBhZ2VfcmVhZF9mb2xpb2AgYW5kIGBibG9ja19yZWFkX2Z1bGxfZm9saW9gLCBhbmQgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCBoYW5kbGVzIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBzeW1saW5rcy4KClNvLCBib2lsaW5nIGl0IGRvd24sIHRoZSBtb3N0IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgYXJlOgoKKiAgIGBiZWZzX2ZpbGxfc3VwZXJgIChtb3VudCkKKiAgIGBiZWZzX2lnZXRgIChpbm9kZSByZXRyaWV2YWwpCiogICBgYmVmc19nZXRfYmxvY2tgIChkYXRhIGJsb2NrIG1hcHBpbmcpCiogICBgYmVmc19yZWFkX2RhdGFzdHJlYW1gIChyZWFkaW5nIGRhdGEgc3RyZWFtcykKCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgZXh0ZW50IG9mIHRoZSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX3JlYWRfZGF0YXN0cmVhbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL0NoYW5nZUxvZz0xNz1WZXJzaW9uIDAuOSAoMjAwMi0wMy0xNClcbi0tXG5mcy9iZWZzL0NoYW5nZUxvZy0xOS0qIEFkZGVkIFNlcmdleSBTLiBLb3N0eWxpb3YmIzM5O3MgcGF0Y2ggdG8gZWxpbWluYXRlIG1lbWNweSgpIG92ZXJoZWFkXG5mcy9iZWZzL0NoYW5nZUxvZzoyMDpcdGZyb20gYiYjNDM7dHJlZSBvcGVyYXRpb25zLiBDaGFuZ2VzIHRoZSBiZWZzX3JlYWRfZGF0YXN0cmVhbSgpIGludGVyZmFjZS5cbmZzL2JlZnMvQ2hhbmdlTG9nLTIxLVxuLS1cbmZzL2JlZnMvYnRyZWUuYz0xMTk9c3RhdGljIGludCBiZWZzX2NvbXBhcmVfc3RyaW5ncyhjb25zdCB2b2lkICprZXkxLCBpbnQga2V5bGVuMSxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMTI3LSAqXG5mcy9iZWZzL2J0cmVlLmM6MTI4OiAqIENhbGxzIGJlZnNfcmVhZF9kYXRhc3RyZWFtIHRvIHJlYWQgaW4gdGhlIGJ0cmVlIHN1cGVyYmxvY2sgYW5kXG5mcy9iZWZzL2J0cmVlLmMtMTI5LSAqIG1ha2VzIHN1cmUgaXQgaXMgaW4gY3B1IGJ5dGVvcmRlciwgYnl0ZXN3YXBwaW5nIGlmIG5lY2Vzc2FyeS5cbi0tXG5mcy9iZWZzL2J0cmVlLmM9MTM0PWJlZnNfYnRfcmVhZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMTQxLVxuZnMvYmVmcy9idHJlZS5jOjE0MjpcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCAwLCBOVUxMKTtcbmZzL2JlZnMvYnRyZWUuYy0xNDMtXG4tLVxuZnMvYmVmcy9idHJlZS5jLTE3Ny0gKlxuZnMvYmVmcy9idHJlZS5jOjE3ODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBpbmRpY2F0ZWQgYnRyZWUgbm9kZSBhbmRcbmZzL2JlZnMvYnRyZWUuYy0xNzktICogbWFrZXMgc3VyZSBpdHMgaGVhZGVyIGZpZWxkcyBhcmUgaW4gY3B1IGJ5dGVvcmRlciwgYnl0ZXN3YXBwaW5nIGlmXG4tLVxuZnMvYmVmcy9idHJlZS5jPTE5MT1iZWZzX2J0X3JlYWRfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMjAwLVxuZnMvYmVmcy9idHJlZS5jOjIwMTpcdG5vZGUtXHUwMDNlYmggPSBiZWZzX3JlYWRfZGF0YXN0cmVhbShzYiwgZHMsIG5vZGVfb2ZmLCBcdTAwMjZvZmYpO1xuZnMvYmVmcy9idHJlZS5jLTIwMi1cdGlmICghbm9kZS1cdTAwM2ViaCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTMzPXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zOC0vKipcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjM5OiAqIGJlZnNfcmVhZF9kYXRhc3RyZWFtIC0gZ2V0IGJ1ZmZlcl9oZWFkIGNvbnRhaW5pbmcgZGF0YSwgc3RhcnRpbmcgZnJvbSBwb3MuXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MC0gKiBAc2I6IEZpbGVzeXN0ZW0gc3VwZXJibG9ja1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ4PXN0cnVjdCBidWZmZXJfaGVhZCAqXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0OTpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwLVx0XHQgICAgIGJlZnNfb2ZmX3QgcG9zLCB1aW50ICpvZmYpXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MTMwPWJlZnNfcmVhZF9sc3ltbGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMzktXHR3aGlsZSAoYnl0ZXNfcmVhZCBcdTAwM2MgbGVuKSB7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzoxNDA6XHRcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCBieXRlc19yZWFkLCBOVUxMKTtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTE0MS1cdFx0aWYgKCFiaCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTYtXG5mcy9iZWZzL2RhdGFzdHJlYW0uaDo3OnN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTgtXHRcdFx0XHRcdCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIEJFRlMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCRUZTIGZ1bmN0aW9ucy4gRmlyc3QsIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAg4oCTIHRoYXQgb25lJiMzOTtzIG5vbi1zdGF0aWMsIGdvdCBpdC4gVGhlbiwgYGJlZnNfZmlsbF9zdXBlcmAgaXMgYWxzbyBub24tc3RhdGljLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgaG9sZCBvbi4uLiBJIGNvdWxkJiMzOTt2ZSBzd29ybiBJJiMzOTtkIHNlZW4gYGJlZnNfaWdldGAgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYGJlZnNfaWdldGAgYmVmb3JlIG1vdmluZyBmb3J3YXJkLCBqdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfaWdldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL2xpbnV4dmZzLmM9NDc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDgtXHRcdFx0XHQgIHVuc2lnbmVkIGludCk7XG5mcy9iZWZzL2xpbnV4dmZzLmM6NDk6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTtcbmZzL2JlZnMvbGludXh2ZnMuYy01MC1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0xNzM9YmVmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0yMDgtXHR9IGVsc2Uge1xuZnMvYmVmcy9saW51eHZmcy5jOjIwOTpcdFx0aW5vZGUgPSBiZWZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIChpbm9fdCkgb2Zmc2V0KTtcbmZzL2JlZnMvbGludXh2ZnMuYy0yMTAtXHR9XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTI5Mj1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0yOTgtXG5mcy9iZWZzL2xpbnV4dmZzLmM6Mjk5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbmZzL2JlZnMvbGludXh2ZnMuYy0zMDAte1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02Mzg9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19uZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQ2NF90IGlubyxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQxLVx0LyogTm8gbmVlZCB0byBoYW5kbGUgaV9nZW5lcmF0aW9uICovXG5mcy9iZWZzL2xpbnV4dmZzLmM6NjQyOlx0cmV0dXJuIGJlZnNfaWdldChzYiwgaW5vKTtcbmZzL2JlZnMvbGludXh2ZnMuYy02NDMtfVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02NjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjY5LVxuZnMvYmVmcy9saW51eHZmcy5jOjY3MDpcdHBhcmVudCA9IGJlZnNfaWdldChjaGlsZC1cdTAwM2VkX3NiLFxuZnMvYmVmcy9saW51eHZmcy5jLTY3MS1cdFx0XHQgICAodW5zaWduZWQgbG9uZyliZWZzX2luby1cdTAwM2VpX3BhcmVudC5zdGFydCk7XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy04NjgtXHRzYi1cdTAwM2VzX3RpbWVfbWF4ID0gMHhmZmZmZmZmZmZmZmZsbDtcbmZzL2JlZnMvbGludXh2ZnMuYzo4Njk6XHRyb290ID0gYmVmc19pZ2V0KHNiLCBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjYoYmVmc19zYi1cdTAwM2Vyb290X2RpcikpKTtcbmZzL2JlZnMvbGludXh2ZnMuYy04NzAtXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBiZWZzX2lnZXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbHkgb24gYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgYmVmc19sb29rdXBgLCBgYmVmc19uZnNfZ2V0X2lub2RlYCwgYGJlZnNfZ2V0X3BhcmVudGAsIGFuZCBgYmVmc19maWxsX3N1cGVyYC4gVGhpcyBpcyBhIHVzZWZ1bCBpbml0aWFsIGJ1aWxkaW5nIGJsb2NrLgoKTm93LCBob2xkIG9uLi4uIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYGJlZnNfZ2V0X2Jsb2NrYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gSXQgc2hvdWxkIGJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmVmc19nZXRfYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nLTIzMy1cdFNvIGl0IGRvZXMgaS9vIGluIG11Y2ggbGFyZ2VyIGNodW5rcy4gSXQgaXMgdGhlIGNvcnJlY3QgbGludXggd2F5LiBJdCBcbmZzL2JlZnMvQ2hhbmdlTG9nOjIzNDpcdHVzZXMgYmVmc19nZXRfYmxvY2soKSBieSB3YXkgb2YgYmVmc19yZWFkcGFnZSgpIHRvIGZpbmQgdGhlIGRpc2sgb2Zmc2V0cyBcbmZzL2JlZnMvQ2hhbmdlTG9nLTIzNS1cdG9mIGJsb2Nrcywgd2hpY2ggaW4gdHVybiBjYWxscyBiZWZzX2Zwb3MyYnJ1bigpIGluIGRhdGFzdHJlYW0uYyB0byBkbyBcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NDM9c3RhdGljIGludCBiZWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvYmVmcy9saW51eHZmcy5jOjQ0OnN0YXRpYyBpbnQgYmVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbmZzL2JlZnMvbGludXh2ZnMuYy00NS1zdGF0aWMgaW50IGJlZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgYmVmc19leHBvcnRfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTA5LSAqIEluIHR1cm4sIHNpbXBseSBjYWxscyBhIGdlbmVyaWMgYmxvY2sgcmVhZCBmdW5jdGlvbiBhbmRcbmZzL2JlZnMvbGludXh2ZnMuYzoxMTA6ICogcGFzc2VzIGl0IHRoZSBhZGRyZXNzIG9mIGJlZnNfZ2V0X2Jsb2NrLCBmb3IgbWFwcGluZyBmaWxlXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTExLSAqIHBvc2l0aW9ucyB0byBkaXNrIGJsb2Nrcy5cbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTEzPXN0YXRpYyBpbnQgYmVmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvYmVmcy9saW51eHZmcy5jLTExNC17XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTE1Olx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgYmVmc19nZXRfYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTExNi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTExOT1iZWZzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuZnMvYmVmcy9saW51eHZmcy5jLTEyMC17XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTIxOlx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgYmVmc19nZXRfYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTEyMi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzMz1zdGF0aWMgaW50XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTM0OmJlZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuZnMvYmVmcy9saW51eHZmcy5jLTEzNS1cdCAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQyLVxuZnMvYmVmcy9saW51eHZmcy5jOjE0MzpcdGJlZnNfZGVidWcoc2IsIFwmIzM0Oy0tLVx1MDAzZSBiZWZzX2dldF9ibG9jaygpIGZvciBpbm9kZSAlbGx1LCBibG9jayAlbGRcJiMzNDssXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQ0LVx0XHQgICBpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcpYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTE0NS1cdGlmIChjcmVhdGUpIHtcbmZzL2JlZnMvbGludXh2ZnMuYzoxNDY6XHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2JlZnNfZ2V0X2Jsb2NrKCkgd2FzIGFza2VkIHRvIHdyaXRlIHRvIFwmIzM0O1xuZnMvYmVmcy9saW51eHZmcy5jLTE0Ny1cdFx0XHQgICBcJiMzNDtibG9jayAlbGQgaW4gaW5vZGUgJWxsdVwmIzM0OywgKGxvbmcpYmxvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBCRUZTIEZpbGUgU3lzdGVtIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQkVGUyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBsZXZlcmFnZSB0aGVtLiBgYmVmc19nZXRfYmxvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIGl0cyBkaXJlY3QgYWNjZXNzaWJpbGl0eS4gSG1tLCB0aGF0IG1lYW5zIEkgY2FuJiMzOTt0IGp1c3QgY2FsbCBpdCBmcmVlbHkuIFRoYXQgY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGUgcHJvYmxlbS4gV2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byBsb29rIGZvciBvdGhlciBvcHRpb25zIHRvIGFjaGlldmUgbXkgZ29hbC4gSSB3YXMgaG9waW5nIHRvIHVzZSBgYmVmc19yZWFkX2ZvbGlvYCBhbmQgYGJlZnNfYm1hcGAgdG9nZXRoZXIgd2l0aCBpdC4KCldhaXQgYSBzZWNvbmQsIGBiZWZzX3JlYWRfZm9saW9gIGlzIGFsc28gc3RhdGljISBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIHdpdGggYSBkaWZmZXJlbnQgYXBwcm9hY2guIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyB0aHJvdWdoIHRoZSBsaXN0LCBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBhbmQgYGJlZnNfZmJsb2NrMmJydW5gIGFyZSBzdGlsbCBhdmFpbGFibGUgYXMgb3B0aW9ucy4gVGhhdCBzaG91bGQgZG8gdGhlIHRyaWNrLgoKQWgsIGFuZCBnb29kLCBgYmVmc19mYmxvY2syYnJ1bmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBub3QgcmVzdHJpY3RlZCBsaWtlIHRob3NlIG90aGVyIG9uZXMuIEV4Y2VsbGVudCwgdGhpcyBtZWFucyB0aGF0IEkgY2FuIGluY29ycG9yYXRlIHRoaXMgb25lIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX2ZibG9jazJicnVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ5PWJlZnNfcmVhZF9kYXRhc3RyZWFtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYwLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NjE6XHRpZiAoYmVmc19mYmxvY2syYnJ1bihzYiwgZHMsIGJsb2NrLCBcdTAwMjZydW4pICE9IEJFRlNfT0spIHtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYyLVx0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDtCZUZTOiBFcnJvciBmaW5kaW5nIGRpc2sgYWRkciBvZiBibG9jayAlbHVcJiMzNDssXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNzktLyoqXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo4MDogKiBiZWZzX2ZibG9jazJicnVuIC0gZ2l2ZSBiYWNrIGJsb2NrIHJ1biBmb3IgZmJsb2NrXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy04MS0gKiBAc2I6IHRoZSBzdXBlcmJsb2NrXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTQ9aW50XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo5NTpiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy05Ni1cdFx0IGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bilcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMTEtXHRcdGJlZnNfZXJyb3Ioc2IsXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzoxMTI6XHRcdFx0ICAgXCYjMzQ7YmVmc19mYmxvY2syYnJ1bigpIHdhcyBhc2tlZCB0byBmaW5kIGJsb2NrICVsdSwgXCYjMzQ7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMTMtXHRcdFx0ICAgXCYjMzQ7d2hpY2ggaXMgbm90IG1hcHBlZCBieSB0aGUgZGF0YXN0cmVhbVxcblwmIzM0Oyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uaD03PXN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMC1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjExOmludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMi1cdFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0xMTk9YmVmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTI5LSAqXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTMwOiAqIENhbGxzIGJlZnNfZmJsb2NrMmJydW4oKSBpbiBkYXRhc3RyZWFtLmMgdG8gZG8gdGhlIHJlYWwgd29yay5cbmZzL2JlZnMvbGludXh2ZnMuYy0xMzEtICovXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUxLVxuZnMvYmVmcy9saW51eHZmcy5jOjE1MjpcdHJlcyA9IGJlZnNfZmJsb2NrMmJydW4oc2IsIGRzLCBibG9jaywgXHUwMDI2cnVuKTtcbmZzL2JlZnMvbGludXh2ZnMuYy0xNTMtXHRpZiAocmVzICE9IEJFRlNfT0spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQW5hbHl6aW5nIGBiZWZzX2ZibG9jazJicnVuYCYjMzk7cyBTY29wZSBhbmQgUG90ZW50aWFsIFJlbGV2YW5jZSoqCgpPa2F5LCBzbyBgYmVmc19mYmxvY2syYnJ1bmAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBpbXBvcnRhbnQgcG9pbnQuIFRoYXQgZmFjdCBhbG9uZSB0ZWxscyBtZSBpdCBtaWdodCBiZSBwYXJ0IG9mIHRoZSBBUEkuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGluIHRoaXMgQkVGUyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IGFsb25nIHdpdGggdGhlc2UgZm9jdXMgc3ltYm9sczogYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYW5kIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXkgaW50ZXJyZWxhdGUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGRhdGEgZmxvdyBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMuCgpCdXQsIEkgYWxzbyBjYW4mIzM5O3QganVzdCBmaXhhdGUgb24gdGhlc2UuIEEgZGVlcGVyIGV4cGxvcmF0aW9uIGlzIG5lZWRlZCwgc28gSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUgYmFzZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBvdGhlciBoaWRkZW4gZ2VtcyB0aGF0IGFyZSB2YWx1YWJsZSwgYW5kIGNvdWxkIGJlIG1pc3NlZCBpZiBJIGZvY3VzIHRvbyBuYXJyb3dseSBvbiB0aGUgc3RhdGVkIHN5bWJvbHMuIEl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSBzZWFyY2ggYW5kIHNlZSB3aGF0IGVsc2UgaXMgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBiZWZzXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmVmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9idHJlZS5oLTYtXG5mcy9iZWZzL2J0cmVlLmg6NzppbnQgYmVmc19idHJlZV9maW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxuZnMvYmVmcy9idHJlZS5oLTgtXHRcdCAgICBjb25zdCBjaGFyICprZXksIGJlZnNfb2ZmX3QgKnZhbHVlKTtcbmZzL2JlZnMvYnRyZWUuaC05LVxuZnMvYmVmcy9idHJlZS5oOjEwOmludCBiZWZzX2J0cmVlX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZHMsXG5mcy9iZWZzL2J0cmVlLmgtMTEtXHRcdCAgICBsb2ZmX3Qga2V5X25vLCBzaXplX3QgYnVmc2l6ZSwgY2hhciAqa2V5YnVmLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEwLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTE6aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEyLVx0XHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XG4tLVxuZnMvYmVmcy9pbm9kZS5oLTUtXG5mcy9iZWZzL2lub2RlLmg6NjppbnQgYmVmc19jaGVja19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlICpyYXdfaW5vZGUsXG5mcy9iZWZzL2lub2RlLmgtNy1cdFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBpbm9kZSk7XG4tLVxuZnMvYmVmcy9zdXBlci5oLTQtXG5mcy9iZWZzL3N1cGVyLmg6NTppbnQgYmVmc19sb2FkX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfc3VwZXJfYmxvY2sgKmRpc2tfc2IpO1xuZnMvYmVmcy9zdXBlci5oOjY6aW50IGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzU5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJFRlMgSW5vZGUgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmaWxlc3lzdGVtIGludGVncml0eSwgYW5kIGBiZWZzX2NoZWNrX2lub2RlYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQuIFRoYXQgb25l4oCZcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgaW5vZGUgc3RydWN0dXJlcy4gUmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIGBiZWZzX2NoZWNrX2lub2RlYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyBlcnJvciBkZXRlY3Rpb24gYW5kIHBvdGVudGlhbGx5LCB3aGF0IGtpbmRzIG9mIGNvcnJ1cHRpb24gaXQmIzM5O3MgZGVzaWduZWQgdG8gY2F0Y2guIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbuKAmXMgYXBwcm9hY2ggd2lsbCBnaXZlIHVzIGEgc3Ryb25nIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvaW5vZGUuYz0xOD1pbnRcbmZzL2JlZnMvaW5vZGUuYzoxOTpiZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcbmZzL2JlZnMvaW5vZGUuYy0yMC1cdFx0IGJlZnNfYmxvY2tucl90IGlub2RlKVxuLS1cbmZzL2JlZnMvaW5vZGUuaC01LVxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxuZnMvYmVmcy9pbm9kZS5oLTctXHRcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0yOTk9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0zMzQtXG5mcy9iZWZzL2xpbnV4dmZzLmM6MzM1Olx0aWYgKGJlZnNfY2hlY2tfaW5vZGUoc2IsIHJhd19pbm9kZSwgaW5vZGUtXHUwMDNlaV9pbm8pICE9IEJFRlNfT0spIHtcbmZzL2JlZnMvbGludXh2ZnMuYy0zMzYtXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O0JhZCBpbm9kZTogJWxsdVwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0MQoJCQkJCQkJb3V0cHV0OiAyNjkKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIFRocm91Z2ggYSBCRUZTIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCBmb3IgdGhlIEJlT1MgZmlsZXN5c3RlbSBkcml2ZXIsIEJFRlMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTt2ZSBub3RpY2VkIGlzIHRoZSBjYWxsIGdyYXBoOiBgYmVmc19jaGVja19pbm9kZWAgaXMgdHJpZ2dlcmVkIGJ5IGBiZWZzX2lnZXRgLCBhbmQgYGJlZnNfbG9hZF9zYmAgaXMgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhlIG9uZXMgdGhhdCBtYXR0ZXIgYXJlOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19sb2FkX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYGJlZnNfZmJsb2NrMmJydW5gLCBhbmQgYGJlZnNfY2hlY2tfaW5vZGVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgYWNjZXNzIGZ1bmN0aW9ucy4KClRoZSBjb25maWcgcmVxdWlyZWQgaXMgYEJFRlNfRlNgLCB3aGljaCBpcyBnb29kIG5ld3M7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBCRUZTX0ZTYCBpcyB0aGUgKm9ubHkqIGRlcGVuZGVuY3kuIE5vIGhpZGRlbiBnb3RjaGFzLCBpdCBzZWVtcy4KCk5vdywgbGV0JiMzOTtzIGFydGljdWxhdGUgdGhlIGNvcmUgaXNzdWUgYW5kIHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3dzIHdpdGhpbiB0aGUgQkVGUyBkcml2ZXIuIFNwZWNpZmljYWxseSwgYGJlZnNfY2hlY2tfc2JgIGlzIGhhdmluZyBhIGJvdW5kcyBjaGVjayBhZGRlZCB0byBhdm9pZCBzaGlmdGluZyBieSAzMiBvciBtb3JlIGJpdHMsIHdoaWNoIGlzIHVuZGVmaW5lZCBmb3IgMzItYml0IGludGVnZXJzLiBTbWFydC4gV2UgZG9uJiMzOTt0IHdhbnQgdGhlIGhhcmR3YXJlIHNwaXR0aW5nIG91dCBnYXJiYWdlLiBBbHNvLCBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIGB1NjRgKSBhcmUgYWRkZWQgd2l0aGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgb3ZlcmZsb3dzIHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgICh3aGljaCBpcyBgdTMyYCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gbW91bnQgcHJvY2VzcyAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCwgdml0YWxseSwgdGhlIGFjY2VzcyBwYXRocyBmb3IgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gVGhpcyBoaWdobGlnaHRzIHRoYXQgYSBtYWxpY2lvdXNseSBjcmFmdGVkIGltYWdlIGNvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlc2UgYnVncy4KCkdpdmVuIHRoYXQgdGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIGRhdGEgYWNjZXNzLCBJJiMzOTtkIHNheSB0aGlzIGhhcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaW1wYWN0LiBJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBleHBvc3VyZSBoZXJlIGlzIHRoYXQgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHJlc3VsdCBpbiB1bmRlc2lyYWJsZSBzaWRlIGVmZmVjdHMuCgpBbHJpZ2h0LCB0aGUga2V5IGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWU6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGBiZWZzX2xvYWRfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBgYmVmc19mYmxvY2syYnJ1bmAsIGFuZCBgYmVmc19jaGVja19pbm9kZWAuIFRoZSBjb25maWcgdG8gZW5hYmxlIGlzIGBCRUZTX0ZTYC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkVGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX3NiJiMzNDssCiAgICAmIzM0O2JlZnNfbG9hZF9zYiYjMzQ7LAogICAgJiMzNDtiZWZzX3JlYWRfZGF0YXN0cmVhbSYjMzQ7LAogICAgJiMzNDtiZWZzX2ZibG9jazJicnVuJiMzNDssCiAgICAmIzM0O2JlZnNfY2hlY2tfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgQmVPUyBmaWxlc3lzdGVtIChCRUZTKSBkcml2ZXIuIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYmAgdG8gcHJldmVudCBzaGlmdGluZyBieSAzMiBvciBtb3JlLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gSXQgYWxzbyBhZGRzIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgKGEgNjQtYml0IGludGVnZXIpIGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGBhbGxvY2F0aW9uX2dyb3VwYCAoYSAzMi1iaXQgaW50ZWdlcikuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCB3aGVuIGFjY2Vzc2luZyBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBTaW5jZSBCRUZTIGNhbiBiZSBtb3VudGVkIGZyb20gYSB1c2VyLXByb3ZpZGVkIGltYWdlLCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGVzZSBidWdzLCBtYWtpbmcgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCRUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmVmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2JlZnNfY2hlY2tfc2ImIzM0OywKICAgICYjMzQ7YmVmc19sb2FkX3NiJiMzNDssCiAgICAmIzM0O2JlZnNfcmVhZF9kYXRhc3RyZWFtJiMzNDssCiAgICAmIzM0O2JlZnNfZmJsb2NrMmJydW4mIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBCZU9TIGZpbGVzeXN0ZW0gKEJFRlMpIGRyaXZlci4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiYCB0byBwcmV2ZW50IHNoaWZ0aW5nIGJ5IDMyIG9yIG1vcmUsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgMzItYml0IGludGVnZXJzLiBJdCBhbHNvIGFkZHMgY2FzdHMgdG8gYGJlZnNfYmxvY2tucl90YCAoYSA2NC1iaXQgaW50ZWdlcikgaW4gYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgIChhIDMyLWJpdCBpbnRlZ2VyKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50IChgYmVmc19maWxsX3N1cGVyYCkgYW5kIHdoZW4gYWNjZXNzaW5nIGlub2RlcyBhbmQgZGF0YSBibG9ja3MuIFNpbmNlIEJFRlMgY2FuIGJlIG1vdW50ZWQgZnJvbSBhIHVzZXItcHJvdmlkZWQgaW1hZ2UsIGEgY3JhZnRlZCBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoZXNlIGJ1Z3MsIG1ha2luZyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmgKaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmVmcy9iZWZzLmgKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgQkVGU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90CiBpYWRkcjJibG9ja25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfaW5vZGVfYWRkciAqaWFkZHIpCiB7Ci0JcmV0dXJuICgoaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwomIzQzOwlyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwogCQlpYWRkci0mZ3Q7c3RhcnQpOwogfQogCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubykKIAogCWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vICZndDsmZ3Q7IEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdDsKIAlpYWRkci5zdGFydCA9Ci0JICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwomIzQzOwkgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwogCWlhZGRyLmxlbiA9IDE7CiAKIAlyZXR1cm4gaWFkZHI7CmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmMKaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuYwpAQCAtOTMsMTcgJiM0Mzs5MywyMiBAQCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay4KIAkgKi8KIAotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewomIzQzOwlpZiAoYmVmc19zYi0mZ3Q7YmxvY2tfc2hpZnQgJmd0Oz0gMzIgfHwKJiM0MzsJICAgICgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewogCQliZWZzX2Vycm9yKHNiLCAmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuICYjMzQ7CiAJCQkgICAmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LiYjMzQ7KTsKIAkJcmV0dXJuIEJFRlNfRVJSOwogCX0KIAotCiAJLyogYWdfc2hpZnQgYWxzbyBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGJsb2Nrc19wZXJfYWcgaW4gYQogCSAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVjawogCSAqLwotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKJiM0MzsJaWYgKGJlZnNfc2ItJmd0O2FnX3NoaWZ0ICZndDs9IDMyKSB7CiYjNDM7CQliZWZzX2Vycm9yKHNiLCAmIzM0O2FnX3NoaWZ0ICZndDs9IDMyLiBDb3JydXB0aW9uIGxpa2VseS4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gQkVGU19FUlI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKIAkJYmVmc19lcnJvcihzYiwgJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLiYjMzQ7KTsKIAogCWlmIChiZWZzX3NiLSZndDtsb2dfc3RhcnQgIT0gYmVmc19zYi0mZ3Q7bG9nX2VuZCB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MwoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmVGUyBJbnRlZ2VyIE92ZXJmbG93IGFuZCBTaGlmdCBPdXQtb2YtQm91bmRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGZvciB0aGUgQmVGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGJlZnMuaGAgYW5kIGBzdXBlci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdGFuZGFyZCBpc3N1ZTogcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBkdXJpbmcgYml0LXNoaWZ0aW5nIG9wZXJhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBgYmVmc19ibG9ja25yX3RgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGlzIGEgNjQtYml0IGludGVnZXIgdHlwZSwgdGhvdWdoIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gdGhlIGNvZGUuIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGEgYHU2NGAuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGZvciB0aGUgYGlhZGRyLSZndDthbGxvY2F0aW9uX2dyb3VwYCB2YXJpYWJsZSBiZWZvcmUgdGhlIGxlZnQtc2hpZnQgYnkgYEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdGAuIFRoYXTigJlzIHRoZSBmaXJzdCByZWQgZmxhZyDigJMgYSBzaGlmdCBvcGVyYXRpb24uIFRoYXQgc3VnZ2VzdHMgYSBzaGlmdCBvZiBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXBgIGxlZnQgYnkgYGFnX3NoaWZ0YC4gVGhlIGZpeCBhbHNvIGluY2x1ZGVzIHNhbml0eSBjaGVja3Mgd2l0aGluIGBiZWZzX2NoZWNrX3NiYCB0byBlbnN1cmUgdGhhdCBib3RoIGBiZWZzX3NiLSZndDtibG9ja19zaGlmdGAgYW5kIGBiZWZzX3NiLSZndDthZ19zaGlmdGAgYXJlIGxlc3MgdGhhbiAzMi4gVGhpcyBpcyBjbGV2ZXIuIEl0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGJvdGggc2hpZnQtb3V0LW9mLWJvdW5kcyAoaWYgYGFnX3NoaWZ0YCBpcyAzMiBvciBncmVhdGVyKSBhbmQgaW50ZWdlciBvdmVyZmxvdyAoaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMgdG9vIGxhcmdlIGZvciB0aGUgdGFyZ2V0IHR5cGUpLgoKVGhlIGdvYWwgaGVyZSBpcyBhdm9pZGluZyBVQlNBTiB3YXJuaW5ncyBvciBvdGhlciBpc3N1ZXMgd2l0aCBidWlsZHMgdXNpbmcga2VybmVsIGFkZHJlc3Mgc2FuaXRpemVycyAoS0FTQU4pLiBJdCYjMzk7cyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCwgYW5kIG5vdGhpbmcgcG9pbnRzIHRvIGFueSBraW5kIG9mIGluZm9ybWF0aW9uIGxlYWsuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgY2FzdHMgdG8gbWFrZSBzdXJlIGludGVnZXIgb3BlcmF0aW9ucyBiZWhhdmUgYXMgZXhwZWN0ZWQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSByaXNrcyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClNpbmNlIHRoaXMgaXMgcHVyZWx5IGFib3V0IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBpc3N1ZXMgaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0uIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYigpYCBhbmQgY2FzdHMgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHNoaWZ0aW5nLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBhcmUgYnVncyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGlzc3VlcyBpbiB0aGUgQmVGUyBmaWxlIHN5c3RlbS4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiKClgIGFuZCBjYXN0cyBgaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxMS41MjExMTkzNDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODAwNDE4ODcxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkVGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiYmVmc19jaGVja19zYlwiLFxuICAgIFwiYmVmc19sb2FkX3NiXCIsXG4gICAgXCJiZWZzX3JlYWRfZGF0YXN0cmVhbVwiLFxuICAgIFwiYmVmc19mYmxvY2syYnJ1blwiLFxuICAgIFwiYmVmc19jaGVja19pbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MTEuNTIxMTI1ODI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDA3NjIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzcwOGFmMGJjNTVjNWM0ZjY0MWFmOTcwYjQ5ZDdkMjM1YTNlMzA5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmhcXG5pbmRleCA3Y2Q0NzI0NTY5NGRlLi5iOGM3YjdmODFmMzljIDEwMDY0NFxcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXFxuKysrIGIvZnMvYmVmcy9iZWZzLmhcXG5AQCAtMTIyLDcgKzEyMiw3IEBAIEJFRlNfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XFxuIGlhZGRyMmJsb2Nrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19pbm9kZV9hZGRyICppYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gKChpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcXHUwMDNjXFx1MDAzYyBCRUZTX1NCKHNiKS1cXHUwMDNlYWdfc2hpZnQpICtcXG4rXFx0cmV0dXJuICgoKGJlZnNfYmxvY2tucl90KWlhZGRyLVxcdTAwM2VhbGxvY2F0aW9uX2dyb3VwIFxcdTAwM2NcXHUwMDNjIEJFRlNfU0Ioc2IpLVxcdTAwM2VhZ19zaGlmdCkgK1xcbiBcXHRcXHRpYWRkci1cXHUwMDNlc3RhcnQpO1xcbiB9XFxuIFxcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxcbiBcXG4gXFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXFx1MDAzZVxcdTAwM2UgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0O1xcbiBcXHRpYWRkci5zdGFydCA9XFxuLVxcdCAgICBibG9ja25vIC0gKGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXFx1MDAzY1xcdTAwM2MgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0KTtcXG4rXFx0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXFx1MDAzY1xcdTAwM2MgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0KTtcXG4gXFx0aWFkZHIubGVuID0gMTtcXG4gXFxuIFxcdHJldHVybiBpYWRkcjtcXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXFxuaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDRcXG4tLS0gYS9mcy9iZWZzL3N1cGVyLmNcXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcXG5AQCAtOTMsMTcgKzkzLDIyIEBAIGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cXG4gXFx0ICovXFxuIFxcbi1cXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2MgYmVmc19zYi1cXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NpemUpIHtcXG4rXFx0aWYgKGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NoaWZ0IFxcdTAwM2U9IDMyIHx8XFxuK1xcdCAgICAoMVUgXFx1MDAzY1xcdTAwM2MgYmVmc19zYi1cXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NpemUpIHtcXG4gXFx0XFx0YmVmc19lcnJvcihzYiwgXFxcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcIkNvcnJ1cHRpb24gbGlrZWx5LlxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gQkVGU19FUlI7XFxuIFxcdH1cXG4gXFxuLVxcbiBcXHQvKiBhZ19zaGlmdCBhbHNvIGVuY29kZXMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgYmxvY2tzX3Blcl9hZyBpbiBhXFxuIFxcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xcbiBcXHQgKi9cXG4tXFx0aWYgKCgxIFxcdTAwM2NcXHUwMDNjIGJlZnNfc2ItXFx1MDAzZWFnX3NoaWZ0KSAhPSBiZWZzX3NiLVxcdTAwM2VibG9ja3NfcGVyX2FnKVxcbitcXHRpZiAoYmVmc19zYi1cXHUwMDNlYWdfc2hpZnQgXFx1MDAzZT0gMzIpIHtcXG4rXFx0XFx0YmVmc19lcnJvcihzYiwgXFxcImFnX3NoaWZ0IFxcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEJFRlNfRVJSO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKDFVIFxcdTAwM2NcXHUwMDNjIGJlZnNfc2ItXFx1MDAzZWFnX3NoaWZ0KSAhPSBiZWZzX3NiLVxcdTAwM2VibG9ja3NfcGVyX2FnKVxcbiBcXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiYWdfc2hpZnQgZGlzYWdyZWVzIHdpdGggYmxvY2tzX3Blcl9hZy5cXFwiKTtcXG4gXFxuIFxcdGlmIChiZWZzX3NiLVxcdTAwM2Vsb2dfc3RhcnQgIT0gYmVmc19zYi1cXHUwMDNlbG9nX2VuZCB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxMS45MjI2NTUzODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjk2OTIwNDk4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkVGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiYmVmc19jaGVja19zYlwiLFxuICAgIFwiYmVmc19sb2FkX3NiXCIsXG4gICAgXCJiZWZzX3JlYWRfZGF0YXN0cmVhbVwiLFxuICAgIFwiYmVmc19mYmxvY2syYnJ1blwiLFxuICAgIFwiYmVmc19jaGVja19pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2M3MDhhZjBiYzU1YzVjNGY2NDFhZjk3MGI0OWQ3ZDIzNWEzZTMwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzLmggYi9mcy9iZWZzL2JlZnMuaFxuaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDRcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXG4rKysgYi9mcy9iZWZzL2JlZnMuaFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSArXG4rXHRyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpICtcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuIFxuIFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXHUwMDNlXHUwMDNlIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0O1xuIFx0aWFkZHIuc3RhcnQgPVxuLVx0ICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuK1x0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiBcdGlhZGRyLmxlbiA9IDE7XG4gXG4gXHRyZXR1cm4gaWFkZHI7XG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXG5pbmRleCA3YzUwMDI1Yzk5ZDhhLi45ZjIxZjczMmQyYzE4IDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9zdXBlci5jXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcbkBAIC05MywxNyArOTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbitcdGlmIChiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0IFx1MDAzZT0gMzIgfHxcbitcdCAgICAoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tfc2l6ZSkge1xuIFx0XHRiZWZzX2Vycm9yKHNiLCBcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwiXG4gXHRcdFx0ICAgXCJDb3JydXB0aW9uIGxpa2VseS5cIik7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbitcdGlmIChiZWZzX3NiLVx1MDAzZWFnX3NoaWZ0IFx1MDAzZT0gMzIpIHtcbitcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cIik7XG4rXHRcdHJldHVybiBCRUZTX0VSUjtcbitcdH1cbitcbitcdGlmICgoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiBcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwiKTtcbiBcbiBcdGlmIChiZWZzX3NiLVx1MDAzZWxvZ19zdGFydCAhPSBiZWZzX3NiLVx1MDAzZWxvZ19lbmQgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjExLjkyMjcwMTkyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDE5MzIyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQkVGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEJFRlMsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZnMvYmVmcy9iZWZzLmhgIGFuZCBgZnMvYmVmcy9zdXBlci5jYC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvci4gSXQgc2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBhcmUgYWRkaW5nIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgaW4gdGhvc2UgYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgZnVuY3Rpb25zLiBUaGV5J3JlIGFsc28gaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItXHUwMDNlYWdfc2hpZnRgIHdpdGhpbiBgYmVmc19jaGVja19zYmAuXG5cblJpZ2h0IGF3YXksIEkgd2FudCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRhdGEgdHlwZXMuIEknbSBiZXR0aW5nIHRoYXQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgSSdkIHdhZ2VyIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLiBUaGF0IHNoaWZ0IG9wZXJhdGlvbiwgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0YCwgaXMgdGhlIG9uZSB0aGF0J3MgZ290IG15IGF0dGVudGlvbi4gSWYgYGFsbG9jYXRpb25fZ3JvdXBgIGlzIDMyLWJpdCwgYW5kIHRoZSBzaGlmdCByZXN1bHRzIGluIGEgdmFsdWUgbGFyZ2VyIHRoYW4gMzIgYml0cywgd2UncmUgaGVhZGluZyBzdHJhaWdodCBpbnRvIG92ZXJmbG93IHRlcnJpdG9yeS4gTm8gZ29vZC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gYWhlYWQgYW5kIGRpdmUgaW50byB0aG9zZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGRhdGEgdHlwZSBhc3N1bXB0aW9ucyBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIHZhbGlkYXRlIHRoZSBwcm9wb3NlZCBmaXggYW5kIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxNy43NjQ2MzY3NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1ODU0NjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eXBlZGVmLipiZWZzX2Jsb2NrbnJfdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2JlZnMuaC0xNy1cXG5mcy9iZWZzL2JlZnMuaDoxODp0eXBlZGVmIHU2NCBiZWZzX2Jsb2NrbnJfdDtcXG5mcy9iZWZzL2JlZnMuaC0xOS0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoyMC42MjMxOTE2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2NDQxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQkVGUyBEYXRhIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGlzY3Vzc2lvbiBzZWVtcyB0byBiZSB6ZXJvaW5nIGluIG9uIEJFRlMgZGF0YSBzdHJ1Y3R1cmVzLiBGaXJzdCwgY29uZmlybWF0aW9uOiB5ZXMsIHRoYXQgYGJlZnNfYmxvY2tucl90YCB0eXBlIGlzIGluZGVlZCBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBhIGB1NjRgLiBHb29kLCBnb29kLCBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGJsb2NrIGFkZHJlc3NpbmcuIE5vdywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBob3cgYGJlZnNfaW5vZGVfYWRkcmAgaXMgaGFuZGxlZC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbiB0aGUgYmxvY2sgbWFwIHN0cnVjdHVyZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgaW5vZGUgYWRkcmVzcyB0eXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBibG9jayBudW1iZXIgdHlwZSB0byBjb250aW51ZSB3aXRoIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MjMuNzA5NjM1ODQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTcyMDMyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJlZnNfaW5vZGVfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL0NoYW5nZUxvZz0yMDQ9VmVyc2lvbiAwLjQgKDIwMDEtMTAtMjgpXFxuLS1cXG5mcy9iZWZzL0NoYW5nZUxvZy0yNDgtPT09PT09PT09PVxcbmZzL2JlZnMvQ2hhbmdlTG9nOjI0OToqIEZpeCBuYXN0eSBidWcgaW4gY29udmVydGluZyBibG9jayBudW1iZXJzIHRvIHN0cnVjdCBiZWZzX2lub2RlX2FkZHIuIFxcbmZzL2JlZnMvQ2hhbmdlTG9nLTI1MC1cXHRTdWJ0bGUsIGJlY2F1c2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBvbmx5IHNvbWV0aW1lcyB3cm9uZy4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjI1LjcyNjg0NjQ1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTU4ODgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYmVmc19pbm9kZV9hZGRyYCBHcmVwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBiZWZzX2lub2RlX2FkZHJgLiBUaGUgZmFjdCB0aGF0IGl0J3Mgc3VyZmFjaW5nIGFzIGEgdGFyZ2V0IGZvciBhIGBncmVwYCBjb21tYW5kIG1lYW5zIGl0J3MgbGlrZWx5IGEgc2lnbmlmaWNhbnQgaWRlbnRpZmllciB3aXRoaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0ncyBpbnRlcm5hbHMuIEl0J3MgZWl0aGVyIGEgZGF0YSBzdHJ1Y3R1cmUgZmllbGQsIGEgZnVuY3Rpb24gbmFtZSwgb3IgbWF5YmUgZXZlbiBhIGNvbnN0YW50IHVzZWQgaW4gaW5vZGUgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBiZXQgaXQncyBwcm9iYWJseSBvbmUgb2YgdGhlIGZpcnN0IHR3by4gTm93LCB3aXRob3V0IG1vcmUgY29udGV4dCwgaXQncyB0b3VnaCB0byBuYWlsIGRvd24gKmV4YWN0bHkqIHdoYXQgdGhpcyBgZ3JlcGAgaXMgbG9va2luZyBmb3IuIElzIGl0IHRyYWNpbmcgdXNlcyBvZiB0aGUgYWRkcmVzcz8gUG90ZW50aWFsIGJ1Z3MgaW52b2x2aW5nIGhvdyBpdCdzIGhhbmRsZWQ/IE9yLCBhbSBJIGxvb2tpbmcgdG8gbG9jYXRlIGEgc3BlY2lmaWMgaW5vZGUgc3RydWN0dXJlLCBwZXJoYXBzIG9uZSB0aGF0J3MgYmVlbiBjb3JydXB0ZWQgb3IgaXMgYmVpbmcgZXJyb25lb3VzbHkgYWNjZXNzZWQ/IEknZCByZWFsbHkgbmVlZCB0byBzZWUgdGhlIGBncmVwYCBjb21tYW5kIGl0c2VsZiBhbmQsIGlkZWFsbHksIHRoZSBjb2RlYmFzZSBzdXJyb3VuZGluZyBpdCB0byB1bmRlcnN0YW5kIHRoZSB0cnVlIGludGVudC4gVGhhdCBzYWlkLCB0aGUgZmFjdCB0aGF0IGl0J3MgaW1wb3J0YW50IGVub3VnaCB0byBiZSAqc2VhcmNoZWQgZm9yKiBzaWduaWZpZXMgaXRzIGltcG9ydGFuY2UsIHBvc3NpYmx5IGluIGRlYnVnZ2luZywgYXVkaXRpbmcgb3IgcGVyZm9ybWFuY2UuIEZ1cnRoZXIgZXhwbG9yYXRpb24gcmVxdWlyZXMgbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjMwLjgyMjczNzIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5ODQ0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYuKmJlZnNfaW5vZGVfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDc9dHlwZWRlZiBiZWZzX2Rpc2tfYmxvY2tfcnVuIGJlZnNfZGlza19pbm9kZV9hZGRyO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjMzLjUwMjYwOTkwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDU0NzcxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBiZWZzX2Jsb2NrX3J1bmAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgYmVmc19ibG9ja19ydW5gLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaXQgdG8gc2VlIHdoZXJlIHdlJ3JlIGF0LCBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiBvcmlnaW4uIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcywgbG9vayBhdCB0aGUgbGFzdCB0aW1lIGl0IHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBsb2dzIGZvciByZWNlbnQgZXJyb3JzLCBpZiBhbnkuIEJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIEknbGwgYXNzZXNzIHdoZXRoZXIgaXQncyBydW5uaW5nIGFzIGV4cGVjdGVkLCBvciBpZiB0aGVyZSdzIGFuIGlzc3VlIEkgbmVlZCB0byBhZGRyZXNzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgZGV0ZXJtaW5lZC4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIHJlc3RhcnRpbmcgaXQsIG9yIGl0IGNvdWxkIGJlIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVjZW50IG1ldHJpY3MgYXJvdW5kIHRoaXMgaWYgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MzguNDA4MDkwMTkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM0ODk2NjMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmVmc19ibG9ja19ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjQwLjI0Mjk5NzgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2MzE0MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIERhdGEgU3RydWN0dXJlIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0b3lpbmcgd2l0aCB0aGUgaWRlYSBvZiBuYW1pbmcgdGhlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBibG9jayBydW4gaW4gdGhlIGJlZnMgZmlsZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB3aXRoIHNvbWV0aGluZyBsaWtlIGB0eXBlZGVmIHN0cnVjdCBiZWZzX2Jsb2NrX3J1bmAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRlc2NyaXB0aXZlLiBJdCBjbGVhcmx5IHRpZXMgdGhlIHN0cnVjdHVyZSB0byB0aGUgQkUgRmlsZSBTeXN0ZW0gYW5kIGhpZ2hsaWdodHMgaXRzIHB1cnBvc2Ugb2YgaGFuZGxpbmcgYmxvY2sgcnVucy4gSXQncyBjb25jaXNlLCBlYXN5IHRvIHVuZGVyc3RhbmQgYXQgYSBnbGFuY2UsIGFuZCBnZXRzIHRoZSBqb2IgZG9uZSB3aXRob3V0IGJlaW5nIG92ZXJseSB2ZXJib3NlLiBJdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZmluaW5nIHRoaXMgY3J1Y2lhbCBkYXRhIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjQzLjU1OTMxNTQyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjQ4MjI4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZWRlZiBzdHJ1Y3QuKmJlZnNfYmxvY2tfcnVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzo0Ni4zMDU4MDU4NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzQzMDA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIFNlYXJjaCBmb3IgYGJlZnNfYmxvY2tfcnVuYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgc29tZXRoaW5nIG91dCwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGp1c3QgKmdyZXAqIGZvciBzb21ldGhpbmcgSSBrbm93IEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCwgYSBrbm93biBmdW5jdGlvbiBuYW1lOiBgYmVmc19ibG9ja19ydW5gLiBUaGF0IG5hbWUgZ2l2ZXMgbWUgYSBjbHVlIGFib3V0IHdoZXJlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgQkVGUyBmaWxlc3lzdGVtIHRoYXQgbWFuYWdlcyBibG9ja3Mgb2YgZGF0YSBhbmQgdGhlIGFjdCBvZiBydW5uaW5nIG9yIGV4ZWN1dGluZyBzb21lIHNvcnQgb2Ygb3BlcmF0aW9uIGluIGl0LiBLbm93aW5nIHRoZSBuYW1lIGlzIG9uZSB0aGluZywgYnV0IHF1aWNrbHkgc2VlaW5nIHdoZXJlIGl0J3MgdXNlZCBpcyB3aGF0IEkgbmVlZC4gR3JlcHBpbmcgd2lsbCBnaXZlIG1lIGEgZmFzdCB2aWV3IG9mIHRoZSBwbGFjZXMgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzo0OS43MjMyMzg0MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQwNTAwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19ibG9ja19ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9iZWZzLmg9MzI9c3RydWN0IGJlZnNfc2JfaW5mbyB7XFxuLS1cXG5mcy9iZWZzL2JlZnMuaC01MC1cXHQvKiBKb3VybmFsIGxvZyBlbnRyeSAqL1xcbmZzL2JlZnMvYmVmcy5oOjUxOlxcdGJlZnNfYmxvY2tfcnVuIGxvZ19ibG9ja3M7XFxuZnMvYmVmcy9iZWZzLmgtNTItXFx0YmVmc19vZmZfdCBsb2dfc3RhcnQ7XFxuLS1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDE9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTA0LVxcdHUxNiBsZW47XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTA1On0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTEwNi1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDc9dHlwZWRlZiBiZWZzX2Rpc2tfYmxvY2tfcnVuIGJlZnNfZGlza19pbm9kZV9hZGRyO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXFxuLS1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xNTc9dHlwZWRlZiBzdHJ1Y3Qge1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE1ODpcXHRiZWZzX2Jsb2NrX3J1biBkaXJlY3RbQkVGU19OVU1fRElSRUNUX0JMT0NLU107XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTU5LVxcdGJlZnNfb2ZmX3QgbWF4X2RpcmVjdF9yYW5nZTtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaDoxNjA6XFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3Q7XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTYxLVxcdGJlZnNfb2ZmX3QgbWF4X2luZGlyZWN0X3JhbmdlO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE2MjpcXHRiZWZzX2Jsb2NrX3J1biBkb3VibGVfaW5kaXJlY3Q7XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTYzLVxcdGJlZnNfb2ZmX3QgbWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTI0PXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5fZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUtXFx0XFx0XFx0XFx0IGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjY6XFx0XFx0XFx0XFx0IGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI3LVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTI4PXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5faW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMwLVxcdFxcdFxcdFxcdCAgIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE6XFx0XFx0XFx0XFx0ICAgYmVmc19ibG9ja19ydW4gKnJ1bik7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzItXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzUtXFx0XFx0XFx0XFx0ICAgICAgYmVmc19ibG9ja25yX3QgYmxvY2tubyxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozNjpcXHRcXHRcXHRcXHQgICAgICBiZWZzX2Jsb2NrX3J1biAqcnVuKTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zNy1cXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ5PWJlZnNfcmVhZF9kYXRhc3RyZWFtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTItXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MzpcXHRiZWZzX2Jsb2NrX3J1biBydW47XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTQtXFx0YmVmc19ibG9ja25yX3QgYmxvY2s7XFx0LyogYmxvY2sgY29yZXNwb25kaW5nIHRvIHBvcyAqL1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTU9YmVmc19mYmxvY2syYnJ1bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjk2OlxcdFxcdCBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtOTcte1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MjUxPWJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI1MjpcXHRcXHQgICAgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLCBiZWZzX2Jsb2NrX3J1biAqcnVuKVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI1My17XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjU0LVxcdGludCBpO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI1NTpcXHRjb25zdCBiZWZzX2Jsb2NrX3J1biAqYXJyYXkgPSBkYXRhLVxcdTAwM2VkaXJlY3Q7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjU2LVxcdGJlZnNfYmxvY2tucl90IHN1bTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTMwNT1iZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA3LVxcdFxcdFxcdGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzA4OlxcdFxcdFxcdGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA5LXtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMxNi1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTc6XFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVxcdTAwM2VpbmRpcmVjdDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTgtXFx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyZWN0KTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDE2LVxcdFxcdFxcdCAgIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDE3OlxcdFxcdFxcdCAgIGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDE4LXtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQyOS1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluZGlyX2Jsb2NrO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQzMDpcXHRiZWZzX2Jsb2NrX3J1biBpbmRpcl9ydW47XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDMxLVxcdGJlZnNfZGlza19pbm9kZV9hZGRyICppYWRkcl9hcnJheTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTExPWludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTI6XFx0XFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEzLVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jPTcyPWJlZnNfZHVtcF9pbm9kZShjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlICppbm9kZSlcXG4tLVxcbmZzL2JlZnMvZGVidWcuYy03NS1cXG5mcy9iZWZzL2RlYnVnLmM6NzY6XFx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcXG5mcy9iZWZzL2RlYnVnLmMtNzctXFxuLS1cXG5mcy9iZWZzL2RlYnVnLmM9MTU2PWJlZnNfZHVtcF9zdXBlcl9ibG9jayhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpzdXApXFxuLS1cXG5mcy9iZWZzL2RlYnVnLmMtMTU5LVxcbmZzL2JlZnMvZGVidWcuYzoxNjA6XFx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcXG5mcy9iZWZzL2RlYnVnLmMtMTYxLVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jPTIxMz1iZWZzX2R1bXBfcnVuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gcnVuKVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jLTIxNi1cXG5mcy9iZWZzL2RlYnVnLmM6MjE3OlxcdGJlZnNfYmxvY2tfcnVuIG4gPSBmc3J1bl90b19jcHUoc2IsIHJ1bik7XFxuZnMvYmVmcy9kZWJ1Zy5jLTIxOC1cXG4tLVxcbmZzL2JlZnMvZW5kaWFuLmg9NjE9Y3B1X3RvX2ZzMTYoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTE2IG4pXFxuLS1cXG5mcy9iZWZzL2VuZGlhbi5oLTcwLVxcbmZzL2JlZnMvZW5kaWFuLmg6NzE6c3RhdGljIGlubGluZSBiZWZzX2Jsb2NrX3J1blxcbmZzL2JlZnMvZW5kaWFuLmgtNzItZnNydW5fdG9fY3B1KGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gbilcXG5mcy9iZWZzL2VuZGlhbi5oLTczLXtcXG5mcy9iZWZzL2VuZGlhbi5oOjc0OlxcdGJlZnNfYmxvY2tfcnVuIHJ1bjtcXG5mcy9iZWZzL2VuZGlhbi5oLTc1LVxcbi0tXFxuZnMvYmVmcy9lbmRpYW4uaD04OD1zdGF0aWMgaW5saW5lIGJlZnNfZGlza19ibG9ja19ydW5cXG5mcy9iZWZzL2VuZGlhbi5oOjg5OmNwdV90b19mc3J1bihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrX3J1biBuKVxcbmZzL2JlZnMvZW5kaWFuLmgtOTAte1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0xMzgtXFx0YmVmc19kYXRhX3N0cmVhbSAqZHMgPSBcXHUwMDI2QkVGU19JKGlub2RlKS1cXHUwMDNlaV9kYXRhLmRzO1xcbmZzL2JlZnMvbGludXh2ZnMuYzoxMzk6XFx0YmVmc19ibG9ja19ydW4gcnVuID0gQkFEX0lBRERSO1xcbmZzL2JlZnMvbGludXh2ZnMuYy0xNDAtXFx0aW50IHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6NTEuNTI3MjkzMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwMjI4ODQ1NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCRUZTIEJsb2NrIEFkZHJlc3NlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBiZWZzX2lub2RlX2FkZHJgIGFuZCBpdCdzIHBvaW50aW5nIHRvIGBiZWZzX2Jsb2NrX3J1bmAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLiBMZXQncyBkaWcgZGVlcGVyLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBiZWZzX2Jsb2NrX3J1bmAgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEJFRlMgaGFuZGxlcyBpdHMgYmxvY2sgcnVucyBhbmQgaG93IHRoZXkncmUgZGVmaW5lZCBhdCB0aGUgZnVuZGFtZW50YWwgbGV2ZWwuIFNvLCBJJ2xsIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2U6IHRoZSBgZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmhgIGhlYWRlciBmaWxlLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbiByZXZlYWxzIGFib3V0IHRoZSBvcmdhbml6YXRpb24gb2YgdGhlc2UgYmxvY2tzIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBmb3IgYWRkcmVzc2luZyB3aXRoaW4gdGhlIEJFRlMgZmlsZXN5c3RlbS4gSXTigJlzIGxpa2VseSBnb2luZyB0byBwcm92aWRlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaW5vZGVzIG1hcCB0byBhY3R1YWwgZGF0YS4gTGV0J3Mgc2Vl4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0MS43NTYxNDEzNjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDIyMTQ2NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYgc3RydWN0IFxcXFx7LipcXFxcfSBQQUNLRUQgYmVmc19ibG9ja19ydW47XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0NC42OTgzNjIxMTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxOTc0OTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJFRlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBgYmVmc19ibG9ja19ydW5gIHN0cnVjdDpcblxuYGBgY1xudHlwZWRlZiBzdHJ1Y3Qge1xuXHR1MzIgYWxsb2NhdGlvbl9ncm91cDtcblx0dTE2IHN0YXJ0O1xuXHR1MTYgbGVuO1xufSBQQUNLRUQgYmVmc19ibG9ja19ydW47XG5gYGBcblxuUmlnaHQsIGBhbGxvY2F0aW9uX2dyb3VwYCBpcyBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBhbmQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiBOb3cgSSBzZWUgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBhZ19zaGlmdGAuIElmIGBhZ19zaGlmdGAgaXMgbGFyZ2UgZW5vdWdoICgzMSBvciBncmVhdGVyKSwgdGhlIGxlZnQgc2hpZnQgY291bGQgb3ZlcmZsb3cgYSAzMi1iaXQgaW50ZWdlciwgYW5kIHRoZW4gdGhlIGNhc3QgdG8gNjQgYml0cyBhZnRlcndhcmQgd29uJ3QgY2hhbmdlIHRoYXQuIElmIGBhZ19zaGlmdGAgaXMgMzIgb3IgbW9yZSwgdGhlbiB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLlxuXG5UaGUgcGF0Y2ggaGVyZSBhZGRzIGEgY2FzdCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSB0aGUgc2hpZnQsIGVuc3VyaW5nIGl04oCZcyBhIDY0LWJpdCBzaGlmdC4gU21hcnQuIEFuZCBJIHNlZSBhIGNoZWNrIGluIGBiZWZzX2NoZWNrX3NiYCB0aGF0IGVuc3VyZXMgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBhcmUgYm90aCBsZXNzIHRoYW4gMzIuXG5cbk9rYXksIG5vdyBsZXTigJlzIHRoaW5rIGFib3V0IGNvbnRleHQuIGBiZWZzX2NoZWNrX3NiYCBnZXRzIGNhbGxlZCB3aGVuIG1vdW50aW5nIGEgQkVGUyBmaWxlc3lzdGVtLiBCRUZTLCByaWdodCwgdGhhdOKAmXMgdGhlIEJlT1MgZmlsZXN5c3RlbS4gSXQncyBhICpkaXNrKiBmaWxlc3lzdGVtLCBzbyB5ZXMsIHlvdSBjYW4gZGVmaW5pdGVseSBtb3VudCBhIHVzZXItcHJvdmlkZWQgaW1hZ2UuIFNvLCBhIG1hbGljaW91c2x5IGNyYWZ0ZWQgQkVGUyBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoaXMgb3ZlcmZsb3cgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHNlY3VyaXR5IGlzc3VlIGluIHRoZSBmaWxlc3lzdGVtJ3MgbW91bnQgcGF0aC5cblxuVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBpYWRkcjJibG9ja25vYCwgYGJsb2Nrbm8yaWFkZHJgLCBhbmQgYGJlZnNfY2hlY2tfc2JgLiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9iZWZzL2JlZnMuaGAuIGBiZWZzX2NoZWNrX3NiYCBpcyBpbiBgZnMvYmVmcy9zdXBlci5jYC4gQWgsIHllcywgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBmcm9tIGBiZWZzX2ZpbGxfc3VwZXJgLiBJJ2xsIGhhdmUgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBwcmVwYXJlIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGdvb2Qgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1Mi42MTgxMTUzMzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODM5NDYyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19jaGVja19zYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2xpbnV4dmZzLmM9NzgwPWJlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtODQyLVxcdGlmICgoYmVmc19sb2FkX3NiKHNiLCBkaXNrX3NiKSAhPSBCRUZTX09LKSB8fFxcbmZzL2JlZnMvbGludXh2ZnMuYzo4NDM6XFx0ICAgIChiZWZzX2NoZWNrX3NiKHNiKSAhPSBCRUZTX09LKSlcXG5mcy9iZWZzL2xpbnV4dmZzLmMtODQ0LVxcdFxcdGdvdG8gdW5hY3F1aXJlX2JoO1xcbi0tXFxuZnMvYmVmcy9zdXBlci5jPTU3PWludFxcbmZzL2JlZnMvc3VwZXIuYzo1ODpiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmVmcy9zdXBlci5jLTU5LXtcXG4tLVxcbmZzL2JlZnMvc3VwZXIuaD01PWludCBiZWZzX2xvYWRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19zdXBlcl9ibG9jayAqZGlza19zYik7XFxuZnMvYmVmcy9zdXBlci5oOjY6aW50IGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU0LjMwMjA3NDU4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0NjEwNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIE1vdW50IFBvaW50IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIGBiZWZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBlbnRyeSBwb2ludCB3ZSdyZSBkZWFsaW5nIHdpdGggZm9yIG1vdW50aW5nIHRoaXMgQkVGUyBmaWxlIHN5c3RlbS4gVGhhdCB0ZWxscyBtZSBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIGBiZWZzX2NoZWNrX3NiYCwgc2luY2UgaXQgbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzIGR1cmluZyB0aGUgbW91bnRpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIHRoZSBwbGFjZSB0byByZWFsbHkgcG9rZSBhbmQgcHJvZCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBTaW5jZSBJJ20gc3RhcnRpbmcgZnJvbSBhIGNvZGUtZmlyc3QgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYEtjb25maWdgIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gQkVGUyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NTcuOTg2Njg3NzQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4Mzk2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCRUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2JlZnMvS2NvbmZpZzoyOmNvbmZpZyBCRUZTX0ZTXFxuZnMvYmVmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU5LjcwNTA4OTI3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMwMTE1MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBjb25maWcgSSdtIHdvcmtpbmcgd2l0aCBpcyBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE5vdywgZ2l2ZW4gdGhlIG51YW5jZXMgb2YgdGhpcyBzZXR1cCwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIEkgbmVlZCB0byBwcm9hY3RpdmVseSBjb25zaWRlciBpZiB0aGlzIGlzICphbGwqIEkgcmVxdWlyZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBBcmUgdGhlcmUgYW55IHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMsIGFuY2lsbGFyeSBzZXR0aW5ncywgb3IgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBwaWVjZXMgdGhhdCB3b3VsZCBpbXBhY3QgaXRzIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIG9yIGludGVncmF0aW9uIHdpdGggb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjAzLjAzNTIwNjk4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTA2ODI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipCRUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZz0yMz1jb25maWcgQkVGU19ERUJVR1xcbmZzL2JlZnMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJEZWJ1ZyBCZUZTXFxcIlxcbmZzL2JlZnMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIEJFRlNfRlNcXG5mcy9iZWZzL0tjb25maWctMjYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODowNS40MjAyODAwOTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MjIwODM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQkVGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYEJFRlNgIGl0c2VsZi4gVGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcywgSSBkb24ndCBzZWUgYW55IGdsYXJpbmcgY29uZmlnIGdvdGNoYXMgb3IgbmVjZXNzYXJ5IHR3ZWFrcyBmb3IgYEJFRlNgIGl0c2VsZi4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluIHRoYXQgcmVnYXJkLiBCdXQsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9mIGBCRUZTX0ZTYD8gV2hhdCBleHRlcm5hbCBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIG90aGVyIGludGVybmFsIG1vZHVsZXMgYXJlIGl0cyBidWlsZGluZyBibG9ja3M/IEkga25vdyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgY2FuJ3QganVzdCBhc3N1bWUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgZXNwZWNpYWxseSBpZiB0aGVyZSBpcyBhIG5ld2VyIHZlcnNpb24gb2Ygc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDIxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDguOTcyNDkyMDE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAyODI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmVmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZz0yPWNvbmZpZyBCRUZTX0ZTXFxuZnMvYmVmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuZnMvYmVmcy9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2JlZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbi0tXFxuZnMvYmVmcy9LY29uZmlnPTIzPWNvbmZpZyBCRUZTX0RFQlVHXFxuZnMvYmVmcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkRlYnVnIEJlRlNcXFwiXFxuZnMvYmVmcy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gQkVGU19GU1xcbmZzL2JlZnMvS2NvbmZpZy0yNi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjA5LjAyMDUyNDgxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQxMzQ4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEJFRlMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kgaGVyZSBoaW5nZXMgb24gdGhlIGBCTE9DS2AgY29tcG9uZW50LCB0aGF0J3MgdGhlIGNlbnRyYWwgcGllY2UuICBUaGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiB0byBlbmFibGUgaXMgZGVmaW5pdGVseSBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBiZWZzX2ZpbGxfc3VwZXJgIGFuZCBgYmVmc19jaGVja19zYmAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgdGhlIG9uZXMgaGFuZGxpbmcgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5CdXQgaG9sZCBvbi4uLiBJJ20gbm90aWNpbmcgdGhhdCBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgdXNlZCAqZXZlcnl3aGVyZSouICBUaGF0IHN1Z2dlc3RzIHRoZXkncmUgY29yZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuIFRoZXkncmUgcHJvYmFibHkgY3J1Y2lhbCBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMsIHdoaWNoIHdvdWxkIGJlIGZ1bmRhbWVudGFsIHRvIGFsbW9zdCBldmVyeSBCRUZTIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBldmFsdWF0ZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFRoZXknbGwgbmVlZCBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MTIuNzYxODc1NTk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk1NTE3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlhZGRyMmJsb2Nrbm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMzMzLVxcdEdvdCByaWQgb2YgYWJvbWluYXRpb25zIGJlZnNfaWFkZHIyaW5vZGUoKSBhbmQgYmVmc19pbm9kZTJpbm8oKS4gXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MzM0OlxcdFJlcGxhY2VkIHdpdGggc2luZ2xlIGZ1bmN0aW9uIGlhZGRyMmJsb2Nrbm8oKS5cXG5mcy9iZWZzL0NoYW5nZUxvZy0zMzUtXFx0KGZzL2JlZnMvc3VwZXIuYykgKGZzL2JlZnMvaW5vZGUuYylcXG4tLVxcbmZzL2JlZnMvYmVmcy5oPTEyMj1zdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XFxuZnMvYmVmcy9iZWZzLmg6MTIzOmlhZGRyMmJsb2Nrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19pbm9kZV9hZGRyICppYWRkcilcXG5mcy9iZWZzL2JlZnMuaC0xMjQte1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzA1PWJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTctXFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVxcdTAwM2VpbmRpcmVjdDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTg6XFx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyZWN0KTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTktXFx0aW50IGFycmF5bGVuID0gYmVmc19pYWRkcnNfcGVyX2Jsb2NrKHNiKTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDcxLVxcdGRibF9pbmRpcl9ibG9jayA9XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDcyOlxcdCAgICBzYl9icmVhZChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmRhdGEtXFx1MDAzZWRvdWJsZV9pbmRpcmVjdCkgK1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3My1cXHRcXHRcXHRcXHRcXHRkYmxfd2hpY2hfYmxvY2spO1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDc3LVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nKVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ3ODpcXHRcXHRcXHQgICBpYWRkcjJibG9ja25vKHNiLCBcXHUwMDI2ZGF0YS1cXHUwMDNlZG91YmxlX2luZGlyZWN0KSArXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDc5LVxcdFxcdFxcdCAgIGRibF93aGljaF9ibG9jayk7XFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00OTgtXFx0aW5kaXJfYmxvY2sgPVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ5OTpcXHQgICAgc2JfYnJlYWQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpbmRpcl9ydW4pICsgd2hpY2hfYmxvY2spO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwMC1cXHRpZiAoaW5kaXJfYmxvY2sgPT0gTlVMTCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTAyLVxcdFxcdFxcdCAgIFxcXCJhdCBibG9ja25vICVsdVxcXCIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MDM6XFx0XFx0XFx0ICAgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyX3J1bikgKyB3aGljaF9ibG9jayk7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTA0LVxcdFxcdHJldHVybiBCRUZTX0VSUjtcXG4tLVxcbmZzL2JlZnMvaW5vZGUuYz0xOT1iZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcXG4tLVxcbmZzL2JlZnMvaW5vZGUuYy0zNi1cXHQgKi9cXG5mcy9iZWZzL2lub2RlLmM6Mzc6XFx0aWYgKGlub2RlICE9IGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpbm9fbnVtKSkge1xcbmZzL2JlZnMvaW5vZGUuYy0zOC1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiaW5vZGUgYmxvY2tuciBmaWVsZCBkaXNhZ3JlZXMgd2l0aCB2ZnMgXFxcIlxcbmZzL2JlZnMvaW5vZGUuYy0zOS1cXHRcXHRcXHQgICBcXFwiVkZTOiAlbHUsIElub2RlICVsdVxcXCIsICh1bnNpZ25lZCBsb25nKVxcbmZzL2JlZnMvaW5vZGUuYzo0MDpcXHRcXHRcXHQgICBpbm9kZSwgKHVuc2lnbmVkIGxvbmcpaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmlub19udW0pKTtcXG5mcy9iZWZzL2lub2RlLmMtNDEtXFx0XFx0cmV0dXJuIEJFRlNfQkFEX0lOT0RFO1xcbi0tXFxuZnMvYmVmcy9pby5jPTI3PWJlZnNfYnJlYWRfaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZV9hZGRyIGlhZGRyKVxcbi0tXFxuZnMvYmVmcy9pby5jLTQyLVxcbmZzL2JlZnMvaW8uYzo0MzpcXHRibG9jayA9IGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpYWRkcik7XFxuZnMvYmVmcy9pby5jLTQ0LVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0xNjAtXFxuZnMvYmVmcy9saW51eHZmcy5jOjE2MTpcXHRkaXNrX29mZiA9ICh1bG9uZykgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNnJ1bik7XFxuZnMvYmVmcy9saW51eHZmcy5jLTE2Mi1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz03ODA9YmVmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy04NjgtXFx0c2ItXFx1MDAzZXNfdGltZV9tYXggPSAweGZmZmZmZmZmZmZmZmxsO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo4Njk6XFx0cm9vdCA9IGJlZnNfaWdldChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNihiZWZzX3NiLVxcdTAwM2Vyb290X2RpcikpKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtODcwLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MTQuNDU3Mzk4MjUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTQyMjY3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSB1c2FnZSwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipDb2RlIEluc3BlY3Rpb246IEFkZHJlc3MgQ29udmVyc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBpYWRkcjJibG9ja25vYCB1c2VkIHByZXR0eSBleHRlbnNpdmVseSBhY3Jvc3MgdGhlIEJFRlMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGluIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgYmVmc19maW5kX2JydW5faW5kaXJlY3RgLCBgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3RgLCBgYmVmc19jaGVja19pbm9kZWAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYGJlZnNfZ2V0X2Jsb2NrYCwgYW5kIGBiZWZzX2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGluZGljYXRvciB0aGF0IGl0J3MgYSBmdW5kYW1lbnRhbCB1dGlsaXR5IGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIGlub2RlIGFkZHJlc3NlcyBhbmQgYmxvY2sgbnVtYmVycyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJ3MgYmxvY2sgbWFwcGluZyBzdHJ1Y3R1cmVzLiBJdCdzIGludm9sdmVkIGluIGZpbmRpbmcgYmxvY2sgcnVucywgY2hlY2tpbmcgaW5vZGUgaW50ZWdyaXR5LCByZWFkaW5nIGJsb2NrIGRhdGEgYmFzZWQgb24gaW5vZGUgYWRkcmVzcywgZ2V0dGluZyBibG9ja3MgZm9yIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsaXppbmcgdGhlIHN1cGVyIGJsb2NrIHdoaWNoIHdvdWxkIGhhdmUgdG8gY29udGFpbiBibG9jayBudW1iZXIgZGF0YS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBibG9ja25vMmlhZGRyYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0ICptaWdodCogYmUgdXNlZCBpbiBgYmVmc19pZ2V0YCwgdGhlIGlub2RlIGdldCBmdW5jdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlLCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBrbm93IHRoZSBpbnZlcnNlIG9mIHRoZSBmaXJzdCBvbmUgd291bGQgaGF2ZSB0byBiZSBoZXJlIHRvby4gSXQgd291bGQgaGF2ZSB0byBiZSBjb252ZXJ0aW5nIGJldHdlZW4gYmxvY2sgbnVtYmVyIGFuZCBhbiBpbm9kZSBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE4LjYxMTYyODI2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDMyNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibG9ja25vMmlhZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvYmVmcy5oPTEyOT1zdGF0aWMgaW5saW5lIGJlZnNfaW5vZGVfYWRkclxcbmZzL2JlZnMvYmVmcy5oOjEzMDpibG9ja25vMmlhZGRyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8pXFxuZnMvYmVmcy9iZWZzLmgtMTMxLXtcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0yOTk9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTMxNy1cXHQvKiBjb252ZXJ0IGZyb20gdmZzJ3MgaW5vZGUgbnVtYmVyIHRvIGJlZnMncyBpbm9kZSBudW1iZXIgKi9cXG5mcy9iZWZzL2xpbnV4dmZzLmM6MzE4OlxcdGJlZnNfaW5vLVxcdTAwM2VpX2lub2RlX251bSA9IGJsb2Nrbm8yaWFkZHIoc2IsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTMxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MjAuMjQxOTYwMTczWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzM3MzQyNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCRUZTIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoaXMgaXNzdWUgYmFjayB0byBob3cgQkVGUyBoYW5kbGVzIHN1cGVyYmxvY2tzIGFuZCBpbm9kZSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgYGJsb2Nrbm8yaWFkZHJgIGlzIHVzZWQgd2l0aGluIGBiZWZzX2lnZXRgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2xvb2t1cGAuIEdpdmVuIHRoYXQgdGhpcyBidWcgY2FuIGJlIHRyaWdnZXJlZCBieSBhIGNyYWZ0ZWQgQkVGUyBpbWFnZSBkdXJpbmcgbW91bnQgb3IgZmlsZSBhY2Nlc3MsIGl0J3MgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2Ygc3ltYm9scyB0byBmb2N1cyBvbjogYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYGJlZnNfaWdldGAsIGBiZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdGAsIGBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdGAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYW5kIGBiZWZzX2dldF9ibG9ja2AuIE5vdywgbGV0J3MgcmVmaW5lIHRoYXQgbGlzdCBiYXNlZCBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LlxuXG5gYmVmc19maWxsX3N1cGVyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nLCBhbmQgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgYmVmc19maWxsX3N1cGVyYC4gYGJlZnNfaWdldGAgaXMgY2FsbGVkIGZyb20gYm90aCBgYmVmc19maWxsX3N1cGVyYCBhbmQgYGJlZnNfbG9va3VwYCwgd2hpY2ggZ2l2ZXMgaXQgdGhlIHNlY29uZCBwb2ludCBvZiBlbnRyeS4gYGJlZnNfZmluZF9icnVuX2luZGlyZWN0YCBhbmQgYGJlZnNfZmluZF9icnVuX2RibGluZGlyZWN0YCBhcmUgcGFydCBvZiBgYmVmc19mYmxvY2syYnJ1bmAsIHdoaWNoIGluIHR1cm4gaXMgdXNlZCBieSBgYmVmc19nZXRfYmxvY2tgIGFuZCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLiBgYmVmc19nZXRfYmxvY2tgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHRoZSBgZ2V0X2Jsb2NrYCBjYWxsYmFjayBmb3IgYG1wYWdlX3JlYWRfZm9saW9gIGFuZCBgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvYCwgYW5kIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgaGFuZGxlcyBkaXJlY3RvcnkgZW50cmllcyBhbmQgc3ltbGlua3MuXG5cblNvLCBib2lsaW5nIGl0IGRvd24sIHRoZSBtb3N0IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgYXJlOlxuXG4qICAgYGJlZnNfZmlsbF9zdXBlcmAgKG1vdW50KVxuKiAgIGBiZWZzX2lnZXRgIChpbm9kZSByZXRyaWV2YWwpXG4qICAgYGJlZnNfZ2V0X2Jsb2NrYCAoZGF0YSBibG9jayBtYXBwaW5nKVxuKiAgIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgKHJlYWRpbmcgZGF0YSBzdHJlYW1zKVxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgYmVmc19yZWFkX2RhdGFzdHJlYW1gIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbmZpcm0gdGhlIGV4dGVudCBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzAuOTc5MzA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3OTg2MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfcmVhZF9kYXRhc3RyZWFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvQ2hhbmdlTG9nPTE3PVZlcnNpb24gMC45ICgyMDAyLTAzLTE0KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMTktKiBBZGRlZCBTZXJnZXkgUy4gS29zdHlsaW92J3MgcGF0Y2ggdG8gZWxpbWluYXRlIG1lbWNweSgpIG92ZXJoZWFkXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MjA6XFx0ZnJvbSBiK3RyZWUgb3BlcmF0aW9ucy4gQ2hhbmdlcyB0aGUgYmVmc19yZWFkX2RhdGFzdHJlYW0oKSBpbnRlcmZhY2UuXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMjEtXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmM9MTE5PXN0YXRpYyBpbnQgYmVmc19jb21wYXJlX3N0cmluZ3MoY29uc3Qgdm9pZCAqa2V5MSwgaW50IGtleWxlbjEsXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTI3LSAqXFxuZnMvYmVmcy9idHJlZS5jOjEyODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBidHJlZSBzdXBlcmJsb2NrIGFuZFxcbmZzL2JlZnMvYnRyZWUuYy0xMjktICogbWFrZXMgc3VyZSBpdCBpcyBpbiBjcHUgYnl0ZW9yZGVyLCBieXRlc3dhcHBpbmcgaWYgbmVjZXNzYXJ5Llxcbi0tXFxuZnMvYmVmcy9idHJlZS5jPTEzND1iZWZzX2J0X3JlYWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZHMsXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTQxLVxcbmZzL2JlZnMvYnRyZWUuYzoxNDI6XFx0YmggPSBiZWZzX3JlYWRfZGF0YXN0cmVhbShzYiwgZHMsIDAsIE5VTEwpO1xcbmZzL2JlZnMvYnRyZWUuYy0xNDMtXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTc3LSAqXFxuZnMvYmVmcy9idHJlZS5jOjE3ODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBpbmRpY2F0ZWQgYnRyZWUgbm9kZSBhbmRcXG5mcy9iZWZzL2J0cmVlLmMtMTc5LSAqIG1ha2VzIHN1cmUgaXRzIGhlYWRlciBmaWVsZHMgYXJlIGluIGNwdSBieXRlb3JkZXIsIGJ5dGVzd2FwcGluZyBpZlxcbi0tXFxuZnMvYmVmcy9idHJlZS5jPTE5MT1iZWZzX2J0X3JlYWRfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG4tLVxcbmZzL2JlZnMvYnRyZWUuYy0yMDAtXFxuZnMvYmVmcy9idHJlZS5jOjIwMTpcXHRub2RlLVxcdTAwM2ViaCA9IGJlZnNfcmVhZF9kYXRhc3RyZWFtKHNiLCBkcywgbm9kZV9vZmYsIFxcdTAwMjZvZmYpO1xcbmZzL2JlZnMvYnRyZWUuYy0yMDItXFx0aWYgKCFub2RlLVxcdTAwM2ViaCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzgtLyoqXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6Mzk6ICogYmVmc19yZWFkX2RhdGFzdHJlYW0gLSBnZXQgYnVmZmVyX2hlYWQgY29udGFpbmluZyBkYXRhLCBzdGFydGluZyBmcm9tIHBvcy5cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MC0gKiBAc2I6IEZpbGVzeXN0ZW0gc3VwZXJibG9ja1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9NDg9c3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0OTpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01MC1cXHRcXHQgICAgIGJlZnNfb2ZmX3QgcG9zLCB1aW50ICpvZmYpXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0xMzA9YmVmc19yZWFkX2xzeW1saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMTM5LVxcdHdoaWxlIChieXRlc19yZWFkIFxcdTAwM2MgbGVuKSB7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MTQwOlxcdFxcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCBieXRlc19yZWFkLCBOVUxMKTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xNDEtXFx0XFx0aWYgKCFiaCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtNi1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uaDo3OnN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC04LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzIuNjU3Mjk2NjU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTg3MzI2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgQkVGUyBGdW5jdGlvbiBEZWNsYXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCRUZTIGZ1bmN0aW9ucy4gRmlyc3QsIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAg4oCTIHRoYXQgb25lJ3Mgbm9uLXN0YXRpYywgZ290IGl0LiBUaGVuLCBgYmVmc19maWxsX3N1cGVyYCBpcyBhbHNvIG5vbi1zdGF0aWMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBob2xkIG9uLi4uIEkgY291bGQndmUgc3dvcm4gSSdkIHNlZW4gYGJlZnNfaWdldGAgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWNsYXJhdGlvbiBvZiBgYmVmc19pZ2V0YCBiZWZvcmUgbW92aW5nIGZvcndhcmQsIGp1c3QgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODozOC40NTYwMzE4ODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQyMjI0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19pZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvbGludXh2ZnMuYz00Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmVmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQpO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo0OTpzdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy01MC1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTE3Mz1iZWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMjA4LVxcdH0gZWxzZSB7XFxuZnMvYmVmcy9saW51eHZmcy5jOjIwOTpcXHRcXHRpbm9kZSA9IGJlZnNfaWdldChkaXItXFx1MDAzZWlfc2IsIChpbm9fdCkgb2Zmc2V0KTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMjEwLVxcdH1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0yOTI9c3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0yOTgtXFxuZnMvYmVmcy9saW51eHZmcy5jOjI5OTpzdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuZnMvYmVmcy9saW51eHZmcy5jLTMwMC17XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9NjM4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1aW50NjRfdCBpbm8sXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQxLVxcdC8qIE5vIG5lZWQgdG8gaGFuZGxlIGlfZ2VuZXJhdGlvbiAqL1xcbmZzL2JlZnMvbGludXh2ZnMuYzo2NDI6XFx0cmV0dXJuIGJlZnNfaWdldChzYiwgaW5vKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQzLX1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz02NjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy02NjktXFxuZnMvYmVmcy9saW51eHZmcy5jOjY3MDpcXHRwYXJlbnQgPSBiZWZzX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsXFxuZnMvYmVmcy9saW51eHZmcy5jLTY3MS1cXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyliZWZzX2luby1cXHUwMDNlaV9wYXJlbnQuc3RhcnQpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTg2OC1cXHRzYi1cXHUwMDNlc190aW1lX21heCA9IDB4ZmZmZmZmZmZmZmZmbGw7XFxuZnMvYmVmcy9saW51eHZmcy5jOjg2OTpcXHRyb290ID0gYmVmc19pZ2V0KHNiLCBpYWRkcjJibG9ja25vKHNiLCBcXHUwMDI2KGJlZnNfc2ItXFx1MDAzZXJvb3RfZGlyKSkpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy04NzAtXFx0aWYgKElTX0VSUihyb290KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0MC4yMTAyNjI1MjRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk3MzkxOTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgYmVmc19pZ2V0YCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGJlZnNfbG9va3VwYCwgYGJlZnNfbmZzX2dldF9pbm9kZWAsIGBiZWZzX2dldF9wYXJlbnRgLCBhbmQgYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMgYSB1c2VmdWwgaW5pdGlhbCBidWlsZGluZyBibG9jay5cblxuTm93LCBob2xkIG9uLi4uIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYGJlZnNfZ2V0X2Jsb2NrYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gSXQgc2hvdWxkIGJlLCBidXQgaXQncyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHRoZXNlIGNvcmUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDcuMTg0MTg0MDMyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyOTEwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfZ2V0X2Jsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvQ2hhbmdlTG9nPTIwND1WZXJzaW9uIDAuNCAoMjAwMS0xMC0yOClcXG4tLVxcbmZzL2JlZnMvQ2hhbmdlTG9nLTIzMy1cXHRTbyBpdCBkb2VzIGkvbyBpbiBtdWNoIGxhcmdlciBjaHVua3MuIEl0IGlzIHRoZSBjb3JyZWN0IGxpbnV4IHdheS4gSXQgXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MjM0OlxcdHVzZXMgYmVmc19nZXRfYmxvY2soKSBieSB3YXkgb2YgYmVmc19yZWFkcGFnZSgpIHRvIGZpbmQgdGhlIGRpc2sgb2Zmc2V0cyBcXG5mcy9iZWZzL0NoYW5nZUxvZy0yMzUtXFx0b2YgYmxvY2tzLCB3aGljaCBpbiB0dXJuIGNhbGxzIGJlZnNfZnBvczJicnVuKCkgaW4gZGF0YXN0cmVhbS5jIHRvIGRvIFxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTQzPXN0YXRpYyBpbnQgYmVmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6NDQ6c3RhdGljIGludCBiZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy00NS1zdGF0aWMgaW50IGJlZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBiZWZzX2V4cG9ydF9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTEwOS0gKiBJbiB0dXJuLCBzaW1wbHkgY2FsbHMgYSBnZW5lcmljIGJsb2NrIHJlYWQgZnVuY3Rpb24gYW5kXFxuZnMvYmVmcy9saW51eHZmcy5jOjExMDogKiBwYXNzZXMgaXQgdGhlIGFkZHJlc3Mgb2YgYmVmc19nZXRfYmxvY2ssIGZvciBtYXBwaW5nIGZpbGVcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTExLSAqIHBvc2l0aW9ucyB0byBkaXNrIGJsb2Nrcy5cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0xMTM9c3RhdGljIGludCBiZWZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvYmVmcy9saW51eHZmcy5jLTExNC17XFxuZnMvYmVmcy9saW51eHZmcy5jOjExNTpcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZWZzX2dldF9ibG9jayk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTExNi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTE5PWJlZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuZnMvYmVmcy9saW51eHZmcy5jLTEyMC17XFxuZnMvYmVmcy9saW51eHZmcy5jOjEyMTpcXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZWZzX2dldF9ibG9jayk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTEyMi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTMzPXN0YXRpYyBpbnRcXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTM0OmJlZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbmZzL2JlZnMvbGludXh2ZnMuYy0xMzUtXFx0ICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0Mi1cXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTQzOlxcdGJlZnNfZGVidWcoc2IsIFxcXCItLS1cXHUwMDNlIGJlZnNfZ2V0X2Jsb2NrKCkgZm9yIGlub2RlICVsbHUsIGJsb2NrICVsZFxcXCIsXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0NC1cXHRcXHQgICBpbm9kZS1cXHUwMDNlaV9pbm8sIChsb25nKWJsb2NrKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQ1LVxcdGlmIChjcmVhdGUpIHtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTQ2OlxcdFxcdGJlZnNfZXJyb3Ioc2IsIFxcXCJiZWZzX2dldF9ibG9jaygpIHdhcyBhc2tlZCB0byB3cml0ZSB0byBcXFwiXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0Ny1cXHRcXHRcXHQgICBcXFwiYmxvY2sgJWxkIGluIGlub2RlICVsbHVcXFwiLCAobG9uZylibG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDkuMzI3MTAyMDQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzg3NTY3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEJFRlMgRmlsZSBTeXN0ZW0gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQkVGUyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBsZXZlcmFnZSB0aGVtLiBgYmVmc19nZXRfYmxvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5LiBIbW0sIHRoYXQgbWVhbnMgSSBjYW4ndCBqdXN0IGNhbGwgaXQgZnJlZWx5LiBUaGF0IGNoYW5nZXMgaG93IEkgYXBwcm9hY2ggdGhlIHByb2JsZW0uIFdpdGggdGhhdCBpbiBtaW5kLCBJIG5lZWQgdG8gbG9vayBmb3Igb3RoZXIgb3B0aW9ucyB0byBhY2hpZXZlIG15IGdvYWwuIEkgd2FzIGhvcGluZyB0byB1c2UgYGJlZnNfcmVhZF9mb2xpb2AgYW5kIGBiZWZzX2JtYXBgIHRvZ2V0aGVyIHdpdGggaXQuXG5cbldhaXQgYSBzZWNvbmQsIGBiZWZzX3JlYWRfZm9saW9gIGlzIGFsc28gc3RhdGljISBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLiBBbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZ28gd2l0aCBhIGRpZmZlcmVudCBhcHByb2FjaC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgdGhyb3VnaCB0aGUgbGlzdCwgYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYW5kIGBiZWZzX2ZibG9jazJicnVuYCBhcmUgc3RpbGwgYXZhaWxhYmxlIGFzIG9wdGlvbnMuIFRoYXQgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuQWgsIGFuZCBnb29kLCBgYmVmc19mYmxvY2syYnJ1bmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBub3QgcmVzdHJpY3RlZCBsaWtlIHRob3NlIG90aGVyIG9uZXMuIEV4Y2VsbGVudCwgdGhpcyBtZWFucyB0aGF0IEkgY2FuIGluY29ycG9yYXRlIHRoaXMgb25lIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo1NS42NjU4NjE4NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcyNDg5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19mYmxvY2syYnJ1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2RhdGFzdHJlYW0uYz00OT1iZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYwLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjYxOlxcdGlmIChiZWZzX2ZibG9jazJicnVuKHNiLCBkcywgYmxvY2ssIFxcdTAwMjZydW4pICE9IEJFRlNfT0spIHtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy02Mi1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiQmVGUzogRXJyb3IgZmluZGluZyBkaXNrIGFkZHIgb2YgYmxvY2sgJWx1XFxcIixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTc5LS8qKlxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjgwOiAqIGJlZnNfZmJsb2NrMmJydW4gLSBnaXZlIGJhY2sgYmxvY2sgcnVuIGZvciBmYmxvY2tcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy04MS0gKiBAc2I6IHRoZSBzdXBlcmJsb2NrXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz05ND1pbnRcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo5NTpiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtOTYtXFx0XFx0IGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bilcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTExMS1cXHRcXHRiZWZzX2Vycm9yKHNiLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjExMjpcXHRcXHRcXHQgICBcXFwiYmVmc19mYmxvY2syYnJ1bigpIHdhcyBhc2tlZCB0byBmaW5kIGJsb2NrICVsdSwgXFxcIlxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTExMy1cXHRcXHRcXHQgICBcXFwid2hpY2ggaXMgbm90IG1hcHBlZCBieSB0aGUgZGF0YXN0cmVhbVxcXFxuXFxcIixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtMTAtXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTE6aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMi1cXHRcXHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTE5PWJlZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTI5LSAqXFxuZnMvYmVmcy9saW51eHZmcy5jOjEzMDogKiBDYWxscyBiZWZzX2ZibG9jazJicnVuKCkgaW4gZGF0YXN0cmVhbS5jIHRvIGRvIHRoZSByZWFsIHdvcmsuXFxuZnMvYmVmcy9saW51eHZmcy5jLTEzMS0gKi9cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0xMzQ9YmVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUxLVxcbmZzL2JlZnMvbGludXh2ZnMuYzoxNTI6XFx0cmVzID0gYmVmc19mYmxvY2syYnJ1bihzYiwgZHMsIGJsb2NrLCBcXHUwMDI2cnVuKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUzLVxcdGlmIChyZXMgIT0gQkVGU19PSykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo1Ny4zMTMxMTU5MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NDQ4MDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyBgYmVmc19mYmxvY2syYnJ1bmAncyBTY29wZSBhbmQgUG90ZW50aWFsIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIGBiZWZzX2ZibG9jazJicnVuYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgd2hpY2ggaXMgdGhlIGZpcnN0IGltcG9ydGFudCBwb2ludC4gVGhhdCBmYWN0IGFsb25lIHRlbGxzIG1lIGl0IG1pZ2h0IGJlIHBhcnQgb2YgdGhlIEFQSS4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIga2V5IGZ1bmN0aW9ucyBJJ20gZmFtaWxpYXIgd2l0aCBpbiB0aGlzIEJFRlMgY29udGV4dC4gU28sIEkgbmVlZCB0byBjb25zaWRlciBpdCBhbG9uZyB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGFuZCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGV5IGludGVycmVsYXRlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBkYXRhIGZsb3cgYW5kIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLlxuXG5CdXQsIEkgYWxzbyBjYW4ndCBqdXN0IGZpeGF0ZSBvbiB0aGVzZS4gQSBkZWVwZXIgZXhwbG9yYXRpb24gaXMgbmVlZGVkLCBzbyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBiYXNlLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGhpZGRlbiBnZW1zIHRoYXQgYXJlIHZhbHVhYmxlLCBhbmQgY291bGQgYmUgbWlzc2VkIGlmIEkgZm9jdXMgdG9vIG5hcnJvd2x5IG9uIHRoZSBzdGF0ZWQgc3ltYm9scy4gSXQncyB0aW1lIHRvIGJyb2FkZW4gbXkgc2VhcmNoIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDQuNzA3NjAwNDU4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2MTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJlZnNfLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iZWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2J0cmVlLmgtNi1cXG5mcy9iZWZzL2J0cmVlLmg6NzppbnQgYmVmc19idHJlZV9maW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbmZzL2JlZnMvYnRyZWUuaC04LVxcdFxcdCAgICBjb25zdCBjaGFyICprZXksIGJlZnNfb2ZmX3QgKnZhbHVlKTtcXG5mcy9iZWZzL2J0cmVlLmgtOS1cXG5mcy9iZWZzL2J0cmVlLmg6MTA6aW50IGJlZnNfYnRyZWVfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5mcy9iZWZzL2J0cmVlLmgtMTEtXFx0XFx0ICAgIGxvZmZfdCBrZXlfbm8sIHNpemVfdCBidWZzaXplLCBjaGFyICprZXlidWYsXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uaD03PXN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEwLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjExOmludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtMTItXFx0XFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbi0tXFxuZnMvYmVmcy9pbm9kZS5oLTUtXFxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxcbmZzL2JlZnMvaW5vZGUuaC03LVxcdFxcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xcbi0tXFxuZnMvYmVmcy9zdXBlci5oLTQtXFxuZnMvYmVmcy9zdXBlci5oOjU6aW50IGJlZnNfbG9hZF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpkaXNrX3NiKTtcXG5mcy9iZWZzL3N1cGVyLmg6NjppbnQgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDQuNzU2NTY4NTQ2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjM4ODcwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJFRlMgSW5vZGUgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZmlsZXN5c3RlbSBpbnRlZ3JpdHksIGFuZCBgYmVmc19jaGVja19pbm9kZWAgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kLiBUaGF0IG9uZeKAmXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNyaXRpY2FsaXR5IG9mIGlub2RlIHN0cnVjdHVyZXMuIFJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGBiZWZzX2NoZWNrX2lub2RlYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyBlcnJvciBkZXRlY3Rpb24gYW5kIHBvdGVudGlhbGx5LCB3aGF0IGtpbmRzIG9mIGNvcnJ1cHRpb24gaXQncyBkZXNpZ25lZCB0byBjYXRjaC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9u4oCZcyBhcHByb2FjaCB3aWxsIGdpdmUgdXMgYSBzdHJvbmcgYmFzaXMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDguNjIwNDU4ODE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3MTUxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfY2hlY2tfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9pbm9kZS5jPTE4PWludFxcbmZzL2JlZnMvaW5vZGUuYzoxOTpiZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcXG5mcy9iZWZzL2lub2RlLmMtMjAtXFx0XFx0IGJlZnNfYmxvY2tucl90IGlub2RlKVxcbi0tXFxuZnMvYmVmcy9pbm9kZS5oLTUtXFxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxcbmZzL2JlZnMvaW5vZGUuaC03LVxcdFxcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTI5OT1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMzM0LVxcbmZzL2JlZnMvbGludXh2ZnMuYzozMzU6XFx0aWYgKGJlZnNfY2hlY2tfaW5vZGUoc2IsIHJhd19pbm9kZSwgaW5vZGUtXFx1MDAzZWlfaW5vKSAhPSBCRUZTX09LKSB7XFxuZnMvYmVmcy9saW51eHZmcy5jLTMzNi1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiQmFkIGlub2RlOiAlbGx1XFxcIiwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MTAuMzI3NjE0MTg2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjEyOTI1ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBUaHJvdWdoIGEgQkVGUyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggZm9yIHRoZSBCZU9TIGZpbGVzeXN0ZW0gZHJpdmVyLCBCRUZTLiBUaGUgZmlyc3QgdGhpbmcgSSd2ZSBub3RpY2VkIGlzIHRoZSBjYWxsIGdyYXBoOiBgYmVmc19jaGVja19pbm9kZWAgaXMgdHJpZ2dlcmVkIGJ5IGBiZWZzX2lnZXRgLCBhbmQgYGJlZnNfbG9hZF9zYmAgaXMgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBUaGUgb25lcyB0aGF0IG1hdHRlciBhcmU6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGBiZWZzX2xvYWRfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBgYmVmc19mYmxvY2syYnJ1bmAsIGFuZCBgYmVmc19jaGVja19pbm9kZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBhY2Nlc3MgZnVuY3Rpb25zLlxuXG5UaGUgY29uZmlnIHJlcXVpcmVkIGlzIGBCRUZTX0ZTYCwgd2hpY2ggaXMgZ29vZCBuZXdzOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBCRUZTX0ZTYCBpcyB0aGUgKm9ubHkqIGRlcGVuZGVuY3kuIE5vIGhpZGRlbiBnb3RjaGFzLCBpdCBzZWVtcy5cblxuTm93LCBsZXQncyBhcnRpY3VsYXRlIHRoZSBjb3JlIGlzc3VlIGFuZCByYXRpb25hbGUuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93cyB3aXRoaW4gdGhlIEJFRlMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBiZWZzX2NoZWNrX3NiYCBpcyBoYXZpbmcgYSBib3VuZHMgY2hlY2sgYWRkZWQgdG8gYXZvaWQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSBiaXRzLCB3aGljaCBpcyB1bmRlZmluZWQgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gU21hcnQuIFdlIGRvbid0IHdhbnQgdGhlIGhhcmR3YXJlIHNwaXR0aW5nIG91dCBnYXJiYWdlLiBBbHNvLCBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIGB1NjRgKSBhcmUgYWRkZWQgd2l0aGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgb3ZlcmZsb3dzIHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgICh3aGljaCBpcyBgdTMyYCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkncmUgcGFydCBvZiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwcm9jZXNzIChgYmVmc19maWxsX3N1cGVyYCkgYW5kLCB2aXRhbGx5LCB0aGUgYWNjZXNzIHBhdGhzIGZvciBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBUaGlzIGhpZ2hsaWdodHMgdGhhdCBhIG1hbGljaW91c2x5IGNyYWZ0ZWQgaW1hZ2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBidWdzLlxuXG5HaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBkYXRhIGFjY2VzcywgSSdkIHNheSB0aGlzIGhhcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaW1wYWN0LiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGV4cG9zdXJlIGhlcmUgaXMgdGhhdCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgcmVzdWx0IGluIHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0cy5cblxuQWxyaWdodCwgdGhlIGtleSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19sb2FkX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYGJlZnNfZmJsb2NrMmJydW5gLCBhbmQgYGJlZnNfY2hlY2tfaW5vZGVgLiBUaGUgY29uZmlnIHRvIGVuYWJsZSBpcyBgQkVGU19GU2AuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDEsIk91dHB1dFRva2VucyI6MjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjU0MDU0MjU2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTYwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCRUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmVmc19maWxsX3N1cGVyXCIsXG4gICAgXCJiZWZzX2NoZWNrX3NiXCIsXG4gICAgXCJiZWZzX2xvYWRfc2JcIixcbiAgICBcImJlZnNfcmVhZF9kYXRhc3RyZWFtXCIsXG4gICAgXCJiZWZzX2ZibG9jazJicnVuXCIsXG4gICAgXCJiZWZzX2NoZWNrX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgQmVPUyBmaWxlc3lzdGVtIChCRUZTKSBkcml2ZXIuIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYmAgdG8gcHJldmVudCBzaGlmdGluZyBieSAzMiBvciBtb3JlLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gSXQgYWxzbyBhZGRzIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgKGEgNjQtYml0IGludGVnZXIpIGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGBhbGxvY2F0aW9uX2dyb3VwYCAoYSAzMi1iaXQgaW50ZWdlcikuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCB3aGVuIGFjY2Vzc2luZyBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBTaW5jZSBCRUZTIGNhbiBiZSBtb3VudGVkIGZyb20gYSB1c2VyLXByb3ZpZGVkIGltYWdlLCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGVzZSBidWdzLCBtYWtpbmcgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJFRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZWZzX2ZpbGxfc3VwZXJcIixcbiAgICBcImJlZnNfY2hlY2tfc2JcIixcbiAgICBcImJlZnNfbG9hZF9zYlwiLFxuICAgIFwiYmVmc19yZWFkX2RhdGFzdHJlYW1cIixcbiAgICBcImJlZnNfZmJsb2NrMmJydW5cIixcbiAgICBcImJlZnNfY2hlY2tfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBCZU9TIGZpbGVzeXN0ZW0gKEJFRlMpIGRyaXZlci4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiYCB0byBwcmV2ZW50IHNoaWZ0aW5nIGJ5IDMyIG9yIG1vcmUsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgMzItYml0IGludGVnZXJzLiBJdCBhbHNvIGFkZHMgY2FzdHMgdG8gYGJlZnNfYmxvY2tucl90YCAoYSA2NC1iaXQgaW50ZWdlcikgaW4gYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgIChhIDMyLWJpdCBpbnRlZ2VyKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50IChgYmVmc19maWxsX3N1cGVyYCkgYW5kIHdoZW4gYWNjZXNzaW5nIGlub2RlcyBhbmQgZGF0YSBibG9ja3MuIFNpbmNlIEJFRlMgY2FuIGJlIG1vdW50ZWQgZnJvbSBhIHVzZXItcHJvdmlkZWQgaW1hZ2UsIGEgY3JhZnRlZCBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoZXNlIGJ1Z3MsIG1ha2luZyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjYxNDcwODlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDgyODg3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMS42MTUyMjcyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5OTQ3NzY1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBpc3N1ZXMgaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0uIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYigpYCBhbmQgY2FzdHMgYGlhZGRyLVxcdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2M3MDhhZjBiYzU1YzVjNGY2NDFhZjk3MGI0OWQ3ZDIzNWEzZTMwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzLmggYi9mcy9iZWZzL2JlZnMuaFxuaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDRcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXG4rKysgYi9mcy9iZWZzL2JlZnMuaFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSArXG4rXHRyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpICtcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuIFxuIFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXHUwMDNlXHUwMDNlIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0O1xuIFx0aWFkZHIuc3RhcnQgPVxuLVx0ICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuK1x0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiBcdGlhZGRyLmxlbiA9IDE7XG4gXG4gXHRyZXR1cm4gaWFkZHI7XG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXG5pbmRleCA3YzUwMDI1Yzk5ZDhhLi45ZjIxZjczMmQyYzE4IDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9zdXBlci5jXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcbkBAIC05MywxNyArOTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbitcdGlmIChiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0IFx1MDAzZT0gMzIgfHxcbitcdCAgICAoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tfc2l6ZSkge1xuIFx0XHRiZWZzX2Vycm9yKHNiLCBcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwiXG4gXHRcdFx0ICAgXCJDb3JydXB0aW9uIGxpa2VseS5cIik7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbitcdGlmIChiZWZzX3NiLVx1MDAzZWFnX3NoaWZ0IFx1MDAzZT0gMzIpIHtcbitcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cIik7XG4rXHRcdHJldHVybiBCRUZTX0VSUjtcbitcdH1cbitcbitcdGlmICgoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiBcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwiKTtcbiBcbiBcdGlmIChiZWZzX3NiLVx1MDAzZWxvZ19zdGFydCAhPSBiZWZzX3NiLVx1MDAzZWxvZ19lbmQgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjYxNTIyODU0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NDc3NDAyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQmVGUyBJbnRlZ2VyIE92ZXJmbG93IGFuZCBTaGlmdCBPdXQtb2YtQm91bmRzIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIEJlRlMgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBiZWZzLmhgIGFuZCBgc3VwZXIuY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdGFuZGFyZCBpc3N1ZTogcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBkdXJpbmcgYml0LXNoaWZ0aW5nIG9wZXJhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBgYmVmc19ibG9ja25yX3RgLCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgYSA2NC1iaXQgaW50ZWdlciB0eXBlLCB0aG91Z2ggSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiBpbiB0aGUgY29kZS4gTXkgZ3Vlc3MgaXMgaXQncyBhIGB1NjRgLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGZvciB0aGUgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHZhcmlhYmxlIGJlZm9yZSB0aGUgbGVmdC1zaGlmdCBieSBgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnRgLiBUaGF04oCZcyB0aGUgZmlyc3QgcmVkIGZsYWcg4oCTIGEgc2hpZnQgb3BlcmF0aW9uLiBUaGF0IHN1Z2dlc3RzIGEgc2hpZnQgb2YgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIGxlZnQgYnkgYGFnX3NoaWZ0YC4gVGhlIGZpeCBhbHNvIGluY2x1ZGVzIHNhbml0eSBjaGVja3Mgd2l0aGluIGBiZWZzX2NoZWNrX3NiYCB0byBlbnN1cmUgdGhhdCBib3RoIGBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItXHUwMDNlYWdfc2hpZnRgIGFyZSBsZXNzIHRoYW4gMzIuIFRoaXMgaXMgY2xldmVyLiBJdCdzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGJvdGggc2hpZnQtb3V0LW9mLWJvdW5kcyAoaWYgYGFnX3NoaWZ0YCBpcyAzMiBvciBncmVhdGVyKSBhbmQgaW50ZWdlciBvdmVyZmxvdyAoaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMgdG9vIGxhcmdlIGZvciB0aGUgdGFyZ2V0IHR5cGUpLlxuXG5UaGUgZ29hbCBoZXJlIGlzIGF2b2lkaW5nIFVCU0FOIHdhcm5pbmdzIG9yIG90aGVyIGlzc3VlcyB3aXRoIGJ1aWxkcyB1c2luZyBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXJzIChLQVNBTikuIEl0J3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQsIGFuZCBub3RoaW5nIHBvaW50cyB0byBhbnkga2luZCBvZiBpbmZvcm1hdGlvbiBsZWFrLiBJdCdzIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgY2FzdHMgdG8gbWFrZSBzdXJlIGludGVnZXIgb3BlcmF0aW9ucyBiZWhhdmUgYXMgZXhwZWN0ZWQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgcmlza3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cblNpbmNlIHRoaXMgaXMgcHVyZWx5IGFib3V0IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkzLCJPdXRwdXRUb2tlbnMiOjE4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjMxLjU2Mjk3MjMwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGlzc3VlcyBpbiB0aGUgQmVGUyBmaWxlIHN5c3RlbS4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiKClgIGFuZCBjYXN0cyBgaWFkZHItXFx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHNoaWZ0aW5nLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBhcmUgYnVncyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 19:01:28 +0000 UTC FinishedAt: 2026-08-26 19:09:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BEFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BEFS_FS" ], "series_id": "2837ddaa-514a-46c2-b2d1-8424233fcc70" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "befs_fill_super", "befs_check_sb", "befs_load_sb", "befs_read_datastream", "befs_fblock2brun", "befs_check_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JFRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZWZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19zYiYjMzQ7LAogICAgJiMzNDtiZWZzX2xvYWRfc2ImIzM0OywKICAgICYjMzQ7YmVmc19yZWFkX2RhdGFzdHJlYW0mIzM0OywKICAgICYjMzQ7YmVmc19mYmxvY2syYnJ1biYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9iZWZzL2JlZnMuaCBiL2ZzL2JlZnMvYmVmcy5oXG5pbmRleCA3Y2Q0NzI0NTY5NGRlLi5iOGM3YjdmODFmMzljIDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9iZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvYmVmcy5oXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSAmIzQzO1xuJiM0MztcdHJldHVybiAoKChiZWZzX2Jsb2NrbnJfdClpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwIFx1MDAzY1x1MDAzYyBCRUZTX1NCKHNiKS1cdTAwM2VhZ19zaGlmdCkgJiM0MztcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubylcbiBcbiBcdGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vIFx1MDAzZVx1MDAzZSBCRUZTX1NCKHNiKS1cdTAwM2VhZ19zaGlmdDtcbiBcdGlhZGRyLnN0YXJ0ID1cbi1cdCAgICBibG9ja25vIC0gKGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiYjNDM7XHQgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuIFx0aWFkZHIubGVuID0gMTtcbiBcbiBcdHJldHVybiBpYWRkcjtcbmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmNcbmluZGV4IDdjNTAwMjVjOTlkOGEuLjlmMjFmNzMyZDJjMTggMTAwNjQ0XG4tLS0gYS9mcy9iZWZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuY1xuQEAgLTkzLDE3ICYjNDM7OTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbiYjNDM7XHRpZiAoYmVmc19zYi1cdTAwM2VibG9ja19zaGlmdCBcdTAwM2U9IDMyIHx8XG4mIzQzO1x0ICAgICgxVSBcdTAwM2NcdTAwM2MgYmVmc19zYi1cdTAwM2VibG9ja19zaGlmdCkgIT0gYmVmc19zYi1cdTAwM2VibG9ja19zaXplKSB7XG4gXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwmIzM0O1xuIFx0XHRcdCAgIFwmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LlwmIzM0Oyk7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiYjNDM7XHRpZiAoYmVmc19zYi1cdTAwM2VhZ19zaGlmdCBcdTAwM2U9IDMyKSB7XG4mIzQzO1x0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDthZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEJFRlNfRVJSO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCgxVSBcdTAwM2NcdTAwM2MgYmVmc19zYi1cdTAwM2VhZ19zaGlmdCkgIT0gYmVmc19zYi1cdTAwM2VibG9ja3NfcGVyX2FnKVxuIFx0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwmIzM0Oyk7XG4gXG4gXHRpZiAoYmVmc19zYi1cdTAwM2Vsb2dfc3RhcnQgIT0gYmVmc19zYi1cdTAwM2Vsb2dfZW5kIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JFRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZWZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19zYiYjMzQ7LAogICAgJiMzNDtiZWZzX2xvYWRfc2ImIzM0OywKICAgICYjMzQ7YmVmc19yZWFkX2RhdGFzdHJlYW0mIzM0OywKICAgICYjMzQ7YmVmc19mYmxvY2syYnJ1biYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmgKaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmVmcy9iZWZzLmgKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgQkVGU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90CiBpYWRkcjJibG9ja25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfaW5vZGVfYWRkciAqaWFkZHIpCiB7Ci0JcmV0dXJuICgoaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwomIzQzOwlyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwogCQlpYWRkci0mZ3Q7c3RhcnQpOwogfQogCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubykKIAogCWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vICZndDsmZ3Q7IEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdDsKIAlpYWRkci5zdGFydCA9Ci0JICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwomIzQzOwkgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwogCWlhZGRyLmxlbiA9IDE7CiAKIAlyZXR1cm4gaWFkZHI7CmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmMKaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuYwpAQCAtOTMsMTcgJiM0Mzs5MywyMiBAQCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay4KIAkgKi8KIAotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewomIzQzOwlpZiAoYmVmc19zYi0mZ3Q7YmxvY2tfc2hpZnQgJmd0Oz0gMzIgfHwKJiM0MzsJICAgICgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewogCQliZWZzX2Vycm9yKHNiLCAmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuICYjMzQ7CiAJCQkgICAmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LiYjMzQ7KTsKIAkJcmV0dXJuIEJFRlNfRVJSOwogCX0KIAotCiAJLyogYWdfc2hpZnQgYWxzbyBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGJsb2Nrc19wZXJfYWcgaW4gYQogCSAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVjawogCSAqLwotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKJiM0MzsJaWYgKGJlZnNfc2ItJmd0O2FnX3NoaWZ0ICZndDs9IDMyKSB7CiYjNDM7CQliZWZzX2Vycm9yKHNiLCAmIzM0O2FnX3NoaWZ0ICZndDs9IDMyLiBDb3JydXB0aW9uIGxpa2VseS4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gQkVGU19FUlI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKIAkJYmVmc19lcnJvcihzYiwgJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLiYjMzQ7KTsKIAogCWlmIChiZWZzX3NiLSZndDtsb2dfc3RhcnQgIT0gYmVmc19zYi0mZ3Q7bG9nX2VuZCB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJFRlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEJFRlMsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZnMvYmVmcy9iZWZzLmhgIGFuZCBgZnMvYmVmcy9zdXBlci5jYC4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IHNlZW1zIGxpa2UgdGhlIGRldmVsb3BlcnMgYXJlIGFkZGluZyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGluIHRob3NlIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgYWxzbyBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYGJlZnNfc2ItJmd0O2Jsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItJmd0O2FnX3NoaWZ0YCB3aXRoaW4gYGJlZnNfY2hlY2tfc2JgLgoKUmlnaHQgYXdheSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgSSYjMzk7ZCB3YWdlciBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXBgIGlzIGEgMzItYml0IGludGVnZXIuIFRoYXQgc2hpZnQgb3BlcmF0aW9uLCBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0YCwgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIElmIGBhbGxvY2F0aW9uX2dyb3VwYCBpcyAzMi1iaXQsIGFuZCB0aGUgc2hpZnQgcmVzdWx0cyBpbiBhIHZhbHVlIGxhcmdlciB0aGFuIDMyIGJpdHMsIHdlJiMzOTtyZSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gb3ZlcmZsb3cgdGVycml0b3J5LiBObyBnb29kLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhvc2UgZmlsZXMgdG8gdmVyaWZ5IHRoZSBkYXRhIHR5cGUgYXNzdW1wdGlvbnMgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byB2YWxpZGF0ZSB0aGUgcHJvcG9zZWQgZml4IGFuZCBtYWtlIHN1cmUgaXQgaGFuZGxlcyBhbGwgdGhlIGVkZ2UgY2FzZXMgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R5cGVkZWYuKmJlZnNfYmxvY2tucl90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmcy5oLTE3LVxuZnMvYmVmcy9iZWZzLmg6MTg6dHlwZWRlZiB1NjQgYmVmc19ibG9ja25yX3Q7XG5mcy9iZWZzL2JlZnMuaC0xOS0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQkVGUyBEYXRhIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gYmUgemVyb2luZyBpbiBvbiBCRUZTIGRhdGEgc3RydWN0dXJlcy4gRmlyc3QsIGNvbmZpcm1hdGlvbjogeWVzLCB0aGF0IGBiZWZzX2Jsb2NrbnJfdGAgdHlwZSBpcyBpbmRlZWQgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciwgYSBgdTY0YC4gR29vZCwgZ29vZCwgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciBibG9jayBhZGRyZXNzaW5nLiBOb3csIG15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGBiZWZzX2lub2RlX2FkZHJgIGlzIGhhbmRsZWQuIFdoZXJlIGRvZXMgdGhhdCBmaXQgaW4gdGhlIGJsb2NrIG1hcCBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGlub2RlIGFkZHJlc3MgdHlwZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYmxvY2sgbnVtYmVyIHR5cGUgdG8gY29udGludWUgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYmVmc19pbm9kZV9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvQ2hhbmdlTG9nPTIwND1WZXJzaW9uIDAuNCAoMjAwMS0xMC0yOClcbi0tXG5mcy9iZWZzL0NoYW5nZUxvZy0yNDgtPT09PT09PT09PVxuZnMvYmVmcy9DaGFuZ2VMb2c6MjQ5OiogRml4IG5hc3R5IGJ1ZyBpbiBjb252ZXJ0aW5nIGJsb2NrIG51bWJlcnMgdG8gc3RydWN0IGJlZnNfaW5vZGVfYWRkci4gXG5mcy9iZWZzL0NoYW5nZUxvZy0yNTAtXHRTdWJ0bGUsIGJlY2F1c2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBvbmx5IHNvbWV0aW1lcyB3cm9uZy4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYmVmc19pbm9kZV9hZGRyYCBHcmVwKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJlZnNfaW5vZGVfYWRkcmAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgc3VyZmFjaW5nIGFzIGEgdGFyZ2V0IGZvciBhIGBncmVwYCBjb21tYW5kIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIHNpZ25pZmljYW50IGlkZW50aWZpZXIgd2l0aGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtJiMzOTtzIGludGVybmFscy4gSXQmIzM5O3MgZWl0aGVyIGEgZGF0YSBzdHJ1Y3R1cmUgZmllbGQsIGEgZnVuY3Rpb24gbmFtZSwgb3IgbWF5YmUgZXZlbiBhIGNvbnN0YW50IHVzZWQgaW4gaW5vZGUgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgYmV0IGl0JiMzOTtzIHByb2JhYmx5IG9uZSBvZiB0aGUgZmlyc3QgdHdvLiBOb3csIHdpdGhvdXQgbW9yZSBjb250ZXh0LCBpdCYjMzk7cyB0b3VnaCB0byBuYWlsIGRvd24gKmV4YWN0bHkqIHdoYXQgdGhpcyBgZ3JlcGAgaXMgbG9va2luZyBmb3IuIElzIGl0IHRyYWNpbmcgdXNlcyBvZiB0aGUgYWRkcmVzcz8gUG90ZW50aWFsIGJ1Z3MgaW52b2x2aW5nIGhvdyBpdCYjMzk7cyBoYW5kbGVkPyBPciwgYW0gSSBsb29raW5nIHRvIGxvY2F0ZSBhIHNwZWNpZmljIGlub2RlIHN0cnVjdHVyZSwgcGVyaGFwcyBvbmUgdGhhdCYjMzk7cyBiZWVuIGNvcnJ1cHRlZCBvciBpcyBiZWluZyBlcnJvbmVvdXNseSBhY2Nlc3NlZD8gSSYjMzk7ZCByZWFsbHkgbmVlZCB0byBzZWUgdGhlIGBncmVwYCBjb21tYW5kIGl0c2VsZiBhbmQsIGlkZWFsbHksIHRoZSBjb2RlYmFzZSBzdXJyb3VuZGluZyBpdCB0byB1bmRlcnN0YW5kIHRoZSB0cnVlIGludGVudC4gVGhhdCBzYWlkLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBlbm91Z2ggdG8gYmUgKnNlYXJjaGVkIGZvciogc2lnbmlmaWVzIGl0cyBpbXBvcnRhbmNlLCBwb3NzaWJseSBpbiBkZWJ1Z2dpbmcsIGF1ZGl0aW5nIG9yIHBlcmZvcm1hbmNlLiBGdXJ0aGVyIGV4cGxvcmF0aW9uIHJlcXVpcmVzIG1lIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZWRlZi4qYmVmc19pbm9kZV9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmc19mc190eXBlcy5oPTEwNz10eXBlZGVmIGJlZnNfZGlza19ibG9ja19ydW4gYmVmc19kaXNrX2lub2RlX2FkZHI7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaDoxMDg6dHlwZWRlZiBiZWZzX2Jsb2NrX3J1biBiZWZzX2lub2RlX2FkZHI7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBiZWZzX2Jsb2NrX3J1bmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBiZWZzX2Jsb2NrX3J1bmAuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaXQgdG8gc2VlIHdoZXJlIHdlJiMzOTtyZSBhdCwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGEgcG9pbnQgb2Ygb3JpZ2luLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcywgbG9vayBhdCB0aGUgbGFzdCB0aW1lIGl0IHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBsb2dzIGZvciByZWNlbnQgZXJyb3JzLCBpZiBhbnkuIEJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0JiMzOTtzIHJ1bm5pbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIEkgbmVlZCB0byBhZGRyZXNzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgZGV0ZXJtaW5lZC4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIHJlc3RhcnRpbmcgaXQsIG9yIGl0IGNvdWxkIGJlIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVjZW50IG1ldHJpY3MgYXJvdW5kIHRoaXMgaWYgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBiZWZzX2Jsb2NrX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gdG95aW5nIHdpdGggdGhlIGlkZWEgb2YgbmFtaW5nIHRoZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgYmxvY2sgcnVuIGluIHRoZSBiZWZzIGZpbGUgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gd2l0aCBzb21ldGhpbmcgbGlrZSBgdHlwZWRlZiBzdHJ1Y3QgYmVmc19ibG9ja19ydW5gLCB3aGljaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBkZXNjcmlwdGl2ZS4gSXQgY2xlYXJseSB0aWVzIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIEJFIEZpbGUgU3lzdGVtIGFuZCBoaWdobGlnaHRzIGl0cyBwdXJwb3NlIG9mIGhhbmRsaW5nIGJsb2NrIHJ1bnMuIEl0JiMzOTtzIGNvbmNpc2UsIGVhc3kgdG8gdW5kZXJzdGFuZCBhdCBhIGdsYW5jZSwgYW5kIGdldHMgdGhlIGpvYiBkb25lIHdpdGhvdXQgYmVpbmcgb3Zlcmx5IHZlcmJvc2UuIEl0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZmluaW5nIHRoaXMgY3J1Y2lhbCBkYXRhIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmIHN0cnVjdC4qYmVmc19ibG9ja19ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlF1aWNrIFNlYXJjaCBmb3IgYGJlZnNfYmxvY2tfcnVuYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIHNvbWV0aGluZyBvdXQsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBqdXN0ICpncmVwKiBmb3Igc29tZXRoaW5nIEkga25vdyBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQsIGEga25vd24gZnVuY3Rpb24gbmFtZTogYGJlZnNfYmxvY2tfcnVuYC4gVGhhdCBuYW1lIGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB3aGVyZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBsaWtlbHkgYSBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBCRUZTIGZpbGVzeXN0ZW0gdGhhdCBtYW5hZ2VzIGJsb2NrcyBvZiBkYXRhIGFuZCB0aGUgYWN0IG9mIHJ1bm5pbmcgb3IgZXhlY3V0aW5nIHNvbWUgc29ydCBvZiBvcGVyYXRpb24gaW4gaXQuIEtub3dpbmcgdGhlIG5hbWUgaXMgb25lIHRoaW5nLCBidXQgcXVpY2tseSBzZWVpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBpcyB3aGF0IEkgbmVlZC4gR3JlcHBpbmcgd2lsbCBnaXZlIG1lIGEgZmFzdCB2aWV3IG9mIHRoZSBwbGFjZXMgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfYmxvY2tfcnVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvYmVmcy5oPTMyPXN0cnVjdCBiZWZzX3NiX2luZm8ge1xuLS1cbmZzL2JlZnMvYmVmcy5oLTUwLVx0LyogSm91cm5hbCBsb2cgZW50cnkgKi9cbmZzL2JlZnMvYmVmcy5oOjUxOlx0YmVmc19ibG9ja19ydW4gbG9nX2Jsb2NrcztcbmZzL2JlZnMvYmVmcy5oLTUyLVx0YmVmc19vZmZfdCBsb2dfc3RhcnQ7XG4tLVxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg9MTAxPXR5cGVkZWYgc3RydWN0IHtcbi0tXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDQtXHR1MTYgbGVuO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTA1On0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTA2LVxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg9MTA3PXR5cGVkZWYgYmVmc19kaXNrX2Jsb2NrX3J1biBiZWZzX2Rpc2tfaW5vZGVfYWRkcjtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTEwOS1cbi0tXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xNTc9dHlwZWRlZiBzdHJ1Y3Qge1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTU4Olx0YmVmc19ibG9ja19ydW4gZGlyZWN0W0JFRlNfTlVNX0RJUkVDVF9CTE9DS1NdO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTU5LVx0YmVmc19vZmZfdCBtYXhfZGlyZWN0X3JhbmdlO1xuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTYwOlx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3Q7XG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xNjEtXHRiZWZzX29mZl90IG1heF9pbmRpcmVjdF9yYW5nZTtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE2MjpcdGJlZnNfYmxvY2tfcnVuIGRvdWJsZV9pbmRpcmVjdDtcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTE2My1cdGJlZnNfb2ZmX3QgbWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZTtcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0yND1zdGF0aWMgaW50IGJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUtXHRcdFx0XHQgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI2Olx0XHRcdFx0IGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sIGJlZnNfYmxvY2tfcnVuICpydW4pO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjctXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0yOD1zdGF0aWMgaW50IGJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzAtXHRcdFx0XHQgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE6XHRcdFx0XHQgICBiZWZzX2Jsb2NrX3J1biAqcnVuKTtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMyLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTM1LVx0XHRcdFx0ICAgICAgYmVmc19ibG9ja25yX3QgYmxvY2tubyxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjM2Olx0XHRcdFx0ICAgICAgYmVmc19ibG9ja19ydW4gKnJ1bik7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zNy1cbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz00OT1iZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01Mi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MzpcdGJlZnNfYmxvY2tfcnVuIHJ1bjtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTU0LVx0YmVmc19ibG9ja25yX3QgYmxvY2s7XHQvKiBibG9jayBjb3Jlc3BvbmRpbmcgdG8gcG9zICovXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTU9YmVmc19mYmxvY2syYnJ1bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6OTY6XHRcdCBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy05Ny17XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MjUxPWJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjUyOlx0XHQgICAgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLCBiZWZzX2Jsb2NrX3J1biAqcnVuKVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUzLXtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI1NC1cdGludCBpO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjU1Olx0Y29uc3QgYmVmc19ibG9ja19ydW4gKmFycmF5ID0gZGF0YS1cdTAwM2VkaXJlY3Q7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0yNTYtXHRiZWZzX2Jsb2NrbnJfdCBzdW07XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzA1PWJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA3LVx0XHRcdGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMDg6XHRcdFx0YmVmc19ibG9ja19ydW4gKnJ1bilcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMwOS17XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzE2LVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE3Olx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVx1MDAzZWluZGlyZWN0O1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzE4LVx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXHUwMDI2aW5kaXJlY3QpO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQxNi1cdFx0XHQgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDE3Olx0XHRcdCAgIGJlZnNfYmxvY2tfcnVuICpydW4pXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MTgte1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQyOS1cdHN0cnVjdCBidWZmZXJfaGVhZCAqaW5kaXJfYmxvY2s7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0MzA6XHRiZWZzX2Jsb2NrX3J1biBpbmRpcl9ydW47XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MzEtXHRiZWZzX2Rpc2tfaW5vZGVfYWRkciAqaWFkZHJfYXJyYXk7XG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmg9MTE9aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjEyOlx0XHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMy1cbi0tXG5mcy9iZWZzL2RlYnVnLmM9NzI9YmVmc19kdW1wX2lub2RlKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKmlub2RlKVxuLS1cbmZzL2JlZnMvZGVidWcuYy03NS1cbmZzL2JlZnMvZGVidWcuYzo3NjpcdGJlZnNfYmxvY2tfcnVuIHRtcF9ydW47XG5mcy9iZWZzL2RlYnVnLmMtNzctXG4tLVxuZnMvYmVmcy9kZWJ1Zy5jPTE1Nj1iZWZzX2R1bXBfc3VwZXJfYmxvY2soY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19zdXBlcl9ibG9jayAqc3VwKVxuLS1cbmZzL2JlZnMvZGVidWcuYy0xNTktXG5mcy9iZWZzL2RlYnVnLmM6MTYwOlx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcbmZzL2JlZnMvZGVidWcuYy0xNjEtXG4tLVxuZnMvYmVmcy9kZWJ1Zy5jPTIxMz1iZWZzX2R1bXBfcnVuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gcnVuKVxuLS1cbmZzL2JlZnMvZGVidWcuYy0yMTYtXG5mcy9iZWZzL2RlYnVnLmM6MjE3Olx0YmVmc19ibG9ja19ydW4gbiA9IGZzcnVuX3RvX2NwdShzYiwgcnVuKTtcbmZzL2JlZnMvZGVidWcuYy0yMTgtXG4tLVxuZnMvYmVmcy9lbmRpYW4uaD02MT1jcHVfdG9fZnMxNihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgbilcbi0tXG5mcy9iZWZzL2VuZGlhbi5oLTcwLVxuZnMvYmVmcy9lbmRpYW4uaDo3MTpzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tfcnVuXG5mcy9iZWZzL2VuZGlhbi5oLTcyLWZzcnVuX3RvX2NwdShjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Rpc2tfYmxvY2tfcnVuIG4pXG5mcy9iZWZzL2VuZGlhbi5oLTczLXtcbmZzL2JlZnMvZW5kaWFuLmg6NzQ6XHRiZWZzX2Jsb2NrX3J1biBydW47XG5mcy9iZWZzL2VuZGlhbi5oLTc1LVxuLS1cbmZzL2JlZnMvZW5kaWFuLmg9ODg9c3RhdGljIGlubGluZSBiZWZzX2Rpc2tfYmxvY2tfcnVuXG5mcy9iZWZzL2VuZGlhbi5oOjg5OmNwdV90b19mc3J1bihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrX3J1biBuKVxuZnMvYmVmcy9lbmRpYW4uaC05MC17XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTM4LVx0YmVmc19kYXRhX3N0cmVhbSAqZHMgPSBcdTAwMjZCRUZTX0koaW5vZGUpLVx1MDAzZWlfZGF0YS5kcztcbmZzL2JlZnMvbGludXh2ZnMuYzoxMzk6XHRiZWZzX2Jsb2NrX3J1biBydW4gPSBCQURfSUFERFI7XG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQwLVx0aW50IHJlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCRUZTIEJsb2NrIEFkZHJlc3NlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJlZnNfaW5vZGVfYWRkcmAgYW5kIGl0JiMzOTtzIHBvaW50aW5nIHRvIGBiZWZzX2Jsb2NrX3J1bmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRpbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYGJlZnNfYmxvY2tfcnVuYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgQkVGUyBoYW5kbGVzIGl0cyBibG9jayBydW5zIGFuZCBob3cgdGhleSYjMzk7cmUgZGVmaW5lZCBhdCB0aGUgZnVuZGFtZW50YWwgbGV2ZWwuIFNvLCBJJiMzOTtsbCBnbyByaWdodCB0byB0aGUgc291cmNlOiB0aGUgYGZzL2JlZnMvYmVmc19mc190eXBlcy5oYCBoZWFkZXIgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMgYWJvdXQgdGhlIG9yZ2FuaXphdGlvbiBvZiB0aGVzZSBibG9ja3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgaGFzIGZvciBhZGRyZXNzaW5nIHdpdGhpbiB0aGUgQkVGUyBmaWxlc3lzdGVtLiBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpbm9kZXMgbWFwIHRvIGFjdHVhbCBkYXRhLiBMZXQmIzM5O3Mgc2Vl4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZWRlZiBzdHJ1Y3QgXFx7LipcXH0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuOyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCRUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBgYmVmc19ibG9ja19ydW5gIHN0cnVjdDoKCmBgYGMKdHlwZWRlZiBzdHJ1Y3QgewoJdTMyIGFsbG9jYXRpb25fZ3JvdXA7Cgl1MTYgc3RhcnQ7Cgl1MTYgbGVuOwp9IFBBQ0tFRCBiZWZzX2Jsb2NrX3J1bjsKYGBgCgpSaWdodCwgYGFsbG9jYXRpb25fZ3JvdXBgIGlzIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIsIGFuZCBgYmVmc19ibG9ja25yX3RgIGlzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIuIE5vdyBJIHNlZSBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBhZ19zaGlmdGAuIElmIGBhZ19zaGlmdGAgaXMgbGFyZ2UgZW5vdWdoICgzMSBvciBncmVhdGVyKSwgdGhlIGxlZnQgc2hpZnQgY291bGQgb3ZlcmZsb3cgYSAzMi1iaXQgaW50ZWdlciwgYW5kIHRoZW4gdGhlIGNhc3QgdG8gNjQgYml0cyBhZnRlcndhcmQgd29uJiMzOTt0IGNoYW5nZSB0aGF0LiBJZiBgYWdfc2hpZnRgIGlzIDMyIG9yIG1vcmUsIHRoZW4gdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KClRoZSBwYXRjaCBoZXJlIGFkZHMgYSBjYXN0IHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHRoZSBzaGlmdCwgZW5zdXJpbmcgaXTigJlzIGEgNjQtYml0IHNoaWZ0LiBTbWFydC4gQW5kIEkgc2VlIGEgY2hlY2sgaW4gYGJlZnNfY2hlY2tfc2JgIHRoYXQgZW5zdXJlcyBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGFyZSBib3RoIGxlc3MgdGhhbiAzMi4KCk9rYXksIG5vdyBsZXTigJlzIHRoaW5rIGFib3V0IGNvbnRleHQuIGBiZWZzX2NoZWNrX3NiYCBnZXRzIGNhbGxlZCB3aGVuIG1vdW50aW5nIGEgQkVGUyBmaWxlc3lzdGVtLiBCRUZTLCByaWdodCwgdGhhdOKAmXMgdGhlIEJlT1MgZmlsZXN5c3RlbS4gSXQmIzM5O3MgYSAqZGlzayogZmlsZXN5c3RlbSwgc28geWVzLCB5b3UgY2FuIGRlZmluaXRlbHkgbW91bnQgYSB1c2VyLXByb3ZpZGVkIGltYWdlLiBTbywgYSBtYWxpY2lvdXNseSBjcmFmdGVkIEJFRlMgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGlzIG92ZXJmbG93IG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gQW5kIHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBzZWN1cml0eSBpc3N1ZSBpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBtb3VudCBwYXRoLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBpYWRkcjJibG9ja25vYCwgYGJsb2Nrbm8yaWFkZHJgLCBhbmQgYGJlZnNfY2hlY2tfc2JgLiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9iZWZzL2JlZnMuaGAuIGBiZWZzX2NoZWNrX3NiYCBpcyBpbiBgZnMvYmVmcy9zdXBlci5jYC4gQWgsIHllcywgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBmcm9tIGBiZWZzX2ZpbGxfc3VwZXJgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJlcGFyZSB0aGUgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBnb29kIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfY2hlY2tfc2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy04NDItXHRpZiAoKGJlZnNfbG9hZF9zYihzYiwgZGlza19zYikgIT0gQkVGU19PSykgfHxcbmZzL2JlZnMvbGludXh2ZnMuYzo4NDM6XHQgICAgKGJlZnNfY2hlY2tfc2Ioc2IpICE9IEJFRlNfT0spKVxuZnMvYmVmcy9saW51eHZmcy5jLTg0NC1cdFx0Z290byB1bmFjcXVpcmVfYmg7XG4tLVxuZnMvYmVmcy9zdXBlci5jPTU3PWludFxuZnMvYmVmcy9zdXBlci5jOjU4OmJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JlZnMvc3VwZXIuYy01OS17XG4tLVxuZnMvYmVmcy9zdXBlci5oPTU9aW50IGJlZnNfbG9hZF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpkaXNrX3NiKTtcbmZzL2JlZnMvc3VwZXIuaDo2OmludCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBNb3VudCBQb2ludCBBbmFseXNpcyoqCgpSaWdodCwgc28gYGJlZnNfZmlsbF9zdXBlcmAgaXMgdGhlIGJpZyBrYWh1bmEsIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZm9yIG1vdW50aW5nIHRoaXMgQkVGUyBmaWxlIHN5c3RlbS4gVGhhdCB0ZWxscyBtZSBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIGBiZWZzX2NoZWNrX3NiYCwgc2luY2UgaXQgbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzIGR1cmluZyB0aGUgbW91bnRpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gcmVhbGx5IHBva2UgYW5kIHByb2QgZm9yIHZ1bG5lcmFiaWxpdGllcy4gU2luY2UgSSYjMzk7bSBzdGFydGluZyBmcm9tIGEgY29kZS1maXJzdCBwZXJzcGVjdGl2ZSwgSSBzaG91bGQgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBgS2NvbmZpZ2Agb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byBCRUZTIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCRUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYmVmcy9LY29uZmlnOjI6Y29uZmlnIEJFRlNfRlNcbmZzL2JlZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QmVPUyBmaWxlIHN5c3RlbSAoQmVGUykgc3VwcG9ydCAocmVhZCBvbmx5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZyBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE5vdywgZ2l2ZW4gdGhlIG51YW5jZXMgb2YgdGhpcyBzZXR1cCwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIEkgbmVlZCB0byBwcm9hY3RpdmVseSBjb25zaWRlciBpZiB0aGlzIGlzICphbGwqIEkgcmVxdWlyZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBBcmUgdGhlcmUgYW55IHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMsIGFuY2lsbGFyeSBzZXR0aW5ncywgb3IgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgcGllY2VzIHRoYXQgd291bGQgaW1wYWN0IGl0cyBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJFRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9LY29uZmlnPTIzPWNvbmZpZyBCRUZTX0RFQlVHXG5mcy9iZWZzL0tjb25maWctMjQtXHRib29sIFwmIzM0O0RlYnVnIEJlRlNcJiMzNDtcbmZzL2JlZnMvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gQkVGU19GU1xuZnMvYmVmcy9LY29uZmlnLTI2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQkVGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgQkVGU2AgaXRzZWxmLiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzLCBJIGRvbiYjMzk7dCBzZWUgYW55IGdsYXJpbmcgY29uZmlnIGdvdGNoYXMgb3IgbmVjZXNzYXJ5IHR3ZWFrcyBmb3IgYEJFRlNgIGl0c2VsZi4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluIHRoYXQgcmVnYXJkLiBCdXQsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9mIGBCRUZTX0ZTYD8gV2hhdCBleHRlcm5hbCBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIG90aGVyIGludGVybmFsIG1vZHVsZXMgYXJlIGl0cyBidWlsZGluZyBibG9ja3M/IEkga25vdyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIGVzcGVjaWFsbHkgaWYgdGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmVmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvS2NvbmZpZz0yPWNvbmZpZyBCRUZTX0ZTXG5mcy9iZWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0JlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcJiMzNDtcbmZzL2JlZnMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBCTE9DS1xuZnMvYmVmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbi0tXG5mcy9iZWZzL0tjb25maWc9MjM9Y29uZmlnIEJFRlNfREVCVUdcbmZzL2JlZnMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7RGVidWcgQmVGU1wmIzM0O1xuZnMvYmVmcy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBCRUZTX0ZTXG5mcy9iZWZzL0tjb25maWctMjYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEJFRlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IGhlcmUgaGluZ2VzIG9uIHRoZSBgQkxPQ0tgIGNvbXBvbmVudCwgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZS4gIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIHRvIGVuYWJsZSBpcyBkZWZpbml0ZWx5IGBCRUZTX0ZTYC4gUmlnaHQsIGdvdCBpdC4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2NoZWNrX3NiYCBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgb25lcyBoYW5kbGluZyBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uLCB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpCdXQgaG9sZCBvbi4uLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgYXJlIHVzZWQgKmV2ZXJ5d2hlcmUqLiAgVGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBjb3JlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcHJvYmFibHkgY3J1Y2lhbCBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMsIHdoaWNoIHdvdWxkIGJlIGZ1bmRhbWVudGFsIHRvIGFsbW9zdCBldmVyeSBCRUZTIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXZhbHVhdGUgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBUaGV5JiMzOTtsbCBuZWVkIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lhZGRyMmJsb2Nrbm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nLTMzMy1cdEdvdCByaWQgb2YgYWJvbWluYXRpb25zIGJlZnNfaWFkZHIyaW5vZGUoKSBhbmQgYmVmc19pbm9kZTJpbm8oKS4gXG5mcy9iZWZzL0NoYW5nZUxvZzozMzQ6XHRSZXBsYWNlZCB3aXRoIHNpbmdsZSBmdW5jdGlvbiBpYWRkcjJibG9ja25vKCkuXG5mcy9iZWZzL0NoYW5nZUxvZy0zMzUtXHQoZnMvYmVmcy9zdXBlci5jKSAoZnMvYmVmcy9pbm9kZS5jKVxuLS1cbmZzL2JlZnMvYmVmcy5oPTEyMj1zdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG5mcy9iZWZzL2JlZnMuaDoxMjM6aWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuZnMvYmVmcy9iZWZzLmgtMTI0LXtcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0zMDU9YmVmc19maW5kX2JydW5faW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTctXHRiZWZzX2Jsb2NrX3J1biBpbmRpcmVjdCA9IGRhdGEtXHUwMDNlaW5kaXJlY3Q7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTg6XHRiZWZzX2Jsb2NrbnJfdCBpbmRpcmJsb2Nrbm8gPSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpbmRpcmVjdCk7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTktXHRpbnQgYXJyYXlsZW4gPSBiZWZzX2lhZGRyc19wZXJfYmxvY2soc2IpO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3MS1cdGRibF9pbmRpcl9ibG9jayA9XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0NzI6XHQgICAgc2JfYnJlYWQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmRhdGEtXHUwMDNlZG91YmxlX2luZGlyZWN0KSAmIzQzO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDczLVx0XHRcdFx0XHRkYmxfd2hpY2hfYmxvY2spO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3Ny1cdFx0XHQgICAodW5zaWduZWQgbG9uZylcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ3ODpcdFx0XHQgICBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZkYXRhLVx1MDAzZWRvdWJsZV9pbmRpcmVjdCkgJiM0MztcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3OS1cdFx0XHQgICBkYmxfd2hpY2hfYmxvY2spO1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ5OC1cdGluZGlyX2Jsb2NrID1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ5OTpcdCAgICBzYl9icmVhZChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXHUwMDI2aW5kaXJfcnVuKSAmIzQzOyB3aGljaF9ibG9jayk7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01MDAtXHRpZiAoaW5kaXJfYmxvY2sgPT0gTlVMTCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwMi1cdFx0XHQgICBcJiMzNDthdCBibG9ja25vICVsdVwmIzM0OywgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NTAzOlx0XHRcdCAgIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmluZGlyX3J1bikgJiM0Mzsgd2hpY2hfYmxvY2spO1xuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTA0LVx0XHRyZXR1cm4gQkVGU19FUlI7XG4tLVxuZnMvYmVmcy9pbm9kZS5jPTE5PWJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxuLS1cbmZzL2JlZnMvaW5vZGUuYy0zNi1cdCAqL1xuZnMvYmVmcy9pbm9kZS5jOjM3Olx0aWYgKGlub2RlICE9IGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNmlub19udW0pKSB7XG5mcy9iZWZzL2lub2RlLmMtMzgtXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2lub2RlIGJsb2NrbnIgZmllbGQgZGlzYWdyZWVzIHdpdGggdmZzIFwmIzM0O1xuZnMvYmVmcy9pbm9kZS5jLTM5LVx0XHRcdCAgIFwmIzM0O1ZGUzogJWx1LCBJbm9kZSAlbHVcJiMzNDssICh1bnNpZ25lZCBsb25nKVxuZnMvYmVmcy9pbm9kZS5jOjQwOlx0XHRcdCAgIGlub2RlLCAodW5zaWduZWQgbG9uZylpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpbm9fbnVtKSk7XG5mcy9iZWZzL2lub2RlLmMtNDEtXHRcdHJldHVybiBCRUZTX0JBRF9JTk9ERTtcbi0tXG5mcy9iZWZzL2lvLmM9Mjc9YmVmc19icmVhZF9pYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlX2FkZHIgaWFkZHIpXG4tLVxuZnMvYmVmcy9pby5jLTQyLVxuZnMvYmVmcy9pby5jOjQzOlx0YmxvY2sgPSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZpYWRkcik7XG5mcy9iZWZzL2lvLmMtNDQtXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTYwLVxuZnMvYmVmcy9saW51eHZmcy5jOjE2MTpcdGRpc2tfb2ZmID0gKHVsb25nKSBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjZydW4pO1xuZnMvYmVmcy9saW51eHZmcy5jLTE2Mi1cbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NzgwPWJlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jLTg2OC1cdHNiLVx1MDAzZXNfdGltZV9tYXggPSAweGZmZmZmZmZmZmZmZmxsO1xuZnMvYmVmcy9saW51eHZmcy5jOjg2OTpcdHJvb3QgPSBiZWZzX2lnZXQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFx1MDAyNihiZWZzX3NiLVx1MDAzZXJvb3RfZGlyKSkpO1xuZnMvYmVmcy9saW51eHZmcy5jLTg3MC1cdGlmIChJU19FUlIocm9vdCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSB1c2FnZSwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQ29kZSBJbnNwZWN0aW9uOiBBZGRyZXNzIENvbnZlcnNpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBpYWRkcjJibG9ja25vYCB1c2VkIHByZXR0eSBleHRlbnNpdmVseSBhY3Jvc3MgdGhlIEJFRlMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGluIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgYmVmc19maW5kX2JydW5faW5kaXJlY3RgLCBgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3RgLCBgYmVmc19jaGVja19pbm9kZWAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYGJlZnNfZ2V0X2Jsb2NrYCwgYW5kIGBiZWZzX2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdXRpbGl0eSBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBibG9jayBtYXBwaW5nIHN0cnVjdHVyZXMuIEl0JiMzOTtzIGludm9sdmVkIGluIGZpbmRpbmcgYmxvY2sgcnVucywgY2hlY2tpbmcgaW5vZGUgaW50ZWdyaXR5LCByZWFkaW5nIGJsb2NrIGRhdGEgYmFzZWQgb24gaW5vZGUgYWRkcmVzcywgZ2V0dGluZyBibG9ja3MgZm9yIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsaXppbmcgdGhlIHN1cGVyIGJsb2NrIHdoaWNoIHdvdWxkIGhhdmUgdG8gY29udGFpbiBibG9jayBudW1iZXIgZGF0YS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGJsb2Nrbm8yaWFkZHJgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSB1c2VkIGluIGBiZWZzX2lnZXRgLCB0aGUgaW5vZGUgZ2V0IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdXNhZ2UsIGp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIGtub3cgdGhlIGludmVyc2Ugb2YgdGhlIGZpcnN0IG9uZSB3b3VsZCBoYXZlIHRvIGJlIGhlcmUgdG9vLiBJdCB3b3VsZCBoYXZlIHRvIGJlIGNvbnZlcnRpbmcgYmV0d2VlbiBibG9jayBudW1iZXIgYW5kIGFuIGlub2RlIGFkZHJlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsb2Nrbm8yaWFkZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9iZWZzLmg9MTI5PXN0YXRpYyBpbmxpbmUgYmVmc19pbm9kZV9hZGRyXG5mcy9iZWZzL2JlZnMuaDoxMzA6YmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuZnMvYmVmcy9iZWZzLmgtMTMxLXtcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMzE3LVx0LyogY29udmVydCBmcm9tIHZmcyYjMzk7cyBpbm9kZSBudW1iZXIgdG8gYmVmcyYjMzk7cyBpbm9kZSBudW1iZXIgKi9cbmZzL2JlZnMvbGludXh2ZnMuYzozMTg6XHRiZWZzX2luby1cdTAwM2VpX2lub2RlX251bSA9IGJsb2Nrbm8yaWFkZHIoc2IsIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2JlZnMvbGludXh2ZnMuYy0zMTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCRUZTIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhpcyBpc3N1ZSBiYWNrIHRvIGhvdyBCRUZTIGhhbmRsZXMgc3VwZXJibG9ja3MgYW5kIGlub2RlIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCBgYmxvY2tubzJpYWRkcmAgaXMgdXNlZCB3aXRoaW4gYGJlZnNfaWdldGAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgYmVmc19maWxsX3N1cGVyYCBhbmQgYGJlZnNfbG9va3VwYC4gR2l2ZW4gdGhhdCB0aGlzIGJ1ZyBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGEgY3JhZnRlZCBCRUZTIGltYWdlIGR1cmluZyBtb3VudCBvciBmaWxlIGFjY2VzcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkgdGhhdCYjMzk7cyByaXBlIGZvciBleHBsb2l0YXRpb24uCgpJbml0aWFsbHksIEkgaGFkIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19pZ2V0YCwgYGJlZnNfZmluZF9icnVuX2luZGlyZWN0YCwgYGJlZnNfZmluZF9icnVuX2RibGluZGlyZWN0YCwgYGJlZnNfYnJlYWRfaWFkZHJgLCBhbmQgYGJlZnNfZ2V0X2Jsb2NrYC4gTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoYXQgbGlzdCBiYXNlZCBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LgoKYGJlZnNfZmlsbF9zdXBlcmAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3VudGluZywgYW5kIGBiZWZzX2NoZWNrX3NiYCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYGJlZnNfZmlsbF9zdXBlcmAuIGBiZWZzX2lnZXRgIGlzIGNhbGxlZCBmcm9tIGJvdGggYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2xvb2t1cGAsIHdoaWNoIGdpdmVzIGl0IHRoZSBzZWNvbmQgcG9pbnQgb2YgZW50cnkuIGBiZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdGAgYW5kIGBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdGAgYXJlIHBhcnQgb2YgYGJlZnNfZmJsb2NrMmJydW5gLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgYnkgYGJlZnNfZ2V0X2Jsb2NrYCBhbmQgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYC4gYGJlZnNfZ2V0X2Jsb2NrYCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGBnZXRfYmxvY2tgIGNhbGxiYWNrIGZvciBgbXBhZ2VfcmVhZF9mb2xpb2AgYW5kIGBibG9ja19yZWFkX2Z1bGxfZm9saW9gLCBhbmQgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCBoYW5kbGVzIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBzeW1saW5rcy4KClNvLCBib2lsaW5nIGl0IGRvd24sIHRoZSBtb3N0IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgYXJlOgoKKiAgIGBiZWZzX2ZpbGxfc3VwZXJgIChtb3VudCkKKiAgIGBiZWZzX2lnZXRgIChpbm9kZSByZXRyaWV2YWwpCiogICBgYmVmc19nZXRfYmxvY2tgIChkYXRhIGJsb2NrIG1hcHBpbmcpCiogICBgYmVmc19yZWFkX2RhdGFzdHJlYW1gIChyZWFkaW5nIGRhdGEgc3RyZWFtcykKCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgZXh0ZW50IG9mIHRoZSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX3JlYWRfZGF0YXN0cmVhbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL0NoYW5nZUxvZz0xNz1WZXJzaW9uIDAuOSAoMjAwMi0wMy0xNClcbi0tXG5mcy9iZWZzL0NoYW5nZUxvZy0xOS0qIEFkZGVkIFNlcmdleSBTLiBLb3N0eWxpb3YmIzM5O3MgcGF0Y2ggdG8gZWxpbWluYXRlIG1lbWNweSgpIG92ZXJoZWFkXG5mcy9iZWZzL0NoYW5nZUxvZzoyMDpcdGZyb20gYiYjNDM7dHJlZSBvcGVyYXRpb25zLiBDaGFuZ2VzIHRoZSBiZWZzX3JlYWRfZGF0YXN0cmVhbSgpIGludGVyZmFjZS5cbmZzL2JlZnMvQ2hhbmdlTG9nLTIxLVxuLS1cbmZzL2JlZnMvYnRyZWUuYz0xMTk9c3RhdGljIGludCBiZWZzX2NvbXBhcmVfc3RyaW5ncyhjb25zdCB2b2lkICprZXkxLCBpbnQga2V5bGVuMSxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMTI3LSAqXG5mcy9iZWZzL2J0cmVlLmM6MTI4OiAqIENhbGxzIGJlZnNfcmVhZF9kYXRhc3RyZWFtIHRvIHJlYWQgaW4gdGhlIGJ0cmVlIHN1cGVyYmxvY2sgYW5kXG5mcy9iZWZzL2J0cmVlLmMtMTI5LSAqIG1ha2VzIHN1cmUgaXQgaXMgaW4gY3B1IGJ5dGVvcmRlciwgYnl0ZXN3YXBwaW5nIGlmIG5lY2Vzc2FyeS5cbi0tXG5mcy9iZWZzL2J0cmVlLmM9MTM0PWJlZnNfYnRfcmVhZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMTQxLVxuZnMvYmVmcy9idHJlZS5jOjE0MjpcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCAwLCBOVUxMKTtcbmZzL2JlZnMvYnRyZWUuYy0xNDMtXG4tLVxuZnMvYmVmcy9idHJlZS5jLTE3Ny0gKlxuZnMvYmVmcy9idHJlZS5jOjE3ODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBpbmRpY2F0ZWQgYnRyZWUgbm9kZSBhbmRcbmZzL2JlZnMvYnRyZWUuYy0xNzktICogbWFrZXMgc3VyZSBpdHMgaGVhZGVyIGZpZWxkcyBhcmUgaW4gY3B1IGJ5dGVvcmRlciwgYnl0ZXN3YXBwaW5nIGlmXG4tLVxuZnMvYmVmcy9idHJlZS5jPTE5MT1iZWZzX2J0X3JlYWRfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2J0cmVlLmMtMjAwLVxuZnMvYmVmcy9idHJlZS5jOjIwMTpcdG5vZGUtXHUwMDNlYmggPSBiZWZzX3JlYWRfZGF0YXN0cmVhbShzYiwgZHMsIG5vZGVfb2ZmLCBcdTAwMjZvZmYpO1xuZnMvYmVmcy9idHJlZS5jLTIwMi1cdGlmICghbm9kZS1cdTAwM2ViaCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTMzPXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zOC0vKipcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjM5OiAqIGJlZnNfcmVhZF9kYXRhc3RyZWFtIC0gZ2V0IGJ1ZmZlcl9oZWFkIGNvbnRhaW5pbmcgZGF0YSwgc3RhcnRpbmcgZnJvbSBwb3MuXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MC0gKiBAc2I6IEZpbGVzeXN0ZW0gc3VwZXJibG9ja1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ4PXN0cnVjdCBidWZmZXJfaGVhZCAqXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0OTpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwLVx0XHQgICAgIGJlZnNfb2ZmX3QgcG9zLCB1aW50ICpvZmYpXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MTMwPWJlZnNfcmVhZF9sc3ltbGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMzktXHR3aGlsZSAoYnl0ZXNfcmVhZCBcdTAwM2MgbGVuKSB7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzoxNDA6XHRcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCBieXRlc19yZWFkLCBOVUxMKTtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTE0MS1cdFx0aWYgKCFiaCkge1xuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTYtXG5mcy9iZWZzL2RhdGFzdHJlYW0uaDo3OnN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTgtXHRcdFx0XHRcdCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIEJFRlMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCRUZTIGZ1bmN0aW9ucy4gRmlyc3QsIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAg4oCTIHRoYXQgb25lJiMzOTtzIG5vbi1zdGF0aWMsIGdvdCBpdC4gVGhlbiwgYGJlZnNfZmlsbF9zdXBlcmAgaXMgYWxzbyBub24tc3RhdGljLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgaG9sZCBvbi4uLiBJIGNvdWxkJiMzOTt2ZSBzd29ybiBJJiMzOTtkIHNlZW4gYGJlZnNfaWdldGAgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVjbGFyYXRpb24gb2YgYGJlZnNfaWdldGAgYmVmb3JlIG1vdmluZyBmb3J3YXJkLCBqdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZnNfaWdldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iZWZzL2xpbnV4dmZzLmM9NDc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDgtXHRcdFx0XHQgIHVuc2lnbmVkIGludCk7XG5mcy9iZWZzL2xpbnV4dmZzLmM6NDk6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTtcbmZzL2JlZnMvbGludXh2ZnMuYy01MC1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0xNzM9YmVmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0yMDgtXHR9IGVsc2Uge1xuZnMvYmVmcy9saW51eHZmcy5jOjIwOTpcdFx0aW5vZGUgPSBiZWZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIChpbm9fdCkgb2Zmc2V0KTtcbmZzL2JlZnMvbGludXh2ZnMuYy0yMTAtXHR9XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTI5Mj1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0yOTgtXG5mcy9iZWZzL2xpbnV4dmZzLmM6Mjk5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbmZzL2JlZnMvbGludXh2ZnMuYy0zMDAte1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02Mzg9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19uZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQ2NF90IGlubyxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQxLVx0LyogTm8gbmVlZCB0byBoYW5kbGUgaV9nZW5lcmF0aW9uICovXG5mcy9iZWZzL2xpbnV4dmZzLmM6NjQyOlx0cmV0dXJuIGJlZnNfaWdldChzYiwgaW5vKTtcbmZzL2JlZnMvbGludXh2ZnMuYy02NDMtfVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02NjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjY5LVxuZnMvYmVmcy9saW51eHZmcy5jOjY3MDpcdHBhcmVudCA9IGJlZnNfaWdldChjaGlsZC1cdTAwM2VkX3NiLFxuZnMvYmVmcy9saW51eHZmcy5jLTY3MS1cdFx0XHQgICAodW5zaWduZWQgbG9uZyliZWZzX2luby1cdTAwM2VpX3BhcmVudC5zdGFydCk7XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy04NjgtXHRzYi1cdTAwM2VzX3RpbWVfbWF4ID0gMHhmZmZmZmZmZmZmZmZsbDtcbmZzL2JlZnMvbGludXh2ZnMuYzo4Njk6XHRyb290ID0gYmVmc19pZ2V0KHNiLCBpYWRkcjJibG9ja25vKHNiLCBcdTAwMjYoYmVmc19zYi1cdTAwM2Vyb290X2RpcikpKTtcbmZzL2JlZnMvbGludXh2ZnMuYy04NzAtXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGBiZWZzX2lnZXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbHkgb24gYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgYmVmc19sb29rdXBgLCBgYmVmc19uZnNfZ2V0X2lub2RlYCwgYGJlZnNfZ2V0X3BhcmVudGAsIGFuZCBgYmVmc19maWxsX3N1cGVyYC4gVGhpcyBpcyBhIHVzZWZ1bCBpbml0aWFsIGJ1aWxkaW5nIGJsb2NrLgoKTm93LCBob2xkIG9uLi4uIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYGJlZnNfZ2V0X2Jsb2NrYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gSXQgc2hvdWxkIGJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmVmc19nZXRfYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nLTIzMy1cdFNvIGl0IGRvZXMgaS9vIGluIG11Y2ggbGFyZ2VyIGNodW5rcy4gSXQgaXMgdGhlIGNvcnJlY3QgbGludXggd2F5LiBJdCBcbmZzL2JlZnMvQ2hhbmdlTG9nOjIzNDpcdHVzZXMgYmVmc19nZXRfYmxvY2soKSBieSB3YXkgb2YgYmVmc19yZWFkcGFnZSgpIHRvIGZpbmQgdGhlIGRpc2sgb2Zmc2V0cyBcbmZzL2JlZnMvQ2hhbmdlTG9nLTIzNS1cdG9mIGJsb2Nrcywgd2hpY2ggaW4gdHVybiBjYWxscyBiZWZzX2Zwb3MyYnJ1bigpIGluIGRhdGFzdHJlYW0uYyB0byBkbyBcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NDM9c3RhdGljIGludCBiZWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvYmVmcy9saW51eHZmcy5jOjQ0OnN0YXRpYyBpbnQgYmVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTtcbmZzL2JlZnMvbGludXh2ZnMuYy00NS1zdGF0aWMgaW50IGJlZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgYmVmc19leHBvcnRfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTA5LSAqIEluIHR1cm4sIHNpbXBseSBjYWxscyBhIGdlbmVyaWMgYmxvY2sgcmVhZCBmdW5jdGlvbiBhbmRcbmZzL2JlZnMvbGludXh2ZnMuYzoxMTA6ICogcGFzc2VzIGl0IHRoZSBhZGRyZXNzIG9mIGJlZnNfZ2V0X2Jsb2NrLCBmb3IgbWFwcGluZyBmaWxlXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTExLSAqIHBvc2l0aW9ucyB0byBkaXNrIGJsb2Nrcy5cbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTEzPXN0YXRpYyBpbnQgYmVmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvYmVmcy9saW51eHZmcy5jLTExNC17XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTE1Olx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgYmVmc19nZXRfYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTExNi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTExOT1iZWZzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuZnMvYmVmcy9saW51eHZmcy5jLTEyMC17XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTIxOlx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgYmVmc19nZXRfYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTEyMi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzMz1zdGF0aWMgaW50XG5mcy9iZWZzL2xpbnV4dmZzLmM6MTM0OmJlZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuZnMvYmVmcy9saW51eHZmcy5jLTEzNS1cdCAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQyLVxuZnMvYmVmcy9saW51eHZmcy5jOjE0MzpcdGJlZnNfZGVidWcoc2IsIFwmIzM0Oy0tLVx1MDAzZSBiZWZzX2dldF9ibG9jaygpIGZvciBpbm9kZSAlbGx1LCBibG9jayAlbGRcJiMzNDssXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQ0LVx0XHQgICBpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcpYmxvY2spO1xuZnMvYmVmcy9saW51eHZmcy5jLTE0NS1cdGlmIChjcmVhdGUpIHtcbmZzL2JlZnMvbGludXh2ZnMuYzoxNDY6XHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O2JlZnNfZ2V0X2Jsb2NrKCkgd2FzIGFza2VkIHRvIHdyaXRlIHRvIFwmIzM0O1xuZnMvYmVmcy9saW51eHZmcy5jLTE0Ny1cdFx0XHQgICBcJiMzNDtibG9jayAlbGQgaW4gaW5vZGUgJWxsdVwmIzM0OywgKGxvbmcpYmxvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBCRUZTIEZpbGUgU3lzdGVtIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQkVGUyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBsZXZlcmFnZSB0aGVtLiBgYmVmc19nZXRfYmxvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIGl0cyBkaXJlY3QgYWNjZXNzaWJpbGl0eS4gSG1tLCB0aGF0IG1lYW5zIEkgY2FuJiMzOTt0IGp1c3QgY2FsbCBpdCBmcmVlbHkuIFRoYXQgY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGUgcHJvYmxlbS4gV2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byBsb29rIGZvciBvdGhlciBvcHRpb25zIHRvIGFjaGlldmUgbXkgZ29hbC4gSSB3YXMgaG9waW5nIHRvIHVzZSBgYmVmc19yZWFkX2ZvbGlvYCBhbmQgYGJlZnNfYm1hcGAgdG9nZXRoZXIgd2l0aCBpdC4KCldhaXQgYSBzZWNvbmQsIGBiZWZzX3JlYWRfZm9saW9gIGlzIGFsc28gc3RhdGljISBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIHdpdGggYSBkaWZmZXJlbnQgYXBwcm9hY2guIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyB0aHJvdWdoIHRoZSBsaXN0LCBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBhbmQgYGJlZnNfZmJsb2NrMmJydW5gIGFyZSBzdGlsbCBhdmFpbGFibGUgYXMgb3B0aW9ucy4gVGhhdCBzaG91bGQgZG8gdGhlIHRyaWNrLgoKQWgsIGFuZCBnb29kLCBgYmVmc19mYmxvY2syYnJ1bmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBub3QgcmVzdHJpY3RlZCBsaWtlIHRob3NlIG90aGVyIG9uZXMuIEV4Y2VsbGVudCwgdGhpcyBtZWFucyB0aGF0IEkgY2FuIGluY29ycG9yYXRlIHRoaXMgb25lIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX2ZibG9jazJicnVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ5PWJlZnNfcmVhZF9kYXRhc3RyZWFtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYwLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NjE6XHRpZiAoYmVmc19mYmxvY2syYnJ1bihzYiwgZHMsIGJsb2NrLCBcdTAwMjZydW4pICE9IEJFRlNfT0spIHtcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYyLVx0XHRiZWZzX2Vycm9yKHNiLCBcJiMzNDtCZUZTOiBFcnJvciBmaW5kaW5nIGRpc2sgYWRkciBvZiBibG9jayAlbHVcJiMzNDssXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNzktLyoqXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo4MDogKiBiZWZzX2ZibG9jazJicnVuIC0gZ2l2ZSBiYWNrIGJsb2NrIHJ1biBmb3IgZmJsb2NrXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy04MS0gKiBAc2I6IHRoZSBzdXBlcmJsb2NrXG4tLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTQ9aW50XG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo5NTpiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy05Ni1cdFx0IGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bilcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMTEtXHRcdGJlZnNfZXJyb3Ioc2IsXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzoxMTI6XHRcdFx0ICAgXCYjMzQ7YmVmc19mYmxvY2syYnJ1bigpIHdhcyBhc2tlZCB0byBmaW5kIGJsb2NrICVsdSwgXCYjMzQ7XG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xMTMtXHRcdFx0ICAgXCYjMzQ7d2hpY2ggaXMgbm90IG1hcHBlZCBieSB0aGUgZGF0YXN0cmVhbVxcblwmIzM0Oyxcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uaD03PXN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMC1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjExOmludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMi1cdFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0xMTk9YmVmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTI5LSAqXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTMwOiAqIENhbGxzIGJlZnNfZmJsb2NrMmJydW4oKSBpbiBkYXRhc3RyZWFtLmMgdG8gZG8gdGhlIHJlYWwgd29yay5cbmZzL2JlZnMvbGludXh2ZnMuYy0xMzEtICovXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUxLVxuZnMvYmVmcy9saW51eHZmcy5jOjE1MjpcdHJlcyA9IGJlZnNfZmJsb2NrMmJydW4oc2IsIGRzLCBibG9jaywgXHUwMDI2cnVuKTtcbmZzL2JlZnMvbGludXh2ZnMuYy0xNTMtXHRpZiAocmVzICE9IEJFRlNfT0spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQW5hbHl6aW5nIGBiZWZzX2ZibG9jazJicnVuYCYjMzk7cyBTY29wZSBhbmQgUG90ZW50aWFsIFJlbGV2YW5jZSoqCgpPa2F5LCBzbyBgYmVmc19mYmxvY2syYnJ1bmAgaXMgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBpbXBvcnRhbnQgcG9pbnQuIFRoYXQgZmFjdCBhbG9uZSB0ZWxscyBtZSBpdCBtaWdodCBiZSBwYXJ0IG9mIHRoZSBBUEkuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGluIHRoaXMgQkVGUyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IGFsb25nIHdpdGggdGhlc2UgZm9jdXMgc3ltYm9sczogYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYW5kIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXkgaW50ZXJyZWxhdGUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGRhdGEgZmxvdyBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMuCgpCdXQsIEkgYWxzbyBjYW4mIzM5O3QganVzdCBmaXhhdGUgb24gdGhlc2UuIEEgZGVlcGVyIGV4cGxvcmF0aW9uIGlzIG5lZWRlZCwgc28gSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUgYmFzZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBvdGhlciBoaWRkZW4gZ2VtcyB0aGF0IGFyZSB2YWx1YWJsZSwgYW5kIGNvdWxkIGJlIG1pc3NlZCBpZiBJIGZvY3VzIHRvbyBuYXJyb3dseSBvbiB0aGUgc3RhdGVkIHN5bWJvbHMuIEl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSBzZWFyY2ggYW5kIHNlZSB3aGF0IGVsc2UgaXMgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBiZWZzXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmVmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmVmcy9idHJlZS5oLTYtXG5mcy9iZWZzL2J0cmVlLmg6NzppbnQgYmVmc19idHJlZV9maW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxuZnMvYmVmcy9idHJlZS5oLTgtXHRcdCAgICBjb25zdCBjaGFyICprZXksIGJlZnNfb2ZmX3QgKnZhbHVlKTtcbmZzL2JlZnMvYnRyZWUuaC05LVxuZnMvYmVmcy9idHJlZS5oOjEwOmludCBiZWZzX2J0cmVlX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZHMsXG5mcy9iZWZzL2J0cmVlLmgtMTEtXHRcdCAgICBsb2ZmX3Qga2V5X25vLCBzaXplX3QgYnVmc2l6ZSwgY2hhciAqa2V5YnVmLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEwLVxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTE6aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEyLVx0XHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XG4tLVxuZnMvYmVmcy9pbm9kZS5oLTUtXG5mcy9iZWZzL2lub2RlLmg6NjppbnQgYmVmc19jaGVja19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlICpyYXdfaW5vZGUsXG5mcy9iZWZzL2lub2RlLmgtNy1cdFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBpbm9kZSk7XG4tLVxuZnMvYmVmcy9zdXBlci5oLTQtXG5mcy9iZWZzL3N1cGVyLmg6NTppbnQgYmVmc19sb2FkX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfc3VwZXJfYmxvY2sgKmRpc2tfc2IpO1xuZnMvYmVmcy9zdXBlci5oOjY6aW50IGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzU5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJFRlMgSW5vZGUgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmaWxlc3lzdGVtIGludGVncml0eSwgYW5kIGBiZWZzX2NoZWNrX2lub2RlYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQuIFRoYXQgb25l4oCZcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgaW5vZGUgc3RydWN0dXJlcy4gUmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIGBiZWZzX2NoZWNrX2lub2RlYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyBlcnJvciBkZXRlY3Rpb24gYW5kIHBvdGVudGlhbGx5LCB3aGF0IGtpbmRzIG9mIGNvcnJ1cHRpb24gaXQmIzM5O3MgZGVzaWduZWQgdG8gY2F0Y2guIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbuKAmXMgYXBwcm9hY2ggd2lsbCBnaXZlIHVzIGEgc3Ryb25nIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWZzX2NoZWNrX2lub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JlZnMvaW5vZGUuYz0xOD1pbnRcbmZzL2JlZnMvaW5vZGUuYzoxOTpiZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcbmZzL2JlZnMvaW5vZGUuYy0yMC1cdFx0IGJlZnNfYmxvY2tucl90IGlub2RlKVxuLS1cbmZzL2JlZnMvaW5vZGUuaC01LVxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxuZnMvYmVmcy9pbm9kZS5oLTctXHRcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz0yOTk9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy0zMzQtXG5mcy9iZWZzL2xpbnV4dmZzLmM6MzM1Olx0aWYgKGJlZnNfY2hlY2tfaW5vZGUoc2IsIHJhd19pbm9kZSwgaW5vZGUtXHUwMDNlaV9pbm8pICE9IEJFRlNfT0spIHtcbmZzL2JlZnMvbGludXh2ZnMuYy0zMzYtXHRcdGJlZnNfZXJyb3Ioc2IsIFwmIzM0O0JhZCBpbm9kZTogJWxsdVwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0MQoJCQkJCQkJb3V0cHV0OiAyNjkKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIFRocm91Z2ggYSBCRUZTIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCBmb3IgdGhlIEJlT1MgZmlsZXN5c3RlbSBkcml2ZXIsIEJFRlMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTt2ZSBub3RpY2VkIGlzIHRoZSBjYWxsIGdyYXBoOiBgYmVmc19jaGVja19pbm9kZWAgaXMgdHJpZ2dlcmVkIGJ5IGBiZWZzX2lnZXRgLCBhbmQgYGJlZnNfbG9hZF9zYmAgaXMgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhlIG9uZXMgdGhhdCBtYXR0ZXIgYXJlOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19sb2FkX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYGJlZnNfZmJsb2NrMmJydW5gLCBhbmQgYGJlZnNfY2hlY2tfaW5vZGVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgYWNjZXNzIGZ1bmN0aW9ucy4KClRoZSBjb25maWcgcmVxdWlyZWQgaXMgYEJFRlNfRlNgLCB3aGljaCBpcyBnb29kIG5ld3M7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBCRUZTX0ZTYCBpcyB0aGUgKm9ubHkqIGRlcGVuZGVuY3kuIE5vIGhpZGRlbiBnb3RjaGFzLCBpdCBzZWVtcy4KCk5vdywgbGV0JiMzOTtzIGFydGljdWxhdGUgdGhlIGNvcmUgaXNzdWUgYW5kIHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3dzIHdpdGhpbiB0aGUgQkVGUyBkcml2ZXIuIFNwZWNpZmljYWxseSwgYGJlZnNfY2hlY2tfc2JgIGlzIGhhdmluZyBhIGJvdW5kcyBjaGVjayBhZGRlZCB0byBhdm9pZCBzaGlmdGluZyBieSAzMiBvciBtb3JlIGJpdHMsIHdoaWNoIGlzIHVuZGVmaW5lZCBmb3IgMzItYml0IGludGVnZXJzLiBTbWFydC4gV2UgZG9uJiMzOTt0IHdhbnQgdGhlIGhhcmR3YXJlIHNwaXR0aW5nIG91dCBnYXJiYWdlLiBBbHNvLCBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIGB1NjRgKSBhcmUgYWRkZWQgd2l0aGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgb3ZlcmZsb3dzIHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgICh3aGljaCBpcyBgdTMyYCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gbW91bnQgcHJvY2VzcyAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCwgdml0YWxseSwgdGhlIGFjY2VzcyBwYXRocyBmb3IgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gVGhpcyBoaWdobGlnaHRzIHRoYXQgYSBtYWxpY2lvdXNseSBjcmFmdGVkIGltYWdlIGNvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlc2UgYnVncy4KCkdpdmVuIHRoYXQgdGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIGRhdGEgYWNjZXNzLCBJJiMzOTtkIHNheSB0aGlzIGhhcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaW1wYWN0LiBJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBleHBvc3VyZSBoZXJlIGlzIHRoYXQgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHJlc3VsdCBpbiB1bmRlc2lyYWJsZSBzaWRlIGVmZmVjdHMuCgpBbHJpZ2h0LCB0aGUga2V5IGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWU6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGBiZWZzX2xvYWRfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBgYmVmc19mYmxvY2syYnJ1bmAsIGFuZCBgYmVmc19jaGVja19pbm9kZWAuIFRoZSBjb25maWcgdG8gZW5hYmxlIGlzIGBCRUZTX0ZTYC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkVGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtiZWZzX2NoZWNrX3NiJiMzNDssCiAgICAmIzM0O2JlZnNfbG9hZF9zYiYjMzQ7LAogICAgJiMzNDtiZWZzX3JlYWRfZGF0YXN0cmVhbSYjMzQ7LAogICAgJiMzNDtiZWZzX2ZibG9jazJicnVuJiMzNDssCiAgICAmIzM0O2JlZnNfY2hlY2tfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgQmVPUyBmaWxlc3lzdGVtIChCRUZTKSBkcml2ZXIuIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYmAgdG8gcHJldmVudCBzaGlmdGluZyBieSAzMiBvciBtb3JlLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gSXQgYWxzbyBhZGRzIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgKGEgNjQtYml0IGludGVnZXIpIGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGBhbGxvY2F0aW9uX2dyb3VwYCAoYSAzMi1iaXQgaW50ZWdlcikuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCB3aGVuIGFjY2Vzc2luZyBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBTaW5jZSBCRUZTIGNhbiBiZSBtb3VudGVkIGZyb20gYSB1c2VyLXByb3ZpZGVkIGltYWdlLCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGVzZSBidWdzLCBtYWtpbmcgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCRUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmVmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2JlZnNfY2hlY2tfc2ImIzM0OywKICAgICYjMzQ7YmVmc19sb2FkX3NiJiMzNDssCiAgICAmIzM0O2JlZnNfcmVhZF9kYXRhc3RyZWFtJiMzNDssCiAgICAmIzM0O2JlZnNfZmJsb2NrMmJydW4mIzM0OywKICAgICYjMzQ7YmVmc19jaGVja19pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBCZU9TIGZpbGVzeXN0ZW0gKEJFRlMpIGRyaXZlci4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiYCB0byBwcmV2ZW50IHNoaWZ0aW5nIGJ5IDMyIG9yIG1vcmUsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgMzItYml0IGludGVnZXJzLiBJdCBhbHNvIGFkZHMgY2FzdHMgdG8gYGJlZnNfYmxvY2tucl90YCAoYSA2NC1iaXQgaW50ZWdlcikgaW4gYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgIChhIDMyLWJpdCBpbnRlZ2VyKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50IChgYmVmc19maWxsX3N1cGVyYCkgYW5kIHdoZW4gYWNjZXNzaW5nIGlub2RlcyBhbmQgZGF0YSBibG9ja3MuIFNpbmNlIEJFRlMgY2FuIGJlIG1vdW50ZWQgZnJvbSBhIHVzZXItcHJvdmlkZWQgaW1hZ2UsIGEgY3JhZnRlZCBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoZXNlIGJ1Z3MsIG1ha2luZyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjNzA4YWYwYmM1NWM1YzRmNjQxYWY5NzBiNDlkN2QyMzVhM2UzMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmgKaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmVmcy9iZWZzLmgKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgQkVGU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90CiBpYWRkcjJibG9ja25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfaW5vZGVfYWRkciAqaWFkZHIpCiB7Ci0JcmV0dXJuICgoaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwomIzQzOwlyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXAgJmx0OyZsdDsgQkVGU19TQihzYiktJmd0O2FnX3NoaWZ0KSAmIzQzOwogCQlpYWRkci0mZ3Q7c3RhcnQpOwogfQogCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGJsb2Nrbm8yaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19ibG9ja25yX3QgYmxvY2tubykKIAogCWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgPSBibG9ja25vICZndDsmZ3Q7IEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdDsKIAlpYWRkci5zdGFydCA9Ci0JICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwomIzQzOwkgICAgYmxvY2tubyAtICgoYmVmc19ibG9ja25yX3QpaWFkZHIuYWxsb2NhdGlvbl9ncm91cCAmbHQ7Jmx0OyBCRUZTX1NCKHNiKS0mZ3Q7YWdfc2hpZnQpOwogCWlhZGRyLmxlbiA9IDE7CiAKIAlyZXR1cm4gaWFkZHI7CmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmMKaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JlZnMvc3VwZXIuYwpAQCAtOTMsMTcgJiM0Mzs5MywyMiBAQCBiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay4KIAkgKi8KIAotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewomIzQzOwlpZiAoYmVmc19zYi0mZ3Q7YmxvY2tfc2hpZnQgJmd0Oz0gMzIgfHwKJiM0MzsJICAgICgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDtibG9ja19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tfc2l6ZSkgewogCQliZWZzX2Vycm9yKHNiLCAmIzM0O2Jsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuICYjMzQ7CiAJCQkgICAmIzM0O0NvcnJ1cHRpb24gbGlrZWx5LiYjMzQ7KTsKIAkJcmV0dXJuIEJFRlNfRVJSOwogCX0KIAotCiAJLyogYWdfc2hpZnQgYWxzbyBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGJsb2Nrc19wZXJfYWcgaW4gYQogCSAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVjawogCSAqLwotCWlmICgoMSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKJiM0MzsJaWYgKGJlZnNfc2ItJmd0O2FnX3NoaWZ0ICZndDs9IDMyKSB7CiYjNDM7CQliZWZzX2Vycm9yKHNiLCAmIzM0O2FnX3NoaWZ0ICZndDs9IDMyLiBDb3JydXB0aW9uIGxpa2VseS4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gQkVGU19FUlI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCgxVSAmbHQ7Jmx0OyBiZWZzX3NiLSZndDthZ19zaGlmdCkgIT0gYmVmc19zYi0mZ3Q7YmxvY2tzX3Blcl9hZykKIAkJYmVmc19lcnJvcihzYiwgJiMzNDthZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLiYjMzQ7KTsKIAogCWlmIChiZWZzX3NiLSZndDtsb2dfc3RhcnQgIT0gYmVmc19zYi0mZ3Q7bG9nX2VuZCB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MwoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmVGUyBJbnRlZ2VyIE92ZXJmbG93IGFuZCBTaGlmdCBPdXQtb2YtQm91bmRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGZvciB0aGUgQmVGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGJlZnMuaGAgYW5kIGBzdXBlci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdGFuZGFyZCBpc3N1ZTogcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBkdXJpbmcgYml0LXNoaWZ0aW5nIG9wZXJhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBgYmVmc19ibG9ja25yX3RgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGlzIGEgNjQtYml0IGludGVnZXIgdHlwZSwgdGhvdWdoIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gaW4gdGhlIGNvZGUuIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGEgYHU2NGAuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGZvciB0aGUgYGlhZGRyLSZndDthbGxvY2F0aW9uX2dyb3VwYCB2YXJpYWJsZSBiZWZvcmUgdGhlIGxlZnQtc2hpZnQgYnkgYEJFRlNfU0Ioc2IpLSZndDthZ19zaGlmdGAuIFRoYXTigJlzIHRoZSBmaXJzdCByZWQgZmxhZyDigJMgYSBzaGlmdCBvcGVyYXRpb24uIFRoYXQgc3VnZ2VzdHMgYSBzaGlmdCBvZiBgaWFkZHItJmd0O2FsbG9jYXRpb25fZ3JvdXBgIGxlZnQgYnkgYGFnX3NoaWZ0YC4gVGhlIGZpeCBhbHNvIGluY2x1ZGVzIHNhbml0eSBjaGVja3Mgd2l0aGluIGBiZWZzX2NoZWNrX3NiYCB0byBlbnN1cmUgdGhhdCBib3RoIGBiZWZzX3NiLSZndDtibG9ja19zaGlmdGAgYW5kIGBiZWZzX3NiLSZndDthZ19zaGlmdGAgYXJlIGxlc3MgdGhhbiAzMi4gVGhpcyBpcyBjbGV2ZXIuIEl0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGJvdGggc2hpZnQtb3V0LW9mLWJvdW5kcyAoaWYgYGFnX3NoaWZ0YCBpcyAzMiBvciBncmVhdGVyKSBhbmQgaW50ZWdlciBvdmVyZmxvdyAoaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMgdG9vIGxhcmdlIGZvciB0aGUgdGFyZ2V0IHR5cGUpLgoKVGhlIGdvYWwgaGVyZSBpcyBhdm9pZGluZyBVQlNBTiB3YXJuaW5ncyBvciBvdGhlciBpc3N1ZXMgd2l0aCBidWlsZHMgdXNpbmcga2VybmVsIGFkZHJlc3Mgc2FuaXRpemVycyAoS0FTQU4pLiBJdCYjMzk7cyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCwgYW5kIG5vdGhpbmcgcG9pbnRzIHRvIGFueSBraW5kIG9mIGluZm9ybWF0aW9uIGxlYWsuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgY2FzdHMgdG8gbWFrZSBzdXJlIGludGVnZXIgb3BlcmF0aW9ucyBiZWhhdmUgYXMgZXhwZWN0ZWQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSByaXNrcyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClNpbmNlIHRoaXMgaXMgcHVyZWx5IGFib3V0IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBpc3N1ZXMgaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0uIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYigpYCBhbmQgY2FzdHMgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHNoaWZ0aW5nLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBhcmUgYnVncyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGlzc3VlcyBpbiB0aGUgQmVGUyBmaWxlIHN5c3RlbS4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiKClgIGFuZCBjYXN0cyBgaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxMS41MjExMTkzNDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODAwNDE4ODcxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkVGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiYmVmc19jaGVja19zYlwiLFxuICAgIFwiYmVmc19sb2FkX3NiXCIsXG4gICAgXCJiZWZzX3JlYWRfZGF0YXN0cmVhbVwiLFxuICAgIFwiYmVmc19mYmxvY2syYnJ1blwiLFxuICAgIFwiYmVmc19jaGVja19pbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MTEuNTIxMTI1ODI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDA3NjIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzcwOGFmMGJjNTVjNWM0ZjY0MWFmOTcwYjQ5ZDdkMjM1YTNlMzA5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmcy5oIGIvZnMvYmVmcy9iZWZzLmhcXG5pbmRleCA3Y2Q0NzI0NTY5NGRlLi5iOGM3YjdmODFmMzljIDEwMDY0NFxcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXFxuKysrIGIvZnMvYmVmcy9iZWZzLmhcXG5AQCAtMTIyLDcgKzEyMiw3IEBAIEJFRlNfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XFxuIGlhZGRyMmJsb2Nrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19pbm9kZV9hZGRyICppYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gKChpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcXHUwMDNjXFx1MDAzYyBCRUZTX1NCKHNiKS1cXHUwMDNlYWdfc2hpZnQpICtcXG4rXFx0cmV0dXJuICgoKGJlZnNfYmxvY2tucl90KWlhZGRyLVxcdTAwM2VhbGxvY2F0aW9uX2dyb3VwIFxcdTAwM2NcXHUwMDNjIEJFRlNfU0Ioc2IpLVxcdTAwM2VhZ19zaGlmdCkgK1xcbiBcXHRcXHRpYWRkci1cXHUwMDNlc3RhcnQpO1xcbiB9XFxuIFxcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxcbiBcXG4gXFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXFx1MDAzZVxcdTAwM2UgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0O1xcbiBcXHRpYWRkci5zdGFydCA9XFxuLVxcdCAgICBibG9ja25vIC0gKGlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXFx1MDAzY1xcdTAwM2MgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0KTtcXG4rXFx0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXFx1MDAzY1xcdTAwM2MgQkVGU19TQihzYiktXFx1MDAzZWFnX3NoaWZ0KTtcXG4gXFx0aWFkZHIubGVuID0gMTtcXG4gXFxuIFxcdHJldHVybiBpYWRkcjtcXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXFxuaW5kZXggN2M1MDAyNWM5OWQ4YS4uOWYyMWY3MzJkMmMxOCAxMDA2NDRcXG4tLS0gYS9mcy9iZWZzL3N1cGVyLmNcXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcXG5AQCAtOTMsMTcgKzkzLDIyIEBAIGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cXG4gXFx0ICovXFxuIFxcbi1cXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2MgYmVmc19zYi1cXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NpemUpIHtcXG4rXFx0aWYgKGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NoaWZ0IFxcdTAwM2U9IDMyIHx8XFxuK1xcdCAgICAoMVUgXFx1MDAzY1xcdTAwM2MgYmVmc19zYi1cXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXFx1MDAzZWJsb2NrX3NpemUpIHtcXG4gXFx0XFx0YmVmc19lcnJvcihzYiwgXFxcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcIkNvcnJ1cHRpb24gbGlrZWx5LlxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gQkVGU19FUlI7XFxuIFxcdH1cXG4gXFxuLVxcbiBcXHQvKiBhZ19zaGlmdCBhbHNvIGVuY29kZXMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgYmxvY2tzX3Blcl9hZyBpbiBhXFxuIFxcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xcbiBcXHQgKi9cXG4tXFx0aWYgKCgxIFxcdTAwM2NcXHUwMDNjIGJlZnNfc2ItXFx1MDAzZWFnX3NoaWZ0KSAhPSBiZWZzX3NiLVxcdTAwM2VibG9ja3NfcGVyX2FnKVxcbitcXHRpZiAoYmVmc19zYi1cXHUwMDNlYWdfc2hpZnQgXFx1MDAzZT0gMzIpIHtcXG4rXFx0XFx0YmVmc19lcnJvcihzYiwgXFxcImFnX3NoaWZ0IFxcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEJFRlNfRVJSO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKDFVIFxcdTAwM2NcXHUwMDNjIGJlZnNfc2ItXFx1MDAzZWFnX3NoaWZ0KSAhPSBiZWZzX3NiLVxcdTAwM2VibG9ja3NfcGVyX2FnKVxcbiBcXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiYWdfc2hpZnQgZGlzYWdyZWVzIHdpdGggYmxvY2tzX3Blcl9hZy5cXFwiKTtcXG4gXFxuIFxcdGlmIChiZWZzX3NiLVxcdTAwM2Vsb2dfc3RhcnQgIT0gYmVmc19zYi1cXHUwMDNlbG9nX2VuZCB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxMS45MjI2NTUzODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjk2OTIwNDk4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkVGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiYmVmc19jaGVja19zYlwiLFxuICAgIFwiYmVmc19sb2FkX3NiXCIsXG4gICAgXCJiZWZzX3JlYWRfZGF0YXN0cmVhbVwiLFxuICAgIFwiYmVmc19mYmxvY2syYnJ1blwiLFxuICAgIFwiYmVmc19jaGVja19pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEJlT1MgZmlsZXN5c3RlbSAoQkVGUykgZHJpdmVyLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2JgIHRvIHByZXZlbnQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciAzMi1iaXQgaW50ZWdlcnMuIEl0IGFsc28gYWRkcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSBpbiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgd2hlbiBzaGlmdGluZyBgYWxsb2NhdGlvbl9ncm91cGAgKGEgMzItYml0IGludGVnZXIpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnQgKGBiZWZzX2ZpbGxfc3VwZXJgKSBhbmQgd2hlbiBhY2Nlc3NpbmcgaW5vZGVzIGFuZCBkYXRhIGJsb2Nrcy4gU2luY2UgQkVGUyBjYW4gYmUgbW91bnRlZCBmcm9tIGEgdXNlci1wcm92aWRlZCBpbWFnZSwgYSBjcmFmdGVkIGltYWdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgYnVncywgbWFraW5nIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2M3MDhhZjBiYzU1YzVjNGY2NDFhZjk3MGI0OWQ3ZDIzNWEzZTMwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzLmggYi9mcy9iZWZzL2JlZnMuaFxuaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDRcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXG4rKysgYi9mcy9iZWZzL2JlZnMuaFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSArXG4rXHRyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpICtcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuIFxuIFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXHUwMDNlXHUwMDNlIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0O1xuIFx0aWFkZHIuc3RhcnQgPVxuLVx0ICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuK1x0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiBcdGlhZGRyLmxlbiA9IDE7XG4gXG4gXHRyZXR1cm4gaWFkZHI7XG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXG5pbmRleCA3YzUwMDI1Yzk5ZDhhLi45ZjIxZjczMmQyYzE4IDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9zdXBlci5jXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcbkBAIC05MywxNyArOTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbitcdGlmIChiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0IFx1MDAzZT0gMzIgfHxcbitcdCAgICAoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tfc2l6ZSkge1xuIFx0XHRiZWZzX2Vycm9yKHNiLCBcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwiXG4gXHRcdFx0ICAgXCJDb3JydXB0aW9uIGxpa2VseS5cIik7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbitcdGlmIChiZWZzX3NiLVx1MDAzZWFnX3NoaWZ0IFx1MDAzZT0gMzIpIHtcbitcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cIik7XG4rXHRcdHJldHVybiBCRUZTX0VSUjtcbitcdH1cbitcbitcdGlmICgoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiBcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwiKTtcbiBcbiBcdGlmIChiZWZzX3NiLVx1MDAzZWxvZ19zdGFydCAhPSBiZWZzX3NiLVx1MDAzZWxvZ19lbmQgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjExLjkyMjcwMTkyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDE5MzIyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQkVGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEJFRlMsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZnMvYmVmcy9iZWZzLmhgIGFuZCBgZnMvYmVmcy9zdXBlci5jYC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvci4gSXQgc2VlbXMgbGlrZSB0aGUgZGV2ZWxvcGVycyBhcmUgYWRkaW5nIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgaW4gdGhvc2UgYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgZnVuY3Rpb25zLiBUaGV5J3JlIGFsc28gaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItXHUwMDNlYWdfc2hpZnRgIHdpdGhpbiBgYmVmc19jaGVja19zYmAuXG5cblJpZ2h0IGF3YXksIEkgd2FudCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRhdGEgdHlwZXMuIEknbSBiZXR0aW5nIHRoYXQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCBpbnRlZ2VyLCBhbmQgSSdkIHdhZ2VyIGBpYWRkci1cdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLiBUaGF0IHNoaWZ0IG9wZXJhdGlvbiwgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0YCwgaXMgdGhlIG9uZSB0aGF0J3MgZ290IG15IGF0dGVudGlvbi4gSWYgYGFsbG9jYXRpb25fZ3JvdXBgIGlzIDMyLWJpdCwgYW5kIHRoZSBzaGlmdCByZXN1bHRzIGluIGEgdmFsdWUgbGFyZ2VyIHRoYW4gMzIgYml0cywgd2UncmUgaGVhZGluZyBzdHJhaWdodCBpbnRvIG92ZXJmbG93IHRlcnJpdG9yeS4gTm8gZ29vZC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gYWhlYWQgYW5kIGRpdmUgaW50byB0aG9zZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGRhdGEgdHlwZSBhc3N1bXB0aW9ucyBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIHZhbGlkYXRlIHRoZSBwcm9wb3NlZCBmaXggYW5kIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoxNy43NjQ2MzY3NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1ODU0NjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eXBlZGVmLipiZWZzX2Jsb2NrbnJfdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2JlZnMuaC0xNy1cXG5mcy9iZWZzL2JlZnMuaDoxODp0eXBlZGVmIHU2NCBiZWZzX2Jsb2NrbnJfdDtcXG5mcy9iZWZzL2JlZnMuaC0xOS0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzoyMC42MjMxOTE2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2NDQxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQkVGUyBEYXRhIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGlzY3Vzc2lvbiBzZWVtcyB0byBiZSB6ZXJvaW5nIGluIG9uIEJFRlMgZGF0YSBzdHJ1Y3R1cmVzLiBGaXJzdCwgY29uZmlybWF0aW9uOiB5ZXMsIHRoYXQgYGJlZnNfYmxvY2tucl90YCB0eXBlIGlzIGluZGVlZCBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBhIGB1NjRgLiBHb29kLCBnb29kLCBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGJsb2NrIGFkZHJlc3NpbmcuIE5vdywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBob3cgYGJlZnNfaW5vZGVfYWRkcmAgaXMgaGFuZGxlZC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbiB0aGUgYmxvY2sgbWFwIHN0cnVjdHVyZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgaW5vZGUgYWRkcmVzcyB0eXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBibG9jayBudW1iZXIgdHlwZSB0byBjb250aW51ZSB3aXRoIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MjMuNzA5NjM1ODQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTcyMDMyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJlZnNfaW5vZGVfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL0NoYW5nZUxvZz0yMDQ9VmVyc2lvbiAwLjQgKDIwMDEtMTAtMjgpXFxuLS1cXG5mcy9iZWZzL0NoYW5nZUxvZy0yNDgtPT09PT09PT09PVxcbmZzL2JlZnMvQ2hhbmdlTG9nOjI0OToqIEZpeCBuYXN0eSBidWcgaW4gY29udmVydGluZyBibG9jayBudW1iZXJzIHRvIHN0cnVjdCBiZWZzX2lub2RlX2FkZHIuIFxcbmZzL2JlZnMvQ2hhbmdlTG9nLTI1MC1cXHRTdWJ0bGUsIGJlY2F1c2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBvbmx5IHNvbWV0aW1lcyB3cm9uZy4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjI1LjcyNjg0NjQ1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTU4ODgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYmVmc19pbm9kZV9hZGRyYCBHcmVwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBiZWZzX2lub2RlX2FkZHJgLiBUaGUgZmFjdCB0aGF0IGl0J3Mgc3VyZmFjaW5nIGFzIGEgdGFyZ2V0IGZvciBhIGBncmVwYCBjb21tYW5kIG1lYW5zIGl0J3MgbGlrZWx5IGEgc2lnbmlmaWNhbnQgaWRlbnRpZmllciB3aXRoaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0ncyBpbnRlcm5hbHMuIEl0J3MgZWl0aGVyIGEgZGF0YSBzdHJ1Y3R1cmUgZmllbGQsIGEgZnVuY3Rpb24gbmFtZSwgb3IgbWF5YmUgZXZlbiBhIGNvbnN0YW50IHVzZWQgaW4gaW5vZGUgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBiZXQgaXQncyBwcm9iYWJseSBvbmUgb2YgdGhlIGZpcnN0IHR3by4gTm93LCB3aXRob3V0IG1vcmUgY29udGV4dCwgaXQncyB0b3VnaCB0byBuYWlsIGRvd24gKmV4YWN0bHkqIHdoYXQgdGhpcyBgZ3JlcGAgaXMgbG9va2luZyBmb3IuIElzIGl0IHRyYWNpbmcgdXNlcyBvZiB0aGUgYWRkcmVzcz8gUG90ZW50aWFsIGJ1Z3MgaW52b2x2aW5nIGhvdyBpdCdzIGhhbmRsZWQ/IE9yLCBhbSBJIGxvb2tpbmcgdG8gbG9jYXRlIGEgc3BlY2lmaWMgaW5vZGUgc3RydWN0dXJlLCBwZXJoYXBzIG9uZSB0aGF0J3MgYmVlbiBjb3JydXB0ZWQgb3IgaXMgYmVpbmcgZXJyb25lb3VzbHkgYWNjZXNzZWQ/IEknZCByZWFsbHkgbmVlZCB0byBzZWUgdGhlIGBncmVwYCBjb21tYW5kIGl0c2VsZiBhbmQsIGlkZWFsbHksIHRoZSBjb2RlYmFzZSBzdXJyb3VuZGluZyBpdCB0byB1bmRlcnN0YW5kIHRoZSB0cnVlIGludGVudC4gVGhhdCBzYWlkLCB0aGUgZmFjdCB0aGF0IGl0J3MgaW1wb3J0YW50IGVub3VnaCB0byBiZSAqc2VhcmNoZWQgZm9yKiBzaWduaWZpZXMgaXRzIGltcG9ydGFuY2UsIHBvc3NpYmx5IGluIGRlYnVnZ2luZywgYXVkaXRpbmcgb3IgcGVyZm9ybWFuY2UuIEZ1cnRoZXIgZXhwbG9yYXRpb24gcmVxdWlyZXMgbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjMwLjgyMjczNzIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5ODQ0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYuKmJlZnNfaW5vZGVfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDc9dHlwZWRlZiBiZWZzX2Rpc2tfYmxvY2tfcnVuIGJlZnNfZGlza19pbm9kZV9hZGRyO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjMzLjUwMjYwOTkwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDU0NzcxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBiZWZzX2Jsb2NrX3J1bmAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgYmVmc19ibG9ja19ydW5gLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaXQgdG8gc2VlIHdoZXJlIHdlJ3JlIGF0LCBhbmQgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiBvcmlnaW4uIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcywgbG9vayBhdCB0aGUgbGFzdCB0aW1lIGl0IHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBsb2dzIGZvciByZWNlbnQgZXJyb3JzLCBpZiBhbnkuIEJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24sIEknbGwgYXNzZXNzIHdoZXRoZXIgaXQncyBydW5uaW5nIGFzIGV4cGVjdGVkLCBvciBpZiB0aGVyZSdzIGFuIGlzc3VlIEkgbmVlZCB0byBhZGRyZXNzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgZGV0ZXJtaW5lZC4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIHJlc3RhcnRpbmcgaXQsIG9yIGl0IGNvdWxkIGJlIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVjZW50IG1ldHJpY3MgYXJvdW5kIHRoaXMgaWYgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6MzguNDA4MDkwMTkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM0ODk2NjMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmVmc19ibG9ja19ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjQwLjI0Mjk5NzgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2MzE0MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIERhdGEgU3RydWN0dXJlIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0b3lpbmcgd2l0aCB0aGUgaWRlYSBvZiBuYW1pbmcgdGhlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBibG9jayBydW4gaW4gdGhlIGJlZnMgZmlsZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB3aXRoIHNvbWV0aGluZyBsaWtlIGB0eXBlZGVmIHN0cnVjdCBiZWZzX2Jsb2NrX3J1bmAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGRlc2NyaXB0aXZlLiBJdCBjbGVhcmx5IHRpZXMgdGhlIHN0cnVjdHVyZSB0byB0aGUgQkUgRmlsZSBTeXN0ZW0gYW5kIGhpZ2hsaWdodHMgaXRzIHB1cnBvc2Ugb2YgaGFuZGxpbmcgYmxvY2sgcnVucy4gSXQncyBjb25jaXNlLCBlYXN5IHRvIHVuZGVyc3RhbmQgYXQgYSBnbGFuY2UsIGFuZCBnZXRzIHRoZSBqb2IgZG9uZSB3aXRob3V0IGJlaW5nIG92ZXJseSB2ZXJib3NlLiBJdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZmluaW5nIHRoaXMgY3J1Y2lhbCBkYXRhIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjAzOjQzLjU1OTMxNTQyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjQ4MjI4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZWRlZiBzdHJ1Y3QuKmJlZnNfYmxvY2tfcnVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzo0Ni4zMDU4MDU4NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzQzMDA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIFNlYXJjaCBmb3IgYGJlZnNfYmxvY2tfcnVuYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgc29tZXRoaW5nIG91dCwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGp1c3QgKmdyZXAqIGZvciBzb21ldGhpbmcgSSBrbm93IEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCwgYSBrbm93biBmdW5jdGlvbiBuYW1lOiBgYmVmc19ibG9ja19ydW5gLiBUaGF0IG5hbWUgZ2l2ZXMgbWUgYSBjbHVlIGFib3V0IHdoZXJlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgQkVGUyBmaWxlc3lzdGVtIHRoYXQgbWFuYWdlcyBibG9ja3Mgb2YgZGF0YSBhbmQgdGhlIGFjdCBvZiBydW5uaW5nIG9yIGV4ZWN1dGluZyBzb21lIHNvcnQgb2Ygb3BlcmF0aW9uIGluIGl0LiBLbm93aW5nIHRoZSBuYW1lIGlzIG9uZSB0aGluZywgYnV0IHF1aWNrbHkgc2VlaW5nIHdoZXJlIGl0J3MgdXNlZCBpcyB3aGF0IEkgbmVlZC4gR3JlcHBpbmcgd2lsbCBnaXZlIG1lIGEgZmFzdCB2aWV3IG9mIHRoZSBwbGFjZXMgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowMzo0OS43MjMyMzg0MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQwNTAwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19ibG9ja19ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9iZWZzLmg9MzI9c3RydWN0IGJlZnNfc2JfaW5mbyB7XFxuLS1cXG5mcy9iZWZzL2JlZnMuaC01MC1cXHQvKiBKb3VybmFsIGxvZyBlbnRyeSAqL1xcbmZzL2JlZnMvYmVmcy5oOjUxOlxcdGJlZnNfYmxvY2tfcnVuIGxvZ19ibG9ja3M7XFxuZnMvYmVmcy9iZWZzLmgtNTItXFx0YmVmc19vZmZfdCBsb2dfc3RhcnQ7XFxuLS1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDE9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTA0LVxcdHUxNiBsZW47XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmg6MTA1On0gUEFDS0VEIGJlZnNfYmxvY2tfcnVuO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oLTEwNi1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xMDc9dHlwZWRlZiBiZWZzX2Rpc2tfYmxvY2tfcnVuIGJlZnNfZGlza19pbm9kZV9hZGRyO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjEwODp0eXBlZGVmIGJlZnNfYmxvY2tfcnVuIGJlZnNfaW5vZGVfYWRkcjtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaC0xMDktXFxuLS1cXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaD0xNTc9dHlwZWRlZiBzdHJ1Y3Qge1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE1ODpcXHRiZWZzX2Jsb2NrX3J1biBkaXJlY3RbQkVGU19OVU1fRElSRUNUX0JMT0NLU107XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTU5LVxcdGJlZnNfb2ZmX3QgbWF4X2RpcmVjdF9yYW5nZTtcXG5mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaDoxNjA6XFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3Q7XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTYxLVxcdGJlZnNfb2ZmX3QgbWF4X2luZGlyZWN0X3JhbmdlO1xcbmZzL2JlZnMvYmVmc19mc190eXBlcy5oOjE2MjpcXHRiZWZzX2Jsb2NrX3J1biBkb3VibGVfaW5kaXJlY3Q7XFxuZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgtMTYzLVxcdGJlZnNfb2ZmX3QgbWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTI0PXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5fZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjUtXFx0XFx0XFx0XFx0IGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MjY6XFx0XFx0XFx0XFx0IGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI3LVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTI4PXN0YXRpYyBpbnQgYmVmc19maW5kX2JydW5faW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMwLVxcdFxcdFxcdFxcdCAgIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzE6XFx0XFx0XFx0XFx0ICAgYmVmc19ibG9ja19ydW4gKnJ1bik7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzItXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzUtXFx0XFx0XFx0XFx0ICAgICAgYmVmc19ibG9ja25yX3QgYmxvY2tubyxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozNjpcXHRcXHRcXHRcXHQgICAgICBiZWZzX2Jsb2NrX3J1biAqcnVuKTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zNy1cXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQ5PWJlZnNfcmVhZF9kYXRhc3RyZWFtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTItXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MzpcXHRiZWZzX2Jsb2NrX3J1biBydW47XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTQtXFx0YmVmc19ibG9ja25yX3QgYmxvY2s7XFx0LyogYmxvY2sgY29yZXNwb25kaW5nIHRvIHBvcyAqL1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9OTU9YmVmc19mYmxvY2syYnJ1bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjk2OlxcdFxcdCBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtOTcte1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MjUxPWJlZnNfZmluZF9icnVuX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkYXRhLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI1MjpcXHRcXHQgICAgICBiZWZzX2Jsb2NrbnJfdCBibG9ja25vLCBiZWZzX2Jsb2NrX3J1biAqcnVuKVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTI1My17XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjU0LVxcdGludCBpO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjI1NTpcXHRjb25zdCBiZWZzX2Jsb2NrX3J1biAqYXJyYXkgPSBkYXRhLVxcdTAwM2VkaXJlY3Q7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMjU2LVxcdGJlZnNfYmxvY2tucl90IHN1bTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTMwNT1iZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA3LVxcdFxcdFxcdGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MzA4OlxcdFxcdFxcdGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzA5LXtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTMxNi1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTc6XFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVxcdTAwM2VpbmRpcmVjdDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTgtXFx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyZWN0KTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDE2LVxcdFxcdFxcdCAgIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8sXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDE3OlxcdFxcdFxcdCAgIGJlZnNfYmxvY2tfcnVuICpydW4pXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDE4LXtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQyOS1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluZGlyX2Jsb2NrO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQzMDpcXHRiZWZzX2Jsb2NrX3J1biBpbmRpcl9ydW47XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDMxLVxcdGJlZnNfZGlza19pbm9kZV9hZGRyICppYWRkcl9hcnJheTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTExPWludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTI6XFx0XFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEzLVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jPTcyPWJlZnNfZHVtcF9pbm9kZShjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2lub2RlICppbm9kZSlcXG4tLVxcbmZzL2JlZnMvZGVidWcuYy03NS1cXG5mcy9iZWZzL2RlYnVnLmM6NzY6XFx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcXG5mcy9iZWZzL2RlYnVnLmMtNzctXFxuLS1cXG5mcy9iZWZzL2RlYnVnLmM9MTU2PWJlZnNfZHVtcF9zdXBlcl9ibG9jayhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpzdXApXFxuLS1cXG5mcy9iZWZzL2RlYnVnLmMtMTU5LVxcbmZzL2JlZnMvZGVidWcuYzoxNjA6XFx0YmVmc19ibG9ja19ydW4gdG1wX3J1bjtcXG5mcy9iZWZzL2RlYnVnLmMtMTYxLVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jPTIxMz1iZWZzX2R1bXBfcnVuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gcnVuKVxcbi0tXFxuZnMvYmVmcy9kZWJ1Zy5jLTIxNi1cXG5mcy9iZWZzL2RlYnVnLmM6MjE3OlxcdGJlZnNfYmxvY2tfcnVuIG4gPSBmc3J1bl90b19jcHUoc2IsIHJ1bik7XFxuZnMvYmVmcy9kZWJ1Zy5jLTIxOC1cXG4tLVxcbmZzL2JlZnMvZW5kaWFuLmg9NjE9Y3B1X3RvX2ZzMTYoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTE2IG4pXFxuLS1cXG5mcy9iZWZzL2VuZGlhbi5oLTcwLVxcbmZzL2JlZnMvZW5kaWFuLmg6NzE6c3RhdGljIGlubGluZSBiZWZzX2Jsb2NrX3J1blxcbmZzL2JlZnMvZW5kaWFuLmgtNzItZnNydW5fdG9fY3B1KGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19ibG9ja19ydW4gbilcXG5mcy9iZWZzL2VuZGlhbi5oLTczLXtcXG5mcy9iZWZzL2VuZGlhbi5oOjc0OlxcdGJlZnNfYmxvY2tfcnVuIHJ1bjtcXG5mcy9iZWZzL2VuZGlhbi5oLTc1LVxcbi0tXFxuZnMvYmVmcy9lbmRpYW4uaD04OD1zdGF0aWMgaW5saW5lIGJlZnNfZGlza19ibG9ja19ydW5cXG5mcy9iZWZzL2VuZGlhbi5oOjg5OmNwdV90b19mc3J1bihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrX3J1biBuKVxcbmZzL2JlZnMvZW5kaWFuLmgtOTAte1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0xMzgtXFx0YmVmc19kYXRhX3N0cmVhbSAqZHMgPSBcXHUwMDI2QkVGU19JKGlub2RlKS1cXHUwMDNlaV9kYXRhLmRzO1xcbmZzL2JlZnMvbGludXh2ZnMuYzoxMzk6XFx0YmVmc19ibG9ja19ydW4gcnVuID0gQkFEX0lBRERSO1xcbmZzL2JlZnMvbGludXh2ZnMuYy0xNDAtXFx0aW50IHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDM6NTEuNTI3MjkzMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwMjI4ODQ1NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCRUZTIEJsb2NrIEFkZHJlc3NlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBiZWZzX2lub2RlX2FkZHJgIGFuZCBpdCdzIHBvaW50aW5nIHRvIGBiZWZzX2Jsb2NrX3J1bmAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLiBMZXQncyBkaWcgZGVlcGVyLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBiZWZzX2Jsb2NrX3J1bmAgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEJFRlMgaGFuZGxlcyBpdHMgYmxvY2sgcnVucyBhbmQgaG93IHRoZXkncmUgZGVmaW5lZCBhdCB0aGUgZnVuZGFtZW50YWwgbGV2ZWwuIFNvLCBJJ2xsIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2U6IHRoZSBgZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmhgIGhlYWRlciBmaWxlLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbiByZXZlYWxzIGFib3V0IHRoZSBvcmdhbml6YXRpb24gb2YgdGhlc2UgYmxvY2tzIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBmb3IgYWRkcmVzc2luZyB3aXRoaW4gdGhlIEJFRlMgZmlsZXN5c3RlbS4gSXTigJlzIGxpa2VseSBnb2luZyB0byBwcm92aWRlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaW5vZGVzIG1hcCB0byBhY3R1YWwgZGF0YS4gTGV0J3Mgc2Vl4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0MS43NTYxNDEzNjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDIyMTQ2NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYgc3RydWN0IFxcXFx7LipcXFxcfSBQQUNLRUQgYmVmc19ibG9ja19ydW47XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0NC42OTgzNjIxMTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxOTc0OTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJFRlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBgYmVmc19ibG9ja19ydW5gIHN0cnVjdDpcblxuYGBgY1xudHlwZWRlZiBzdHJ1Y3Qge1xuXHR1MzIgYWxsb2NhdGlvbl9ncm91cDtcblx0dTE2IHN0YXJ0O1xuXHR1MTYgbGVuO1xufSBQQUNLRUQgYmVmc19ibG9ja19ydW47XG5gYGBcblxuUmlnaHQsIGBhbGxvY2F0aW9uX2dyb3VwYCBpcyBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBhbmQgYGJlZnNfYmxvY2tucl90YCBpcyBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiBOb3cgSSBzZWUgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBhZ19zaGlmdGAuIElmIGBhZ19zaGlmdGAgaXMgbGFyZ2UgZW5vdWdoICgzMSBvciBncmVhdGVyKSwgdGhlIGxlZnQgc2hpZnQgY291bGQgb3ZlcmZsb3cgYSAzMi1iaXQgaW50ZWdlciwgYW5kIHRoZW4gdGhlIGNhc3QgdG8gNjQgYml0cyBhZnRlcndhcmQgd29uJ3QgY2hhbmdlIHRoYXQuIElmIGBhZ19zaGlmdGAgaXMgMzIgb3IgbW9yZSwgdGhlbiB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLlxuXG5UaGUgcGF0Y2ggaGVyZSBhZGRzIGEgY2FzdCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSB0aGUgc2hpZnQsIGVuc3VyaW5nIGl04oCZcyBhIDY0LWJpdCBzaGlmdC4gU21hcnQuIEFuZCBJIHNlZSBhIGNoZWNrIGluIGBiZWZzX2NoZWNrX3NiYCB0aGF0IGVuc3VyZXMgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBhcmUgYm90aCBsZXNzIHRoYW4gMzIuXG5cbk9rYXksIG5vdyBsZXTigJlzIHRoaW5rIGFib3V0IGNvbnRleHQuIGBiZWZzX2NoZWNrX3NiYCBnZXRzIGNhbGxlZCB3aGVuIG1vdW50aW5nIGEgQkVGUyBmaWxlc3lzdGVtLiBCRUZTLCByaWdodCwgdGhhdOKAmXMgdGhlIEJlT1MgZmlsZXN5c3RlbS4gSXQncyBhICpkaXNrKiBmaWxlc3lzdGVtLCBzbyB5ZXMsIHlvdSBjYW4gZGVmaW5pdGVseSBtb3VudCBhIHVzZXItcHJvdmlkZWQgaW1hZ2UuIFNvLCBhIG1hbGljaW91c2x5IGNyYWZ0ZWQgQkVGUyBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoaXMgb3ZlcmZsb3cgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHNlY3VyaXR5IGlzc3VlIGluIHRoZSBmaWxlc3lzdGVtJ3MgbW91bnQgcGF0aC5cblxuVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBpYWRkcjJibG9ja25vYCwgYGJsb2Nrbm8yaWFkZHJgLCBhbmQgYGJlZnNfY2hlY2tfc2JgLiBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9iZWZzL2JlZnMuaGAuIGBiZWZzX2NoZWNrX3NiYCBpcyBpbiBgZnMvYmVmcy9zdXBlci5jYC4gQWgsIHllcywgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBmcm9tIGBiZWZzX2ZpbGxfc3VwZXJgLiBJJ2xsIGhhdmUgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBwcmVwYXJlIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGdvb2Qgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1Mi42MTgxMTUzMzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODM5NDYyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19jaGVja19zYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2xpbnV4dmZzLmM9NzgwPWJlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtODQyLVxcdGlmICgoYmVmc19sb2FkX3NiKHNiLCBkaXNrX3NiKSAhPSBCRUZTX09LKSB8fFxcbmZzL2JlZnMvbGludXh2ZnMuYzo4NDM6XFx0ICAgIChiZWZzX2NoZWNrX3NiKHNiKSAhPSBCRUZTX09LKSlcXG5mcy9iZWZzL2xpbnV4dmZzLmMtODQ0LVxcdFxcdGdvdG8gdW5hY3F1aXJlX2JoO1xcbi0tXFxuZnMvYmVmcy9zdXBlci5jPTU3PWludFxcbmZzL2JlZnMvc3VwZXIuYzo1ODpiZWZzX2NoZWNrX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmVmcy9zdXBlci5jLTU5LXtcXG4tLVxcbmZzL2JlZnMvc3VwZXIuaD01PWludCBiZWZzX2xvYWRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19zdXBlcl9ibG9jayAqZGlza19zYik7XFxuZnMvYmVmcy9zdXBlci5oOjY6aW50IGJlZnNfY2hlY2tfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU0LjMwMjA3NDU4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0NjEwNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIE1vdW50IFBvaW50IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIGBiZWZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBlbnRyeSBwb2ludCB3ZSdyZSBkZWFsaW5nIHdpdGggZm9yIG1vdW50aW5nIHRoaXMgQkVGUyBmaWxlIHN5c3RlbS4gVGhhdCB0ZWxscyBtZSBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIGBiZWZzX2NoZWNrX3NiYCwgc2luY2UgaXQgbGlrZWx5IGhhbmRsZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzIGR1cmluZyB0aGUgbW91bnRpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIHRoZSBwbGFjZSB0byByZWFsbHkgcG9rZSBhbmQgcHJvZCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBTaW5jZSBJJ20gc3RhcnRpbmcgZnJvbSBhIGNvZGUtZmlyc3QgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYEtjb25maWdgIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gQkVGUyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NTcuOTg2Njg3NzQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4Mzk2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCRUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2JlZnMvS2NvbmZpZzoyOmNvbmZpZyBCRUZTX0ZTXFxuZnMvYmVmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU5LjcwNTA4OTI3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMwMTE1MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBjb25maWcgSSdtIHdvcmtpbmcgd2l0aCBpcyBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE5vdywgZ2l2ZW4gdGhlIG51YW5jZXMgb2YgdGhpcyBzZXR1cCwgYW5kIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIEkgbmVlZCB0byBwcm9hY3RpdmVseSBjb25zaWRlciBpZiB0aGlzIGlzICphbGwqIEkgcmVxdWlyZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBBcmUgdGhlcmUgYW55IHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMsIGFuY2lsbGFyeSBzZXR0aW5ncywgb3IgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBwaWVjZXMgdGhhdCB3b3VsZCBpbXBhY3QgaXRzIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIG9yIGludGVncmF0aW9uIHdpdGggb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjAzLjAzNTIwNjk4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTA2ODI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipCRUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZz0yMz1jb25maWcgQkVGU19ERUJVR1xcbmZzL2JlZnMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJEZWJ1ZyBCZUZTXFxcIlxcbmZzL2JlZnMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIEJFRlNfRlNcXG5mcy9iZWZzL0tjb25maWctMjYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODowNS40MjAyODAwOTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MjIwODM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQkVGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYEJFRlNgIGl0c2VsZi4gVGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcywgSSBkb24ndCBzZWUgYW55IGdsYXJpbmcgY29uZmlnIGdvdGNoYXMgb3IgbmVjZXNzYXJ5IHR3ZWFrcyBmb3IgYEJFRlNgIGl0c2VsZi4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluIHRoYXQgcmVnYXJkLiBCdXQsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9mIGBCRUZTX0ZTYD8gV2hhdCBleHRlcm5hbCBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIG90aGVyIGludGVybmFsIG1vZHVsZXMgYXJlIGl0cyBidWlsZGluZyBibG9ja3M/IEkga25vdyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgY2FuJ3QganVzdCBhc3N1bWUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgZXNwZWNpYWxseSBpZiB0aGVyZSBpcyBhIG5ld2VyIHZlcnNpb24gb2Ygc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDIxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDguOTcyNDkyMDE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAyODI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmVmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvS2NvbmZpZz0yPWNvbmZpZyBCRUZTX0ZTXFxuZnMvYmVmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJlT1MgZmlsZSBzeXN0ZW0gKEJlRlMpIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuZnMvYmVmcy9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2JlZnMvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbi0tXFxuZnMvYmVmcy9LY29uZmlnPTIzPWNvbmZpZyBCRUZTX0RFQlVHXFxuZnMvYmVmcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkRlYnVnIEJlRlNcXFwiXFxuZnMvYmVmcy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gQkVGU19GU1xcbmZzL2JlZnMvS2NvbmZpZy0yNi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjA5LjAyMDUyNDgxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQxMzQ4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEJFRlMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kgaGVyZSBoaW5nZXMgb24gdGhlIGBCTE9DS2AgY29tcG9uZW50LCB0aGF0J3MgdGhlIGNlbnRyYWwgcGllY2UuICBUaGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiB0byBlbmFibGUgaXMgZGVmaW5pdGVseSBgQkVGU19GU2AuIFJpZ2h0LCBnb3QgaXQuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBiZWZzX2ZpbGxfc3VwZXJgIGFuZCBgYmVmc19jaGVja19zYmAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgdGhlIG9uZXMgaGFuZGxpbmcgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5CdXQgaG9sZCBvbi4uLiBJJ20gbm90aWNpbmcgdGhhdCBgaWFkZHIyYmxvY2tub2AgYW5kIGBibG9ja25vMmlhZGRyYCBhcmUgdXNlZCAqZXZlcnl3aGVyZSouICBUaGF0IHN1Z2dlc3RzIHRoZXkncmUgY29yZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuIFRoZXkncmUgcHJvYmFibHkgY3J1Y2lhbCBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBpbm9kZSBhZGRyZXNzZXMgYW5kIGJsb2NrIG51bWJlcnMsIHdoaWNoIHdvdWxkIGJlIGZ1bmRhbWVudGFsIHRvIGFsbW9zdCBldmVyeSBCRUZTIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBldmFsdWF0ZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFRoZXknbGwgbmVlZCBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MTIuNzYxODc1NTk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk1NTE3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlhZGRyMmJsb2Nrbm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9DaGFuZ2VMb2c9MjA0PVZlcnNpb24gMC40ICgyMDAxLTEwLTI4KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMzMzLVxcdEdvdCByaWQgb2YgYWJvbWluYXRpb25zIGJlZnNfaWFkZHIyaW5vZGUoKSBhbmQgYmVmc19pbm9kZTJpbm8oKS4gXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MzM0OlxcdFJlcGxhY2VkIHdpdGggc2luZ2xlIGZ1bmN0aW9uIGlhZGRyMmJsb2Nrbm8oKS5cXG5mcy9iZWZzL0NoYW5nZUxvZy0zMzUtXFx0KGZzL2JlZnMvc3VwZXIuYykgKGZzL2JlZnMvaW5vZGUuYylcXG4tLVxcbmZzL2JlZnMvYmVmcy5oPTEyMj1zdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XFxuZnMvYmVmcy9iZWZzLmg6MTIzOmlhZGRyMmJsb2Nrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19pbm9kZV9hZGRyICppYWRkcilcXG5mcy9iZWZzL2JlZnMuaC0xMjQte1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzA1PWJlZnNfZmluZF9icnVuX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTctXFx0YmVmc19ibG9ja19ydW4gaW5kaXJlY3QgPSBkYXRhLVxcdTAwM2VpbmRpcmVjdDtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzozMTg6XFx0YmVmc19ibG9ja25yX3QgaW5kaXJibG9ja25vID0gaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyZWN0KTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0zMTktXFx0aW50IGFycmF5bGVuID0gYmVmc19pYWRkcnNfcGVyX2Jsb2NrKHNiKTtcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jPTQxND1iZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDcxLVxcdGRibF9pbmRpcl9ibG9jayA9XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6NDcyOlxcdCAgICBzYl9icmVhZChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmRhdGEtXFx1MDAzZWRvdWJsZV9pbmRpcmVjdCkgK1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTQ3My1cXHRcXHRcXHRcXHRcXHRkYmxfd2hpY2hfYmxvY2spO1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDc3LVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nKVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ3ODpcXHRcXHRcXHQgICBpYWRkcjJibG9ja25vKHNiLCBcXHUwMDI2ZGF0YS1cXHUwMDNlZG91YmxlX2luZGlyZWN0KSArXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNDc5LVxcdFxcdFxcdCAgIGRibF93aGljaF9ibG9jayk7XFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00OTgtXFx0aW5kaXJfYmxvY2sgPVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjQ5OTpcXHQgICAgc2JfYnJlYWQoc2IsIGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpbmRpcl9ydW4pICsgd2hpY2hfYmxvY2spO1xcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTUwMC1cXHRpZiAoaW5kaXJfYmxvY2sgPT0gTlVMTCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTAyLVxcdFxcdFxcdCAgIFxcXCJhdCBibG9ja25vICVsdVxcXCIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo1MDM6XFx0XFx0XFx0ICAgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmluZGlyX3J1bikgKyB3aGljaF9ibG9jayk7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtNTA0LVxcdFxcdHJldHVybiBCRUZTX0VSUjtcXG4tLVxcbmZzL2JlZnMvaW5vZGUuYz0xOT1iZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcXG4tLVxcbmZzL2JlZnMvaW5vZGUuYy0zNi1cXHQgKi9cXG5mcy9iZWZzL2lub2RlLmM6Mzc6XFx0aWYgKGlub2RlICE9IGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpbm9fbnVtKSkge1xcbmZzL2JlZnMvaW5vZGUuYy0zOC1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiaW5vZGUgYmxvY2tuciBmaWVsZCBkaXNhZ3JlZXMgd2l0aCB2ZnMgXFxcIlxcbmZzL2JlZnMvaW5vZGUuYy0zOS1cXHRcXHRcXHQgICBcXFwiVkZTOiAlbHUsIElub2RlICVsdVxcXCIsICh1bnNpZ25lZCBsb25nKVxcbmZzL2JlZnMvaW5vZGUuYzo0MDpcXHRcXHRcXHQgICBpbm9kZSwgKHVuc2lnbmVkIGxvbmcpaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNmlub19udW0pKTtcXG5mcy9iZWZzL2lub2RlLmMtNDEtXFx0XFx0cmV0dXJuIEJFRlNfQkFEX0lOT0RFO1xcbi0tXFxuZnMvYmVmcy9pby5jPTI3PWJlZnNfYnJlYWRfaWFkZHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZV9hZGRyIGlhZGRyKVxcbi0tXFxuZnMvYmVmcy9pby5jLTQyLVxcbmZzL2JlZnMvaW8uYzo0MzpcXHRibG9jayA9IGlhZGRyMmJsb2Nrbm8oc2IsIFxcdTAwMjZpYWRkcik7XFxuZnMvYmVmcy9pby5jLTQ0LVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTEzND1iZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0xNjAtXFxuZnMvYmVmcy9saW51eHZmcy5jOjE2MTpcXHRkaXNrX29mZiA9ICh1bG9uZykgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNnJ1bik7XFxuZnMvYmVmcy9saW51eHZmcy5jLTE2Mi1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz03ODA9YmVmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy04NjgtXFx0c2ItXFx1MDAzZXNfdGltZV9tYXggPSAweGZmZmZmZmZmZmZmZmxsO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo4Njk6XFx0cm9vdCA9IGJlZnNfaWdldChzYiwgaWFkZHIyYmxvY2tubyhzYiwgXFx1MDAyNihiZWZzX3NiLVxcdTAwM2Vyb290X2RpcikpKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtODcwLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MTQuNDU3Mzk4MjUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTQyMjY3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSB1c2FnZSwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipDb2RlIEluc3BlY3Rpb246IEFkZHJlc3MgQ29udmVyc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBpYWRkcjJibG9ja25vYCB1c2VkIHByZXR0eSBleHRlbnNpdmVseSBhY3Jvc3MgdGhlIEJFRlMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGluIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zOiBgYmVmc19maW5kX2JydW5faW5kaXJlY3RgLCBgYmVmc19maW5kX2JydW5fZGJsaW5kaXJlY3RgLCBgYmVmc19jaGVja19pbm9kZWAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYGJlZnNfZ2V0X2Jsb2NrYCwgYW5kIGBiZWZzX2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGluZGljYXRvciB0aGF0IGl0J3MgYSBmdW5kYW1lbnRhbCB1dGlsaXR5IGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIGlub2RlIGFkZHJlc3NlcyBhbmQgYmxvY2sgbnVtYmVycyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJ3MgYmxvY2sgbWFwcGluZyBzdHJ1Y3R1cmVzLiBJdCdzIGludm9sdmVkIGluIGZpbmRpbmcgYmxvY2sgcnVucywgY2hlY2tpbmcgaW5vZGUgaW50ZWdyaXR5LCByZWFkaW5nIGJsb2NrIGRhdGEgYmFzZWQgb24gaW5vZGUgYWRkcmVzcywgZ2V0dGluZyBibG9ja3MgZm9yIGFsbG9jYXRpb24sIGFuZCBpbml0aWFsaXppbmcgdGhlIHN1cGVyIGJsb2NrIHdoaWNoIHdvdWxkIGhhdmUgdG8gY29udGFpbiBibG9jayBudW1iZXIgZGF0YS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBibG9ja25vMmlhZGRyYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0ICptaWdodCogYmUgdXNlZCBpbiBgYmVmc19pZ2V0YCwgdGhlIGlub2RlIGdldCBmdW5jdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlLCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBrbm93IHRoZSBpbnZlcnNlIG9mIHRoZSBmaXJzdCBvbmUgd291bGQgaGF2ZSB0byBiZSBoZXJlIHRvby4gSXQgd291bGQgaGF2ZSB0byBiZSBjb252ZXJ0aW5nIGJldHdlZW4gYmxvY2sgbnVtYmVyIGFuZCBhbiBpbm9kZSBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE4LjYxMTYyODI2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDMyNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibG9ja25vMmlhZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvYmVmcy5oPTEyOT1zdGF0aWMgaW5saW5lIGJlZnNfaW5vZGVfYWRkclxcbmZzL2JlZnMvYmVmcy5oOjEzMDpibG9ja25vMmlhZGRyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfYmxvY2tucl90IGJsb2Nrbm8pXFxuZnMvYmVmcy9iZWZzLmgtMTMxLXtcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0yOTk9c3RhdGljIHN0cnVjdCBpbm9kZSAqYmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTMxNy1cXHQvKiBjb252ZXJ0IGZyb20gdmZzJ3MgaW5vZGUgbnVtYmVyIHRvIGJlZnMncyBpbm9kZSBudW1iZXIgKi9cXG5mcy9iZWZzL2xpbnV4dmZzLmM6MzE4OlxcdGJlZnNfaW5vLVxcdTAwM2VpX2lub2RlX251bSA9IGJsb2Nrbm8yaWFkZHIoc2IsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTMxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MjAuMjQxOTYwMTczWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzM3MzQyNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCRUZTIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoaXMgaXNzdWUgYmFjayB0byBob3cgQkVGUyBoYW5kbGVzIHN1cGVyYmxvY2tzIGFuZCBpbm9kZSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgYGJsb2Nrbm8yaWFkZHJgIGlzIHVzZWQgd2l0aGluIGBiZWZzX2lnZXRgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAgYW5kIGBiZWZzX2xvb2t1cGAuIEdpdmVuIHRoYXQgdGhpcyBidWcgY2FuIGJlIHRyaWdnZXJlZCBieSBhIGNyYWZ0ZWQgQkVGUyBpbWFnZSBkdXJpbmcgbW91bnQgb3IgZmlsZSBhY2Nlc3MsIGl0J3MgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2Ygc3ltYm9scyB0byBmb2N1cyBvbjogYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYGJlZnNfaWdldGAsIGBiZWZzX2ZpbmRfYnJ1bl9pbmRpcmVjdGAsIGBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdGAsIGBiZWZzX2JyZWFkX2lhZGRyYCwgYW5kIGBiZWZzX2dldF9ibG9ja2AuIE5vdywgbGV0J3MgcmVmaW5lIHRoYXQgbGlzdCBiYXNlZCBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LlxuXG5gYmVmc19maWxsX3N1cGVyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nLCBhbmQgYGJlZnNfY2hlY2tfc2JgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgYmVmc19maWxsX3N1cGVyYC4gYGJlZnNfaWdldGAgaXMgY2FsbGVkIGZyb20gYm90aCBgYmVmc19maWxsX3N1cGVyYCBhbmQgYGJlZnNfbG9va3VwYCwgd2hpY2ggZ2l2ZXMgaXQgdGhlIHNlY29uZCBwb2ludCBvZiBlbnRyeS4gYGJlZnNfZmluZF9icnVuX2luZGlyZWN0YCBhbmQgYGJlZnNfZmluZF9icnVuX2RibGluZGlyZWN0YCBhcmUgcGFydCBvZiBgYmVmc19mYmxvY2syYnJ1bmAsIHdoaWNoIGluIHR1cm4gaXMgdXNlZCBieSBgYmVmc19nZXRfYmxvY2tgIGFuZCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLiBgYmVmc19nZXRfYmxvY2tgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHRoZSBgZ2V0X2Jsb2NrYCBjYWxsYmFjayBmb3IgYG1wYWdlX3JlYWRfZm9saW9gIGFuZCBgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvYCwgYW5kIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgaGFuZGxlcyBkaXJlY3RvcnkgZW50cmllcyBhbmQgc3ltbGlua3MuXG5cblNvLCBib2lsaW5nIGl0IGRvd24sIHRoZSBtb3N0IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgYXJlOlxuXG4qICAgYGJlZnNfZmlsbF9zdXBlcmAgKG1vdW50KVxuKiAgIGBiZWZzX2lnZXRgIChpbm9kZSByZXRyaWV2YWwpXG4qICAgYGJlZnNfZ2V0X2Jsb2NrYCAoZGF0YSBibG9jayBtYXBwaW5nKVxuKiAgIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAgKHJlYWRpbmcgZGF0YSBzdHJlYW1zKVxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgYmVmc19yZWFkX2RhdGFzdHJlYW1gIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbmZpcm0gdGhlIGV4dGVudCBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzAuOTc5MzA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3OTg2MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfcmVhZF9kYXRhc3RyZWFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvQ2hhbmdlTG9nPTE3PVZlcnNpb24gMC45ICgyMDAyLTAzLTE0KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMTktKiBBZGRlZCBTZXJnZXkgUy4gS29zdHlsaW92J3MgcGF0Y2ggdG8gZWxpbWluYXRlIG1lbWNweSgpIG92ZXJoZWFkXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MjA6XFx0ZnJvbSBiK3RyZWUgb3BlcmF0aW9ucy4gQ2hhbmdlcyB0aGUgYmVmc19yZWFkX2RhdGFzdHJlYW0oKSBpbnRlcmZhY2UuXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMjEtXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmM9MTE5PXN0YXRpYyBpbnQgYmVmc19jb21wYXJlX3N0cmluZ3MoY29uc3Qgdm9pZCAqa2V5MSwgaW50IGtleWxlbjEsXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTI3LSAqXFxuZnMvYmVmcy9idHJlZS5jOjEyODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBidHJlZSBzdXBlcmJsb2NrIGFuZFxcbmZzL2JlZnMvYnRyZWUuYy0xMjktICogbWFrZXMgc3VyZSBpdCBpcyBpbiBjcHUgYnl0ZW9yZGVyLCBieXRlc3dhcHBpbmcgaWYgbmVjZXNzYXJ5Llxcbi0tXFxuZnMvYmVmcy9idHJlZS5jPTEzND1iZWZzX2J0X3JlYWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZHMsXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTQxLVxcbmZzL2JlZnMvYnRyZWUuYzoxNDI6XFx0YmggPSBiZWZzX3JlYWRfZGF0YXN0cmVhbShzYiwgZHMsIDAsIE5VTEwpO1xcbmZzL2JlZnMvYnRyZWUuYy0xNDMtXFxuLS1cXG5mcy9iZWZzL2J0cmVlLmMtMTc3LSAqXFxuZnMvYmVmcy9idHJlZS5jOjE3ODogKiBDYWxscyBiZWZzX3JlYWRfZGF0YXN0cmVhbSB0byByZWFkIGluIHRoZSBpbmRpY2F0ZWQgYnRyZWUgbm9kZSBhbmRcXG5mcy9iZWZzL2J0cmVlLmMtMTc5LSAqIG1ha2VzIHN1cmUgaXRzIGhlYWRlciBmaWVsZHMgYXJlIGluIGNwdSBieXRlb3JkZXIsIGJ5dGVzd2FwcGluZyBpZlxcbi0tXFxuZnMvYmVmcy9idHJlZS5jPTE5MT1iZWZzX2J0X3JlYWRfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG4tLVxcbmZzL2JlZnMvYnRyZWUuYy0yMDAtXFxuZnMvYmVmcy9idHJlZS5jOjIwMTpcXHRub2RlLVxcdTAwM2ViaCA9IGJlZnNfcmVhZF9kYXRhc3RyZWFtKHNiLCBkcywgbm9kZV9vZmYsIFxcdTAwMjZvZmYpO1xcbmZzL2JlZnMvYnRyZWUuYy0yMDItXFx0aWYgKCFub2RlLVxcdTAwM2ViaCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9MzM9c3RhdGljIGludCBiZWZzX2ZpbmRfYnJ1bl9kYmxpbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMzgtLyoqXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6Mzk6ICogYmVmc19yZWFkX2RhdGFzdHJlYW0gLSBnZXQgYnVmZmVyX2hlYWQgY29udGFpbmluZyBkYXRhLCBzdGFydGluZyBmcm9tIHBvcy5cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy00MC0gKiBAc2I6IEZpbGVzeXN0ZW0gc3VwZXJibG9ja1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM9NDg9c3RydWN0IGJ1ZmZlcl9oZWFkICpcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo0OTpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy01MC1cXHRcXHQgICAgIGJlZnNfb2ZmX3QgcG9zLCB1aW50ICpvZmYpXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz0xMzA9YmVmc19yZWFkX2xzeW1saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtMTM5LVxcdHdoaWxlIChieXRlc19yZWFkIFxcdTAwM2MgbGVuKSB7XFxuZnMvYmVmcy9kYXRhc3RyZWFtLmM6MTQwOlxcdFxcdGJoID0gYmVmc19yZWFkX2RhdGFzdHJlYW0oc2IsIGRzLCBieXRlc19yZWFkLCBOVUxMKTtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy0xNDEtXFx0XFx0aWYgKCFiaCkge1xcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtNi1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uaDo3OnN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC04LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzIuNjU3Mjk2NjU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTg3MzI2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgQkVGUyBGdW5jdGlvbiBEZWNsYXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCRUZTIGZ1bmN0aW9ucy4gRmlyc3QsIGBiZWZzX3JlYWRfZGF0YXN0cmVhbWAg4oCTIHRoYXQgb25lJ3Mgbm9uLXN0YXRpYywgZ290IGl0LiBUaGVuLCBgYmVmc19maWxsX3N1cGVyYCBpcyBhbHNvIG5vbi1zdGF0aWMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBob2xkIG9uLi4uIEkgY291bGQndmUgc3dvcm4gSSdkIHNlZW4gYGJlZnNfaWdldGAgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWNsYXJhdGlvbiBvZiBgYmVmc19pZ2V0YCBiZWZvcmUgbW92aW5nIGZvcndhcmQsIGp1c3QgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODozOC40NTYwMzE4ODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQyMjI0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19pZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvbGludXh2ZnMuYz00Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmVmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNDgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQpO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo0OTpzdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy01MC1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTE3Mz1iZWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMjA4LVxcdH0gZWxzZSB7XFxuZnMvYmVmcy9saW51eHZmcy5jOjIwOTpcXHRcXHRpbm9kZSA9IGJlZnNfaWdldChkaXItXFx1MDAzZWlfc2IsIChpbm9fdCkgb2Zmc2V0KTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMjEwLVxcdH1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0yOTI9c3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy0yOTgtXFxuZnMvYmVmcy9saW51eHZmcy5jOjI5OTpzdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuZnMvYmVmcy9saW51eHZmcy5jLTMwMC17XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9NjM4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJlZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1aW50NjRfdCBpbm8sXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQxLVxcdC8qIE5vIG5lZWQgdG8gaGFuZGxlIGlfZ2VuZXJhdGlvbiAqL1xcbmZzL2JlZnMvbGludXh2ZnMuYzo2NDI6XFx0cmV0dXJuIGJlZnNfaWdldChzYiwgaW5vKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjQzLX1cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz02NjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJlZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYy02NjktXFxuZnMvYmVmcy9saW51eHZmcy5jOjY3MDpcXHRwYXJlbnQgPSBiZWZzX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsXFxuZnMvYmVmcy9saW51eHZmcy5jLTY3MS1cXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyliZWZzX2luby1cXHUwMDNlaV9wYXJlbnQuc3RhcnQpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTc4MD1iZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTg2OC1cXHRzYi1cXHUwMDNlc190aW1lX21heCA9IDB4ZmZmZmZmZmZmZmZmbGw7XFxuZnMvYmVmcy9saW51eHZmcy5jOjg2OTpcXHRyb290ID0gYmVmc19pZ2V0KHNiLCBpYWRkcjJibG9ja25vKHNiLCBcXHUwMDI2KGJlZnNfc2ItXFx1MDAzZXJvb3RfZGlyKSkpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy04NzAtXFx0aWYgKElTX0VSUihyb290KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0MC4yMTAyNjI1MjRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk3MzkxOTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgYmVmc19pZ2V0YCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIHN1Y2ggYXMgYGJlZnNfbG9va3VwYCwgYGJlZnNfbmZzX2dldF9pbm9kZWAsIGBiZWZzX2dldF9wYXJlbnRgLCBhbmQgYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMgYSB1c2VmdWwgaW5pdGlhbCBidWlsZGluZyBibG9jay5cblxuTm93LCBob2xkIG9uLi4uIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYGJlZnNfZ2V0X2Jsb2NrYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gSXQgc2hvdWxkIGJlLCBidXQgaXQncyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHRoZXNlIGNvcmUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDcuMTg0MTg0MDMyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyOTEwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfZ2V0X2Jsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JlZnMvQ2hhbmdlTG9nPTIwND1WZXJzaW9uIDAuNCAoMjAwMS0xMC0yOClcXG4tLVxcbmZzL2JlZnMvQ2hhbmdlTG9nLTIzMy1cXHRTbyBpdCBkb2VzIGkvbyBpbiBtdWNoIGxhcmdlciBjaHVua3MuIEl0IGlzIHRoZSBjb3JyZWN0IGxpbnV4IHdheS4gSXQgXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MjM0OlxcdHVzZXMgYmVmc19nZXRfYmxvY2soKSBieSB3YXkgb2YgYmVmc19yZWFkcGFnZSgpIHRvIGZpbmQgdGhlIGRpc2sgb2Zmc2V0cyBcXG5mcy9iZWZzL0NoYW5nZUxvZy0yMzUtXFx0b2YgYmxvY2tzLCB3aGljaCBpbiB0dXJuIGNhbGxzIGJlZnNfZnBvczJicnVuKCkgaW4gZGF0YXN0cmVhbS5jIHRvIGRvIFxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTQzPXN0YXRpYyBpbnQgYmVmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6NDQ6c3RhdGljIGludCBiZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xcbmZzL2JlZnMvbGludXh2ZnMuYy00NS1zdGF0aWMgaW50IGJlZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBiZWZzX2V4cG9ydF9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTEwOS0gKiBJbiB0dXJuLCBzaW1wbHkgY2FsbHMgYSBnZW5lcmljIGJsb2NrIHJlYWQgZnVuY3Rpb24gYW5kXFxuZnMvYmVmcy9saW51eHZmcy5jOjExMDogKiBwYXNzZXMgaXQgdGhlIGFkZHJlc3Mgb2YgYmVmc19nZXRfYmxvY2ssIGZvciBtYXBwaW5nIGZpbGVcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTExLSAqIHBvc2l0aW9ucyB0byBkaXNrIGJsb2Nrcy5cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0xMTM9c3RhdGljIGludCBiZWZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvYmVmcy9saW51eHZmcy5jLTExNC17XFxuZnMvYmVmcy9saW51eHZmcy5jOjExNTpcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZWZzX2dldF9ibG9jayk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTExNi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTE5PWJlZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuZnMvYmVmcy9saW51eHZmcy5jLTEyMC17XFxuZnMvYmVmcy9saW51eHZmcy5jOjEyMTpcXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZWZzX2dldF9ibG9jayk7XFxuZnMvYmVmcy9saW51eHZmcy5jLTEyMi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTMzPXN0YXRpYyBpbnRcXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTM0OmJlZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbmZzL2JlZnMvbGludXh2ZnMuYy0xMzUtXFx0ICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0Mi1cXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTQzOlxcdGJlZnNfZGVidWcoc2IsIFxcXCItLS1cXHUwMDNlIGJlZnNfZ2V0X2Jsb2NrKCkgZm9yIGlub2RlICVsbHUsIGJsb2NrICVsZFxcXCIsXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0NC1cXHRcXHQgICBpbm9kZS1cXHUwMDNlaV9pbm8sIChsb25nKWJsb2NrKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTQ1LVxcdGlmIChjcmVhdGUpIHtcXG5mcy9iZWZzL2xpbnV4dmZzLmM6MTQ2OlxcdFxcdGJlZnNfZXJyb3Ioc2IsIFxcXCJiZWZzX2dldF9ibG9jaygpIHdhcyBhc2tlZCB0byB3cml0ZSB0byBcXFwiXFxuZnMvYmVmcy9saW51eHZmcy5jLTE0Ny1cXHRcXHRcXHQgICBcXFwiYmxvY2sgJWxkIGluIGlub2RlICVsbHVcXFwiLCAobG9uZylibG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDkuMzI3MTAyMDQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzg3NTY3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEJFRlMgRmlsZSBTeXN0ZW0gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQkVGUyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBsZXZlcmFnZSB0aGVtLiBgYmVmc19nZXRfYmxvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5LiBIbW0sIHRoYXQgbWVhbnMgSSBjYW4ndCBqdXN0IGNhbGwgaXQgZnJlZWx5LiBUaGF0IGNoYW5nZXMgaG93IEkgYXBwcm9hY2ggdGhlIHByb2JsZW0uIFdpdGggdGhhdCBpbiBtaW5kLCBJIG5lZWQgdG8gbG9vayBmb3Igb3RoZXIgb3B0aW9ucyB0byBhY2hpZXZlIG15IGdvYWwuIEkgd2FzIGhvcGluZyB0byB1c2UgYGJlZnNfcmVhZF9mb2xpb2AgYW5kIGBiZWZzX2JtYXBgIHRvZ2V0aGVyIHdpdGggaXQuXG5cbldhaXQgYSBzZWNvbmQsIGBiZWZzX3JlYWRfZm9saW9gIGlzIGFsc28gc3RhdGljISBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLiBBbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZ28gd2l0aCBhIGRpZmZlcmVudCBhcHByb2FjaC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgdGhyb3VnaCB0aGUgbGlzdCwgYGJlZnNfZmlsbF9zdXBlcmAsIGBiZWZzX2NoZWNrX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYW5kIGBiZWZzX2ZibG9jazJicnVuYCBhcmUgc3RpbGwgYXZhaWxhYmxlIGFzIG9wdGlvbnMuIFRoYXQgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuQWgsIGFuZCBnb29kLCBgYmVmc19mYmxvY2syYnJ1bmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBub3QgcmVzdHJpY3RlZCBsaWtlIHRob3NlIG90aGVyIG9uZXMuIEV4Y2VsbGVudCwgdGhpcyBtZWFucyB0aGF0IEkgY2FuIGluY29ycG9yYXRlIHRoaXMgb25lIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo1NS42NjU4NjE4NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcyNDg5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVmc19mYmxvY2syYnJ1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2RhdGFzdHJlYW0uYz00OT1iZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTYwLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjYxOlxcdGlmIChiZWZzX2ZibG9jazJicnVuKHNiLCBkcywgYmxvY2ssIFxcdTAwMjZydW4pICE9IEJFRlNfT0spIHtcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy02Mi1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiQmVGUzogRXJyb3IgZmluZGluZyBkaXNrIGFkZHIgb2YgYmxvY2sgJWx1XFxcIixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTc5LS8qKlxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjgwOiAqIGJlZnNfZmJsb2NrMmJydW4gLSBnaXZlIGJhY2sgYmxvY2sgcnVuIGZvciBmYmxvY2tcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYy04MS0gKiBAc2I6IHRoZSBzdXBlcmJsb2NrXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uYz05ND1pbnRcXG5mcy9iZWZzL2RhdGFzdHJlYW0uYzo5NTpiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmMtOTYtXFx0XFx0IGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bilcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTExMS1cXHRcXHRiZWZzX2Vycm9yKHNiLFxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jOjExMjpcXHRcXHRcXHQgICBcXFwiYmVmc19mYmxvY2syYnJ1bigpIHdhcyBhc2tlZCB0byBmaW5kIGJsb2NrICVsdSwgXFxcIlxcbmZzL2JlZnMvZGF0YXN0cmVhbS5jLTExMy1cXHRcXHRcXHQgICBcXFwid2hpY2ggaXMgbm90IG1hcHBlZCBieSB0aGUgZGF0YXN0cmVhbVxcXFxuXFxcIixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oPTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpiZWZzX3JlYWRfZGF0YXN0cmVhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtMTAtXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmg6MTE6aW50IGJlZnNfZmJsb2NrMmJydW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kYXRhX3N0cmVhbSAqZGF0YSxcXG5mcy9iZWZzL2RhdGFzdHJlYW0uaC0xMi1cXHRcXHQgICAgIGJlZnNfYmxvY2tucl90IGZibG9jaywgYmVmc19ibG9ja19ydW4gKnJ1bik7XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9MTE5PWJlZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTI5LSAqXFxuZnMvYmVmcy9saW51eHZmcy5jOjEzMDogKiBDYWxscyBiZWZzX2ZibG9jazJicnVuKCkgaW4gZGF0YXN0cmVhbS5jIHRvIGRvIHRoZSByZWFsIHdvcmsuXFxuZnMvYmVmcy9saW51eHZmcy5jLTEzMS0gKi9cXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz0xMzQ9YmVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUxLVxcbmZzL2JlZnMvbGludXh2ZnMuYzoxNTI6XFx0cmVzID0gYmVmc19mYmxvY2syYnJ1bihzYiwgZHMsIGJsb2NrLCBcXHUwMDI2cnVuKTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtMTUzLVxcdGlmIChyZXMgIT0gQkVGU19PSykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo1Ny4zMTMxMTU5MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NDQ4MDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyBgYmVmc19mYmxvY2syYnJ1bmAncyBTY29wZSBhbmQgUG90ZW50aWFsIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIGBiZWZzX2ZibG9jazJicnVuYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgd2hpY2ggaXMgdGhlIGZpcnN0IGltcG9ydGFudCBwb2ludC4gVGhhdCBmYWN0IGFsb25lIHRlbGxzIG1lIGl0IG1pZ2h0IGJlIHBhcnQgb2YgdGhlIEFQSS4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIga2V5IGZ1bmN0aW9ucyBJJ20gZmFtaWxpYXIgd2l0aCBpbiB0aGlzIEJFRlMgY29udGV4dC4gU28sIEkgbmVlZCB0byBjb25zaWRlciBpdCBhbG9uZyB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGFuZCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGV5IGludGVycmVsYXRlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBkYXRhIGZsb3cgYW5kIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLlxuXG5CdXQsIEkgYWxzbyBjYW4ndCBqdXN0IGZpeGF0ZSBvbiB0aGVzZS4gQSBkZWVwZXIgZXhwbG9yYXRpb24gaXMgbmVlZGVkLCBzbyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBiYXNlLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGhpZGRlbiBnZW1zIHRoYXQgYXJlIHZhbHVhYmxlLCBhbmQgY291bGQgYmUgbWlzc2VkIGlmIEkgZm9jdXMgdG9vIG5hcnJvd2x5IG9uIHRoZSBzdGF0ZWQgc3ltYm9scy4gSXQncyB0aW1lIHRvIGJyb2FkZW4gbXkgc2VhcmNoIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDQuNzA3NjAwNDU4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2MTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJlZnNfLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iZWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iZWZzL2J0cmVlLmgtNi1cXG5mcy9iZWZzL2J0cmVlLmg6NzppbnQgYmVmc19idHJlZV9maW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRzLFxcbmZzL2JlZnMvYnRyZWUuaC04LVxcdFxcdCAgICBjb25zdCBjaGFyICprZXksIGJlZnNfb2ZmX3QgKnZhbHVlKTtcXG5mcy9iZWZzL2J0cmVlLmgtOS1cXG5mcy9iZWZzL2J0cmVlLmg6MTA6aW50IGJlZnNfYnRyZWVfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2RhdGFfc3RyZWFtICpkcyxcXG5mcy9iZWZzL2J0cmVlLmgtMTEtXFx0XFx0ICAgIGxvZmZfdCBrZXlfbm8sIHNpemVfdCBidWZzaXplLCBjaGFyICprZXlidWYsXFxuLS1cXG5mcy9iZWZzL2RhdGFzdHJlYW0uaD03PXN0cnVjdCBidWZmZXJfaGVhZCAqYmVmc19yZWFkX2RhdGFzdHJlYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oLTEwLVxcbmZzL2JlZnMvZGF0YXN0cmVhbS5oOjExOmludCBiZWZzX2ZibG9jazJicnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGJlZnNfZGF0YV9zdHJlYW0gKmRhdGEsXFxuZnMvYmVmcy9kYXRhc3RyZWFtLmgtMTItXFx0XFx0ICAgICBiZWZzX2Jsb2NrbnJfdCBmYmxvY2ssIGJlZnNfYmxvY2tfcnVuICpydW4pO1xcbi0tXFxuZnMvYmVmcy9pbm9kZS5oLTUtXFxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxcbmZzL2JlZnMvaW5vZGUuaC03LVxcdFxcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xcbi0tXFxuZnMvYmVmcy9zdXBlci5oLTQtXFxuZnMvYmVmcy9zdXBlci5oOjU6aW50IGJlZnNfbG9hZF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX3N1cGVyX2Jsb2NrICpkaXNrX3NiKTtcXG5mcy9iZWZzL3N1cGVyLmg6NjppbnQgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDQuNzU2NTY4NTQ2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjM4ODcwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJFRlMgSW5vZGUgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZmlsZXN5c3RlbSBpbnRlZ3JpdHksIGFuZCBgYmVmc19jaGVja19pbm9kZWAgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kLiBUaGF0IG9uZeKAmXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNyaXRpY2FsaXR5IG9mIGlub2RlIHN0cnVjdHVyZXMuIFJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGBiZWZzX2NoZWNrX2lub2RlYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyBlcnJvciBkZXRlY3Rpb24gYW5kIHBvdGVudGlhbGx5LCB3aGF0IGtpbmRzIG9mIGNvcnJ1cHRpb24gaXQncyBkZXNpZ25lZCB0byBjYXRjaC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9u4oCZcyBhcHByb2FjaCB3aWxsIGdpdmUgdXMgYSBzdHJvbmcgYmFzaXMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDguNjIwNDU4ODE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3MTUxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJlZnNfY2hlY2tfaW5vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmVmcy9pbm9kZS5jPTE4PWludFxcbmZzL2JlZnMvaW5vZGUuYzoxOTpiZWZzX2NoZWNrX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfaW5vZGUgKnJhd19pbm9kZSxcXG5mcy9iZWZzL2lub2RlLmMtMjAtXFx0XFx0IGJlZnNfYmxvY2tucl90IGlub2RlKVxcbi0tXFxuZnMvYmVmcy9pbm9kZS5oLTUtXFxuZnMvYmVmcy9pbm9kZS5oOjY6aW50IGJlZnNfY2hlY2tfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYmVmc19pbm9kZSAqcmF3X2lub2RlLFxcbmZzL2JlZnMvaW5vZGUuaC03LVxcdFxcdCAgICAgYmVmc19ibG9ja25yX3QgaW5vZGUpO1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTI5OT1zdGF0aWMgc3RydWN0IGlub2RlICpiZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtMzM0LVxcbmZzL2JlZnMvbGludXh2ZnMuYzozMzU6XFx0aWYgKGJlZnNfY2hlY2tfaW5vZGUoc2IsIHJhd19pbm9kZSwgaW5vZGUtXFx1MDAzZWlfaW5vKSAhPSBCRUZTX09LKSB7XFxuZnMvYmVmcy9saW51eHZmcy5jLTMzNi1cXHRcXHRiZWZzX2Vycm9yKHNiLCBcXFwiQmFkIGlub2RlOiAlbGx1XFxcIiwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MTAuMzI3NjE0MTg2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjEyOTI1ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBUaHJvdWdoIGEgQkVGUyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggZm9yIHRoZSBCZU9TIGZpbGVzeXN0ZW0gZHJpdmVyLCBCRUZTLiBUaGUgZmlyc3QgdGhpbmcgSSd2ZSBub3RpY2VkIGlzIHRoZSBjYWxsIGdyYXBoOiBgYmVmc19jaGVja19pbm9kZWAgaXMgdHJpZ2dlcmVkIGJ5IGBiZWZzX2lnZXRgLCBhbmQgYGJlZnNfbG9hZF9zYmAgaXMgY2FsbGVkIGZyb20gYGJlZnNfZmlsbF9zdXBlcmAuIFRoaXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBUaGUgb25lcyB0aGF0IG1hdHRlciBhcmU6IGBiZWZzX2ZpbGxfc3VwZXJgLCBgYmVmc19jaGVja19zYmAsIGBiZWZzX2xvYWRfc2JgLCBgYmVmc19yZWFkX2RhdGFzdHJlYW1gLCBgYmVmc19mYmxvY2syYnJ1bmAsIGFuZCBgYmVmc19jaGVja19pbm9kZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBhY2Nlc3MgZnVuY3Rpb25zLlxuXG5UaGUgY29uZmlnIHJlcXVpcmVkIGlzIGBCRUZTX0ZTYCwgd2hpY2ggaXMgZ29vZCBuZXdzOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBCRUZTX0ZTYCBpcyB0aGUgKm9ubHkqIGRlcGVuZGVuY3kuIE5vIGhpZGRlbiBnb3RjaGFzLCBpdCBzZWVtcy5cblxuTm93LCBsZXQncyBhcnRpY3VsYXRlIHRoZSBjb3JlIGlzc3VlIGFuZCByYXRpb25hbGUuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93cyB3aXRoaW4gdGhlIEJFRlMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBiZWZzX2NoZWNrX3NiYCBpcyBoYXZpbmcgYSBib3VuZHMgY2hlY2sgYWRkZWQgdG8gYXZvaWQgc2hpZnRpbmcgYnkgMzIgb3IgbW9yZSBiaXRzLCB3aGljaCBpcyB1bmRlZmluZWQgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gU21hcnQuIFdlIGRvbid0IHdhbnQgdGhlIGhhcmR3YXJlIHNwaXR0aW5nIG91dCBnYXJiYWdlLiBBbHNvLCBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIChhIGB1NjRgKSBhcmUgYWRkZWQgd2l0aGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgb3ZlcmZsb3dzIHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgICh3aGljaCBpcyBgdTMyYCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkncmUgcGFydCBvZiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwcm9jZXNzIChgYmVmc19maWxsX3N1cGVyYCkgYW5kLCB2aXRhbGx5LCB0aGUgYWNjZXNzIHBhdGhzIGZvciBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBUaGlzIGhpZ2hsaWdodHMgdGhhdCBhIG1hbGljaW91c2x5IGNyYWZ0ZWQgaW1hZ2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBidWdzLlxuXG5HaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBkYXRhIGFjY2VzcywgSSdkIHNheSB0aGlzIGhhcyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaW1wYWN0LiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGV4cG9zdXJlIGhlcmUgaXMgdGhhdCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgcmVzdWx0IGluIHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0cy5cblxuQWxyaWdodCwgdGhlIGtleSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lOiBgYmVmc19maWxsX3N1cGVyYCwgYGJlZnNfY2hlY2tfc2JgLCBgYmVmc19sb2FkX3NiYCwgYGJlZnNfcmVhZF9kYXRhc3RyZWFtYCwgYGJlZnNfZmJsb2NrMmJydW5gLCBhbmQgYGJlZnNfY2hlY2tfaW5vZGVgLiBUaGUgY29uZmlnIHRvIGVuYWJsZSBpcyBgQkVGU19GU2AuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDEsIk91dHB1dFRva2VucyI6MjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjU0MDU0MjU2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTYwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCRUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmVmc19maWxsX3N1cGVyXCIsXG4gICAgXCJiZWZzX2NoZWNrX3NiXCIsXG4gICAgXCJiZWZzX2xvYWRfc2JcIixcbiAgICBcImJlZnNfcmVhZF9kYXRhc3RyZWFtXCIsXG4gICAgXCJiZWZzX2ZibG9jazJicnVuXCIsXG4gICAgXCJiZWZzX2NoZWNrX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgQmVPUyBmaWxlc3lzdGVtIChCRUZTKSBkcml2ZXIuIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYmAgdG8gcHJldmVudCBzaGlmdGluZyBieSAzMiBvciBtb3JlLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIDMyLWJpdCBpbnRlZ2Vycy4gSXQgYWxzbyBhZGRzIGNhc3RzIHRvIGBiZWZzX2Jsb2NrbnJfdGAgKGEgNjQtYml0IGludGVnZXIpIGluIGBpYWRkcjJibG9ja25vYCBhbmQgYGJsb2Nrbm8yaWFkZHJgIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHNoaWZ0aW5nIGBhbGxvY2F0aW9uX2dyb3VwYCAoYSAzMi1iaXQgaW50ZWdlcikuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCAoYGJlZnNfZmlsbF9zdXBlcmApIGFuZCB3aGVuIGFjY2Vzc2luZyBpbm9kZXMgYW5kIGRhdGEgYmxvY2tzLiBTaW5jZSBCRUZTIGNhbiBiZSBtb3VudGVkIGZyb20gYSB1c2VyLXByb3ZpZGVkIGltYWdlLCBhIGNyYWZ0ZWQgaW1hZ2UgY291bGQgdHJpZ2dlciB0aGVzZSBidWdzLCBtYWtpbmcgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJFRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZWZzX2ZpbGxfc3VwZXJcIixcbiAgICBcImJlZnNfY2hlY2tfc2JcIixcbiAgICBcImJlZnNfbG9hZF9zYlwiLFxuICAgIFwiYmVmc19yZWFkX2RhdGFzdHJlYW1cIixcbiAgICBcImJlZnNfZmJsb2NrMmJydW5cIixcbiAgICBcImJlZnNfY2hlY2tfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBCZU9TIGZpbGVzeXN0ZW0gKEJFRlMpIGRyaXZlci4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiYCB0byBwcmV2ZW50IHNoaWZ0aW5nIGJ5IDMyIG9yIG1vcmUsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgMzItYml0IGludGVnZXJzLiBJdCBhbHNvIGFkZHMgY2FzdHMgdG8gYGJlZnNfYmxvY2tucl90YCAoYSA2NC1iaXQgaW50ZWdlcikgaW4gYGlhZGRyMmJsb2Nrbm9gIGFuZCBgYmxvY2tubzJpYWRkcmAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gc2hpZnRpbmcgYGFsbG9jYXRpb25fZ3JvdXBgIChhIDMyLWJpdCBpbnRlZ2VyKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50IChgYmVmc19maWxsX3N1cGVyYCkgYW5kIHdoZW4gYWNjZXNzaW5nIGlub2RlcyBhbmQgZGF0YSBibG9ja3MuIFNpbmNlIEJFRlMgY2FuIGJlIG1vdW50ZWQgZnJvbSBhIHVzZXItcHJvdmlkZWQgaW1hZ2UsIGEgY3JhZnRlZCBpbWFnZSBjb3VsZCB0cmlnZ2VyIHRoZXNlIGJ1Z3MsIG1ha2luZyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjYxNDcwODlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDgyODg3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMS42MTUyMjcyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5OTQ3NzY1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBpc3N1ZXMgaW4gdGhlIEJlRlMgZmlsZSBzeXN0ZW0uIEl0IGFkZHMgYm91bmRzIGNoZWNrcyBmb3IgYGJsb2NrX3NoaWZ0YCBhbmQgYGFnX3NoaWZ0YCBpbiBgYmVmc19jaGVja19zYigpYCBhbmQgY2FzdHMgYGlhZGRyLVxcdTAwM2VhbGxvY2F0aW9uX2dyb3VwYCB0byBgYmVmc19ibG9ja25yX3RgIGJlZm9yZSBzaGlmdGluZy4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgc2hpZnRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cywgd2hpY2ggYXJlIGJ1Z3MgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2M3MDhhZjBiYzU1YzVjNGY2NDFhZjk3MGI0OWQ3ZDIzNWEzZTMwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzLmggYi9mcy9iZWZzL2JlZnMuaFxuaW5kZXggN2NkNDcyNDU2OTRkZS4uYjhjN2I3ZjgxZjM5YyAxMDA2NDRcbi0tLSBhL2ZzL2JlZnMvYmVmcy5oXG4rKysgYi9mcy9iZWZzL2JlZnMuaFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBCRUZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgaW5saW5lIGJlZnNfYmxvY2tucl90XG4gaWFkZHIyYmxvY2tubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBiZWZzX2lub2RlX2FkZHIgKmlhZGRyKVxuIHtcbi1cdHJldHVybiAoKGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KSArXG4rXHRyZXR1cm4gKCgoYmVmc19ibG9ja25yX3QpaWFkZHItXHUwMDNlYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpICtcbiBcdFx0aWFkZHItXHUwMDNlc3RhcnQpO1xuIH1cbiBcbkBAIC0xMzMsNyArMTMzLDcgQEAgYmxvY2tubzJpYWRkcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBiZWZzX2Jsb2NrbnJfdCBibG9ja25vKVxuIFxuIFx0aWFkZHIuYWxsb2NhdGlvbl9ncm91cCA9IGJsb2Nrbm8gXHUwMDNlXHUwMDNlIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0O1xuIFx0aWFkZHIuc3RhcnQgPVxuLVx0ICAgIGJsb2Nrbm8gLSAoaWFkZHIuYWxsb2NhdGlvbl9ncm91cCBcdTAwM2NcdTAwM2MgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnQpO1xuK1x0ICAgIGJsb2Nrbm8gLSAoKGJlZnNfYmxvY2tucl90KWlhZGRyLmFsbG9jYXRpb25fZ3JvdXAgXHUwMDNjXHUwMDNjIEJFRlNfU0Ioc2IpLVx1MDAzZWFnX3NoaWZ0KTtcbiBcdGlhZGRyLmxlbiA9IDE7XG4gXG4gXHRyZXR1cm4gaWFkZHI7XG5kaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jXG5pbmRleCA3YzUwMDI1Yzk5ZDhhLi45ZjIxZjczMmQyYzE4IDEwMDY0NFxuLS0tIGEvZnMvYmVmcy9zdXBlci5jXG4rKysgYi9mcy9iZWZzL3N1cGVyLmNcbkBAIC05MywxNyArOTMsMjIgQEAgYmVmc19jaGVja19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0ICogaW4gZGlmZmVyZW50IHdheXMgYXMgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiBcdCAqL1xuIFxuLVx0aWYgKCgxIFx1MDAzY1x1MDAzYyBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0KSAhPSBiZWZzX3NiLVx1MDAzZWJsb2NrX3NpemUpIHtcbitcdGlmIChiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0IFx1MDAzZT0gMzIgfHxcbitcdCAgICAoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYmxvY2tfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tfc2l6ZSkge1xuIFx0XHRiZWZzX2Vycm9yKHNiLCBcImJsb2NrX3NoaWZ0IGRpc2FncmVlcyB3aXRoIGJsb2NrX3NpemUuIFwiXG4gXHRcdFx0ICAgXCJDb3JydXB0aW9uIGxpa2VseS5cIik7XG4gXHRcdHJldHVybiBCRUZTX0VSUjtcbiBcdH1cbiBcbi1cbiBcdC8qIGFnX3NoaWZ0IGFsc28gZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBibG9ja3NfcGVyX2FnIGluIGFcbiBcdCAqIGRpZmZlcmVudCB3YXksIG5vbi1mYXRhbCBjb25zaXN0ZW5jeSBjaGVja1xuIFx0ICovXG4tXHRpZiAoKDEgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbitcdGlmIChiZWZzX3NiLVx1MDAzZWFnX3NoaWZ0IFx1MDAzZT0gMzIpIHtcbitcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBcdTAwM2U9IDMyLiBDb3JydXB0aW9uIGxpa2VseS5cIik7XG4rXHRcdHJldHVybiBCRUZTX0VSUjtcbitcdH1cbitcbitcdGlmICgoMVUgXHUwMDNjXHUwMDNjIGJlZnNfc2ItXHUwMDNlYWdfc2hpZnQpICE9IGJlZnNfc2ItXHUwMDNlYmxvY2tzX3Blcl9hZylcbiBcdFx0YmVmc19lcnJvcihzYiwgXCJhZ19zaGlmdCBkaXNhZ3JlZXMgd2l0aCBibG9ja3NfcGVyX2FnLlwiKTtcbiBcbiBcdGlmIChiZWZzX3NiLVx1MDAzZWxvZ19zdGFydCAhPSBiZWZzX3NiLVx1MDAzZWxvZ19lbmQgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjIxLjYxNTIyODU0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NDc3NDAyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQmVGUyBJbnRlZ2VyIE92ZXJmbG93IGFuZCBTaGlmdCBPdXQtb2YtQm91bmRzIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIEJlRlMgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBiZWZzLmhgIGFuZCBgc3VwZXIuY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdGFuZGFyZCBpc3N1ZTogcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBkdXJpbmcgYml0LXNoaWZ0aW5nIG9wZXJhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBgYmVmc19ibG9ja25yX3RgLCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgYSA2NC1iaXQgaW50ZWdlciB0eXBlLCB0aG91Z2ggSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiBpbiB0aGUgY29kZS4gTXkgZ3Vlc3MgaXMgaXQncyBhIGB1NjRgLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXN0cyB0byBgYmVmc19ibG9ja25yX3RgIGZvciB0aGUgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHZhcmlhYmxlIGJlZm9yZSB0aGUgbGVmdC1zaGlmdCBieSBgQkVGU19TQihzYiktXHUwMDNlYWdfc2hpZnRgLiBUaGF04oCZcyB0aGUgZmlyc3QgcmVkIGZsYWcg4oCTIGEgc2hpZnQgb3BlcmF0aW9uLiBUaGF0IHN1Z2dlc3RzIGEgc2hpZnQgb2YgYGlhZGRyLVx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIGxlZnQgYnkgYGFnX3NoaWZ0YC4gVGhlIGZpeCBhbHNvIGluY2x1ZGVzIHNhbml0eSBjaGVja3Mgd2l0aGluIGBiZWZzX2NoZWNrX3NiYCB0byBlbnN1cmUgdGhhdCBib3RoIGBiZWZzX3NiLVx1MDAzZWJsb2NrX3NoaWZ0YCBhbmQgYGJlZnNfc2ItXHUwMDNlYWdfc2hpZnRgIGFyZSBsZXNzIHRoYW4gMzIuIFRoaXMgaXMgY2xldmVyLiBJdCdzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGJvdGggc2hpZnQtb3V0LW9mLWJvdW5kcyAoaWYgYGFnX3NoaWZ0YCBpcyAzMiBvciBncmVhdGVyKSBhbmQgaW50ZWdlciBvdmVyZmxvdyAoaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMgdG9vIGxhcmdlIGZvciB0aGUgdGFyZ2V0IHR5cGUpLlxuXG5UaGUgZ29hbCBoZXJlIGlzIGF2b2lkaW5nIFVCU0FOIHdhcm5pbmdzIG9yIG90aGVyIGlzc3VlcyB3aXRoIGJ1aWxkcyB1c2luZyBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXJzIChLQVNBTikuIEl0J3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQsIGFuZCBub3RoaW5nIHBvaW50cyB0byBhbnkga2luZCBvZiBpbmZvcm1hdGlvbiBsZWFrLiBJdCdzIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgY2FzdHMgdG8gbWFrZSBzdXJlIGludGVnZXIgb3BlcmF0aW9ucyBiZWhhdmUgYXMgZXhwZWN0ZWQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgcmlza3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cblNpbmNlIHRoaXMgaXMgcHVyZWx5IGFib3V0IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkzLCJPdXRwdXRUb2tlbnMiOjE4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjMxLjU2Mjk3MjMwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgaXNzdWVzIGluIHRoZSBCZUZTIGZpbGUgc3lzdGVtLiBJdCBhZGRzIGJvdW5kcyBjaGVja3MgZm9yIGBibG9ja19zaGlmdGAgYW5kIGBhZ19zaGlmdGAgaW4gYGJlZnNfY2hlY2tfc2IoKWAgYW5kIGNhc3RzIGBpYWRkci1cXHUwMDNlYWxsb2NhdGlvbl9ncm91cGAgdG8gYGJlZnNfYmxvY2tucl90YCBiZWZvcmUgc2hpZnRpbmcuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGFyZSBidWdzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGlzc3VlcyBpbiB0aGUgQmVGUyBmaWxlIHN5c3RlbS4gSXQgYWRkcyBib3VuZHMgY2hlY2tzIGZvciBgYmxvY2tfc2hpZnRgIGFuZCBgYWdfc2hpZnRgIGluIGBiZWZzX2NoZWNrX3NiKClgIGFuZCBjYXN0cyBgaWFkZHItXFx1MDAzZWFsbG9jYXRpb25fZ3JvdXBgIHRvIGBiZWZzX2Jsb2NrbnJfdGAgYmVmb3JlIHNoaWZ0aW5nLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBhcmUgYnVncyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[1] Phase: Succeeded StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 19:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 19:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2] Phase: Succeeded StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 19:09:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 19:09:42 +0000 UTC FinishedAt: 2026-08-26 19:09:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4lnwm/series-workflow4lnwm-convert-artifact-1190083174/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 19:09:53 +0000 UTC FinishedAt: 2026-08-26 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 19:09:53 +0000 UTC FinishedAt: 2026-08-26 19:28:14 +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:*21d042d1-659e-45fb-aa75-7ac31801fac7,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-workflow4lnwm/series-workflow4lnwm-convert-artifact-1190083174/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": "e0d0bd95-ee82-4ee8-861a-e1a3b5db311f", "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-workflow4lnwm/series-workflow4lnwm-build-action-519035388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:09:53 +0000 UTC FinishedAt: 2026-08-26 19:28:04 +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:*21d042d1-659e-45fb-aa75-7ac31801fac7,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-workflow4lnwm/series-workflow4lnwm-convert-artifact-1190083174/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": "e0d0bd95-ee82-4ee8-861a-e1a3b5db311f", "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-workflow4lnwm/series-workflow4lnwm-build-action-519035388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 19:28:14 +0000 UTC FinishedAt: 2026-08-26 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 19:28:14 +0000 UTC FinishedAt: 2026-08-26 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 19:28:14 +0000 UTC FinishedAt: 2026-08-26 19:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 19:28:14 +0000 UTC FinishedAt: 2026-08-26 19:28:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4lnwm/series-workflow4lnwm-convert-artifact-612337337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 19:28:39 +0000 UTC FinishedAt: 2026-08-26 19:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 19:28:39 +0000 UTC FinishedAt: 2026-08-26 19:30:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0d0bd95-ee82-4ee8-861a-e1a3b5db311f,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-workflow4lnwm/series-workflow4lnwm-build-action-519035388/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-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 19:30:44 +0000 UTC FinishedAt: 2026-08-26 19:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:30:44 +0000 UTC FinishedAt: 2026-08-26 19:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 19:30:44 +0000 UTC FinishedAt: 2026-08-26 19:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 19:30:44 +0000 UTC FinishedAt: 2026-08-26 19:51:28 +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:*21d042d1-659e-45fb-aa75-7ac31801fac7,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-workflow4lnwm/series-workflow4lnwm-convert-artifact-612337337/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": "4c55da77-b25d-4794-83ce-4d9e8804ea1a", "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-workflow4lnwm/series-workflow4lnwm-build-action-3912982421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:30:44 +0000 UTC FinishedAt: 2026-08-26 19:51:03 +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:*21d042d1-659e-45fb-aa75-7ac31801fac7,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-workflow4lnwm/series-workflow4lnwm-convert-artifact-612337337/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": "4c55da77-b25d-4794-83ce-4d9e8804ea1a", "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-workflow4lnwm/series-workflow4lnwm-build-action-3912982421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 19:51:28 +0000 UTC FinishedAt: 2026-08-26 19:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 19:51:28 +0000 UTC FinishedAt: 2026-08-26 19:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 19:51:28 +0000 UTC FinishedAt: 2026-08-26 19:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 19:51:28 +0000 UTC FinishedAt: 2026-08-26 19:53:27 +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:*4c55da77-b25d-4794-83ce-4d9e8804ea1a,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-workflow4lnwm/series-workflow4lnwm-build-action-3912982421/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-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"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:*e0d0bd95-ee82-4ee8-861a-e1a3b5db311f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c55da77-b25d-4794-83ce-4d9e8804ea1a,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-workflow4lnwm/series-workflow4lnwm-build-action-519035388/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-workflow4lnwm/series-workflow4lnwm-build-action-3912982421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 19:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 19:53:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"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-workflow4lnwm/series-workflow4lnwm-convert-artifact-3080575022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 19:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 19:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:53:37 +0000 UTC FinishedAt: 2026-08-26 19:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 19:53:47 +0000 UTC FinishedAt: 2026-08-26 23:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lnwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["befs_fill_super","befs_check_sb","befs_load_sb","befs_read_datastream","befs_fblock2brun","befs_check_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BEFS_FS"],"series_id":"2837ddaa-514a-46c2-b2d1-8424233fcc70","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 19:53:47 +0000 UTC FinishedAt: 2026-08-26 23:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0d0bd95-ee82-4ee8-861a-e1a3b5db311f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c55da77-b25d-4794-83ce-4d9e8804ea1a,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-workflow4lnwm/series-workflow4lnwm-build-action-519035388/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-workflow4lnwm/series-workflow4lnwm-build-action-3912982421/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-workflow4lnwm/series-workflow4lnwm-convert-artifact-3080575022/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,}