Name: series-workflowv46xd Phase: Succeeded StartedAt: 2026-08-25 12:59:46 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[0] Phase: Succeeded StartedAt: 2026-08-25 12:59:46 +0000 UTC FinishedAt: 2026-08-25 13:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 12:59:46 +0000 UTC FinishedAt: 2026-08-25 13:43:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FAT_FS", "MSDOS_FS", "VFAT_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FAT_FS", "MSDOS_FS", "VFAT_FS" ], "series_id": "bb64f7a6-c070-4fd1-8727-a9e3e4d0975b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fat_ent_write", "fat_chain_add", "fat_fallocate", "fat_setattr", "fat_add_entries" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICAgJiMzNDtmYXRfY2hhaW5fYWRkJiMzNDssCiAgICAmIzM0O2ZhdF9mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAgICYjMzQ7ZmF0X2FkZF9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSYjMzk7cyBgZmF0X2VudF93cml0ZWAgZnVuY3Rpb24gdG8gcHJvcGVybHkgcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzLiBJdCBwYXNzZXMgdGhlIG9sZCBjbHVzdGVyIHZhbHVlIChhbiBpbnRlZ2VyKSBhcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGFuZCBlcnJvci1oYW5kbGluZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDA6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oXG5pbmRleCA2MTMzODQxM2Q5ZjNlLi5mYmQyMDdjNTU4NTllIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmhcbkBAIC0zOTIsNyAmIzQzOzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0XHRcdGludCBlbnRyeSk7XG4gZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0XHQgaW50IG5ldywgaW50IHdhaXQpO1xuJiM0MztcdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcbiBcdFx0XHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XG4gZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXG5pbmRleCBmMDgwMWQ5OWRkNjJhLi5kZjIzZmM4NWYzMTMwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdGVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0ZW50LmNcbkBAIC00MTMsNyAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgZmF0X21pcnJvcl9iaHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLFxuIH1cbiBcbiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4tXHRcdCAgaW50IG5ldywgaW50IHdhaXQpXG4mIzQzO1x0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktXHUwMDNlZmF0ZW50X29wcztcbkBAIC00MjIsMTAgJiM0Mzs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xuIFx0aWYgKHdhaXQpIHtcbiBcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXG4mIzQzO1x0XHRcdCAqIGNhbiYjMzk7dCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXRcbiYjNDM7XHRcdFx0ICogd291bGQgbm90IGhhdmUgdmFsdWUgdG8gd3JpdGUgYWdhaW4gb24gSS9PXG4mIzQzO1x0XHRcdCAqIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdC8qIFRyeSB0byByZXZlcnQgaWYgZ290IHRoZSBlcnJvciBvbiBtaXJyb3IgRkFUICovXG4mIzQzO1x0XHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG9sZCk7XG4mIzQzO1x0XHRpZiAod2FpdClcbiYjNDM7XHRcdFx0ZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMWM4MzVjYTVmMjFhNS4uNmM0NzVjNTMzMzRjNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0zNjMsNyAmIzQzOzM2Myw4IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHRcdFx0XHQgICAgIF9fZnVuY19fLCBNU0RPU19JKGlub2RlKS1cdTAwM2VpX3Bvcyk7XG4gXHRcdFx0cmV0ID0gLUVJTztcbiBcdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCB3YWl0KTtcbiYjNDM7XHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xMzMsMTEgJiM0MzsxMzMsOSBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcilcbiBcdFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcdTAwMjZmYXRlbnQsIGxhc3QpO1xuIFx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIFx0XHRcdGludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7XG4tXHRcdFx0aW50IG9sZCA9IHJldDtcbiBcbi1cdFx0XHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIG5ld19kY2x1cywgd2FpdCk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgb2xkLCB3YWl0KTtcbiYjNDM7XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICB3YWl0KTtcbiBcdFx0XHRmYXRlbnRfYnJlbHNlKFx1MDAyNmZhdGVudCk7XG4gXHRcdH1cbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RkFUX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYXRfZW50X3dyaXRlJiMzNDssCiAgICAmIzM0O2ZhdF9jaGFpbl9hZGQmIzM0OywKICAgICYjMzQ7ZmF0X2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtmYXRfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDtmYXRfYWRkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNiYjJiZjRmOTI5ZTE5YWRkOWEwOWExZTE4YjI3NWMwZDM3ZTk2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oCmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmgKQEAgLTM5Miw3ICYjNDM7MzkyLDcgQEAgZXh0ZXJuIHZvaWQgZmF0X2VudF9hY2Nlc3NfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKIAkJCWludCBlbnRyeSk7CiBleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAotCQkJIGludCBuZXcsIGludCB3YWl0KTsKJiM0MzsJCQkgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpOwogZXh0ZXJuIGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLAogCQkJICAgICAgaW50IG5yX2NsdXN0ZXIpOwogZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0ZW50LmMgYi9mcy9mYXQvZmF0ZW50LmMKaW5kZXggZjA4MDFkOTlkZDYyYS4uZGYyM2ZjODVmMzEzMCAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdGVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9mYXRlbnQuYwpAQCAtNDEzLDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywKIH0KIAogaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAotCQkgIGludCBuZXcsIGludCB3YWl0KQomIzQzOwkJICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJY29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktJmd0O2ZhdGVudF9vcHM7CkBAIC00MjIsMTAgJiM0Mzs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAogCW9wcy0mZ3Q7ZW50X3B1dChmYXRlbnQsIG5ldyk7CiAJaWYgKHdhaXQpIHsKIAkJZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlCiYjNDM7CQkJICogY2FuJiMzOTt0IHNpbXBseSByZS1kaXJ0eSB0byByZXZlcnQuIEFuZCBpdAomIzQzOwkJCSAqIHdvdWxkIG5vdCBoYXZlIHZhbHVlIHRvIHdyaXRlIGFnYWluIG9uIEkvTwomIzQzOwkJCSAqIGVycm9yLgomIzQzOwkJCSAqLwogCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAl9Ci0JcmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtJmd0O2JocywgZmF0ZW50LSZndDtucl9iaHMpOwomIzQzOwomIzQzOwllcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJLyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi8KJiM0MzsJCW9wcy0mZ3Q7ZW50X3B1dChmYXRlbnQsIG9sZCk7CiYjNDM7CQlpZiAod2FpdCkKJiM0MzsJCQlmYXRfc3luY19iaHMoZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDFjODM1Y2E1ZjIxYTUuLjZjNDc1YzUzMzM0YzYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuYwpAQCAtMzYzLDcgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKQogCQkJCSAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLSZndDtpX3Bvcyk7CiAJCQlyZXQgPSAtRUlPOwogCQl9IGVsc2UgaWYgKHJldCAmZ3Q7IDApIHsKLQkJCWVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7CiYjNDM7CQkJZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsCiYjNDM7CQkJCQkgICAgd2FpdCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldCA9IGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvbWlzYy5jCkBAIC0xMzMsMTEgJiM0MzsxMzMsOSBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAkJcmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCAmYW1wO2ZhdGVudCwgbGFzdCk7CiAJCWlmIChyZXQgJmd0Oz0gMCkgewogCQkJaW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTsKLQkJCWludCBvbGQgPSByZXQ7CiAKLQkJCXJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBuZXdfZGNsdXMsIHdhaXQpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIG9sZCwgd2FpdCk7CiYjNDM7CQkJcmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIG5ld19kY2x1cywgcmV0LAomIzQzOwkJCQkJICAgIHdhaXQpOwogCQkJZmF0ZW50X2JyZWxzZSgmYW1wO2ZhdGVudCk7CiAJCX0KIAkJaWYgKHJldCAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRkFUIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIEZBVCBmaWxlc3lzdGVtLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IGFkZGluZyBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgIGluIGBmcy9mYXQvZmF0ZW50LmNgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHJldmVydCB0byB0aGUgcHJldmlvdXMgRkFUIGVudHJ5IHZhbHVlIGlmIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkYXRhIGludGVncml0eS4gVGhlIGBvbGRgIHBhcmFtZXRlciBpcyBhbHNvIGJlaW5nIHBhc3NlZCB0byBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAsIHN1Z2dlc3RpbmcgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIHBvdGVudGlhbGx5IGxldmVyYWdlIHRoZSBvbGQgdmFsdWUgdG9vLgoKVG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUsIEkgc2hvdWxkIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZXNlIGZ1bmN0aW9uczogYGZhdF9lbnRfd3JpdGVgLCBgZmF0X2ZyZWVgLCBhbmQgYGZhdF9jaGFpbl9hZGRgLiBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIEZBVCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoaWNoIEZBVCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX01TRE9TX0ZTYCwgYW5kIGBDT05GSUdfVkZBVF9GU2Agc2VlbSByZWxldmFudC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBmYXRfZW50X3dyaXRlYCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgdGhpcyBjaGFuZ2Ugd2lsbCBpbXBhY3QgdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9lbnRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9mYXQuaD0zOTI9ZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5My1cdFx0XHRpbnQgZW50cnkpO1xuZnMvZmF0L2ZhdC5oOjM5NDpleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5NS1cdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuLS1cbmZzL2ZhdC9mYXRlbnQuYz0zODA9c3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXG4tLVxuZnMvZmF0L2ZhdGVudC5jLTQxNC1cbmZzL2ZhdC9mYXRlbnQuYzo0MTU6aW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdGVudC5jLTQxNi1cdFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcbi0tXG5mcy9mYXQvZmlsZS5jPTMxMz1zdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuLS1cbmZzL2ZhdC9maWxlLmMtMzY1LVx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2UgMCkge1xuZnMvZmF0L2ZpbGUuYzozNjY6XHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuZnMvZmF0L2ZpbGUuYy0zNjctXHRcdFx0XHRcdCAgICB3YWl0KTtcbi0tXG5mcy9mYXQvbWlzYy5jPTEwNz1pbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcilcbi0tXG5mcy9mYXQvbWlzYy5jLTEzNi1cbmZzL2ZhdC9taXNjLmM6MTM3Olx0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXG5mcy9mYXQvbWlzYy5jLTEzOC1cdFx0XHRcdFx0ICAgIHdhaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGBmYXRfZW50X3dyaXRlYCwgYGZhdF9mcmVlYCwgYW5kIGBmYXRfY2hhaW5fYWRkYC4gVGhleSYjMzk7cmUgYWxsIG5lc3RsZWQgY29tZm9ydGFibHkgd2l0aGluIHRoZSBgZnMvZmF0L2AgZGlyZWN0b3J5LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIEZBVCBmaWxlc3lzdGVtIG1ldGFkYXRhIG1hbmlwdWxhdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gdGFibGUgdXBkYXRlcyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBvciBleHRlbmRpbmcgZGF0YSBjbHVzdGVycyBvbiB0aGUgZGlzay4gTm93LCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEZBVCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGtlcm5lbCBidWlsZC4gVGhpbmdzIGxpa2Ugd2hldGhlciBsb25nIGZpbGVuYW1lcyBhcmUgZW5hYmxlZCwgdGhlIEZBVCB2ZXJzaW9uIGJlaW5nIHVzZWQgKEZBVDEyLCBGQVQxNiwgRkFUMzIpLCBhbmQgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCB3b3VsZCBiZSByZWFsbHkgdXNlZnVsIHRvIGtub3cuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCBmb3IgYW5hbHl6aW5nIHRoZWlyIHVzZSBhbmQgaW1wbGVtZW50YXRpb24uIENoZWNraW5nIHRoZSBjb25maWdzIGZpcnN0IGdpdmVzIGEgdXNlZnVsLCBoaWdoLWxldmVsIHZpZXcgdGhhdCBJIGNhbiB1c2UgdG8gaGVscCBndWlkZSBteSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZmF0L0tjb25maWc6Mjpjb25maWcgRkFUX0ZTXG5mcy9mYXQvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRkFUIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyB6ZXJvIGluIG9uIGBmcy9mYXQvS2NvbmZpZ2AuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBGQVQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgRkFUIHdpdGhpbiB0aGlzIHN5c3RlbSwgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gaW5mbHVlbmNlIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbiB0byBtYWtlIGFueSBhZGp1c3RtZW50cyBlZmZlY3RpdmVseS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZhdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBGQVRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBOTFNcbiAgIDY6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIEZBVC1iYXNlZCBmaWxlIHN5c3RlbXMgKHRoZSBNUy1ET1MgYW5kXG4gICA5Olx0XHQgIFZGQVQgKFdpbmRvd3MgOTUpIGZpbGUgc3lzdGVtcyksIHRoZW4geW91IG11c3Qgc2F5IFkgb3IgTSBoZXJlXG4gIDEwOlx0XHQgIHRvIGluY2x1ZGUgRkFUIHN1cHBvcnQuIFlvdSB3aWxsIHRoZW4gYmUgYWJsZSB0byBtb3VudCBwYXJ0aXRpb25zIG9yXG4gIDExOlx0XHQgIGRpc2tldHRlcyB3aXRoIEZBVC1iYXNlZCBmaWxlIHN5c3RlbXMgYW5kIHRyYW5zcGFyZW50bHkgYWNjZXNzIHRoZVxuICAxMjpcdFx0ICBmaWxlcyBvbiB0aGVtLCBpLmUuIE1TRE9TIGZpbGVzIHdpbGwgbG9vayBhbmQgYmVoYXZlIGp1c3QgbGlrZSBhbGxcbiAgMTM6XHRcdCAgb3RoZXIgVW5peCBmaWxlcy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVGhpcyBGQVQgc3VwcG9ydCBpcyBub3QgYSBmaWxlIHN5c3RlbSBpbiBpdHNlbGYsIGl0IG9ubHkgcHJvdmlkZXNcbiAgMTY6XHRcdCAgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBvdGhlciBmaWxlIHN5c3RlbXMuIFlvdSB3aWxsIGhhdmUgdG8gc2F5IFkgb3JcbiAgMTc6XHRcdCAgTSB0byBhdCBsZWFzdCBvbmUgb2YgXCYjMzQ7TVNET1MgZnMgc3VwcG9ydFwmIzM0OyBvciBcJiMzNDtWRkFUIGZzIHN1cHBvcnRcJiMzNDsgaW5cbiAgMTg6XHRcdCAgb3JkZXIgdG8gbWFrZSB1c2Ugb2YgaXQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFub3RoZXIgd2F5IHRvIHJlYWQgYW5kIHdyaXRlIE1TRE9TIGZsb3BwaWVzIGFuZCBoYXJkIGRyaXZlXG4gIDIxOlx0XHQgIHBhcnRpdGlvbnMgZnJvbSB3aXRoaW4gTGludXggKGJ1dCBub3QgdHJhbnNwYXJlbnRseSkgaXMgd2l0aCB0aGVcbiAgMjI6XHRcdCAgbXRvb2xzIChcJiMzNDttYW4gbXRvb2xzXCYjMzQ7KSBwcm9ncmFtIHN1aXRlLiBZb3UgZG9uJiMzOTt0IG5lZWQgdG8gc2F5IFkgaGVyZSBpblxuICAyMzpcdFx0ICBvcmRlciB0byBkbyB0aGF0LlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB5b3UgbmVlZCB0byBtb3ZlIGxhcmdlIGZpbGVzIG9uIGZsb3BwaWVzIGJldHdlZW4gYSBET1MgYW5kIGFcbiAgMjY6XHRcdCAgTGludXggYm94LCBzYXkgWSBoZXJlLCBtb3VudCB0aGUgZmxvcHB5IHVuZGVyIExpbnV4IHdpdGggYW4gTVNET1NcbiAgMjc6XHRcdCAgZmlsZSBzeXN0ZW0gYW5kIHVzZSBHTlUgdGFyJiMzOTtzIE0gb3B0aW9uLiBHTlUgdGFyIGlzIGEgcHJvZ3JhbVxuICAyODpcdFx0ICBhdmFpbGFibGUgZm9yIFVuaXggYW5kIERPUyAoXCYjMzQ7bWFuIHRhclwmIzM0OyBvciBcJiMzNDtpbmZvIHRhclwmIzM0OykuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRoZSBGQVQgc3VwcG9ydCB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwgYnkgYWJvdXQgMzcgS0IuIElmIHVuc3VyZSxcbiAgMzE6XHRcdCAgc2F5IFkuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAzNDpcdFx0ICBmYXQuICBOb3RlIHRoYXQgaWYgeW91IGNvbXBpbGUgdGhlIEZBVCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB5b3VcbiAgMzU6XHRcdCAgY2Fubm90IGNvbXBpbGUgYW55IG9mIHRoZSBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zIGludG8gdGhlIGtlcm5lbFxuICAzNjpcdFx0ICAtLSB0aGV5IHdpbGwgaGF2ZSB0byBiZSBtb2R1bGVzIGFzIHdlbGwuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE1TRE9TX0ZTXG4gIDM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtNU0RPUyBmcyBzdXBwb3J0XCYjMzQ7XG4gIDQwOlx0XHRzZWxlY3QgRkFUX0ZTXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBNU0RPUyBwYXJ0aXRpb25zIG9mIHlvdXIgaGFyZCBkcml2ZSAodW5sZXNzXG4gIDQzOlx0XHQgIHRoZXkgYXJlIGNvbXByZXNzZWQ7IHRvIGFjY2VzcyBjb21wcmVzc2VkIE1TRE9TIHBhcnRpdGlvbnMgdW5kZXJcbiAgNDQ6XHRcdCAgTGludXgsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgRE9TIGVtdWxhdG9yIERPU0VNVSwgZGVzY3JpYmVkIGluIHRoZVxuICA0NTpcdFx0ICBET1NFTVUtSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gIDQ2Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZSwgb3IgdHJ5IGRtc2Rvc2ZzIGluXG4gIDQ3Olx0XHQgIFx1MDAzY2Z0cDovL2liaWJsaW8ub3JnL3B1Yi9MaW51eC9zeXN0ZW0vZmlsZXN5c3RlbXMvZG9zZnMvXHUwMDNlLiBJZiB5b3VcbiAgNDg6XHRcdCAgaW50ZW5kIHRvIHVzZSBkb3NlbXUgd2l0aCBhIG5vbi1jb21wcmVzc2VkIE1TRE9TIHBhcnRpdGlvbiwgc2F5IFlcbiAgNDk6XHRcdCAgaGVyZSkgYW5kIE1TRE9TIGZsb3BwaWVzLiBUaGlzIG1lYW5zIHRoYXQgZmlsZSBhY2Nlc3MgYmVjb21lc1xuICA1MDpcdFx0ICB0cmFuc3BhcmVudCwgaS5lLiB0aGUgTVNET1MgZmlsZXMgbG9vayBhbmQgYmVoYXZlIGp1c3QgbGlrZSBhbGxcbiAgNTE6XHRcdCAgb3RoZXIgVW5peCBmaWxlcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgSWYgeW91IGhhdmUgV2luZG93cyA5NSBvciBXaW5kb3dzIE5UIGluc3RhbGxlZCBvbiB5b3VyIE1TRE9TXG4gIDU0Olx0XHQgIHBhcnRpdGlvbnMsIHlvdSBzaG91bGQgdXNlIHRoZSBWRkFUIGZpbGUgc3lzdGVtIChzYXkgWSB0byBcJiMzNDtWRkFUIGZzXG4gIDU1Olx0XHQgIHN1cHBvcnRcJiMzNDsgYmVsb3cpLCBvciB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzZWUgdGhlIGxvbmcgZmlsZW5hbWVzXG4gIDU2Olx0XHQgIGdlbmVyYXRlZCBieSBXaW5kb3dzIDk1IC8gV2luZG93cyBOVC5cbiAgNTc6XHRcbiAgNTg6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmxhcmdlIHlvdXIga2VybmVsIGJ5IGFib3V0IDcgS0IuIElmIHVuc3VyZSxcbiAgNTk6XHRcdCAgYW5zd2VyIFkuIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IHNhaWQgWSB0byBcJiMzNDtET1MgRkFUIGZzIHN1cHBvcnRcJiMzNDtcbiAgNjA6XHRcdCAgYXMgd2VsbC4gVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNjE6XHRcdCAgYmUgY2FsbGVkIG1zZG9zLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBWRkFUX0ZTXG4gIDY0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XCYjMzQ7XG4gIDY1Olx0XHRzZWxlY3QgRkFUX0ZTXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIG5vcm1hbCBXaW5kb3dzIGZpbGUgc3lzdGVtcyB3aXRoXG4gIDY4Olx0XHQgIGxvbmcgZmlsZW5hbWVzLiAgVGhhdCBpbmNsdWRlcyBub24tY29tcHJlc3NlZCBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zXG4gIDY5Olx0XHQgIHVzZWQgYnkgV2luZG93cyA5NSwgV2luZG93cyA5OCwgV2luZG93cyBOVCA0LjAsIGFuZCB0aGUgVW5peFxuICA3MDpcdFx0ICBwcm9ncmFtcyBmcm9tIHRoZSBtdG9vbHMgcGFja2FnZS5cbiAgNzE6XHRcbiAgNzI6XHRcdCAgVGhlIFZGQVQgc3VwcG9ydCBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxMCBLQiBhbmQgaXQgb25seVxuICA3MzpcdFx0ICB3b3JrcyBpZiB5b3Ugc2FpZCBZIHRvIHRoZSBcJiMzNDtET1MgRkFUIGZzIHN1cHBvcnRcJiMzNDsgYWJvdmUuICBQbGVhc2UgcmVhZFxuICA3NDpcdFx0ICB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3RcdTAwM2UgZm9yIGRldGFpbHMuICBJZlxuICA3NTpcdFx0ICB1bnN1cmUsIHNheSBZLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNzg6XHRcdCAgdmZhdC5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgRkFUX0RFRkFVTFRfQ09ERVBBR0VcbiAgODE6XHRcdGludCBcJiMzNDtEZWZhdWx0IGNvZGVwYWdlIGZvciBGQVRcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gRkFUX0ZTXG4gIDgzOlx0XHRkZWZhdWx0IDQzN1xuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZSBjb2RlcGFnZSBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcy5cbiAgODY6XHRcdCAgSXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgXCYjMzQ7Y29kZXBhZ2VcJiMzNDsgbW91bnQgb3B0aW9uLlxuICA4NzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICA4ODpcdFxuICA4OTpcdGNvbmZpZyBGQVRfREVGQVVMVF9JT0NIQVJTRVRcbiAgOTA6XHRcdHN0cmluZyBcJiMzNDtEZWZhdWx0IGlvY2hhcnNldCBmb3IgRkFUXCYjMzQ7XG4gIDkxOlx0XHRkZXBlbmRzIG9uIFZGQVRfRlNcbiAgOTI6XHRcdGRlZmF1bHQgXCYjMzQ7aXNvODg1OS0xXCYjMzQ7XG4gIDkzOlx0XHRoZWxwXG4gIDk0Olx0XHQgIFNldCB0aGlzIHRvIHRoZSBkZWZhdWx0IGlucHV0L291dHB1dCBjaGFyYWN0ZXIgc2V0IHlvdSYjMzk7ZFxuICA5NTpcdFx0ICBsaWtlIEZBVCB0byB1c2UuIEl0IHNob3VsZCBwcm9iYWJseSBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldFxuICA5NjpcdFx0ICB0aGF0IG1vc3Qgb2YgeW91ciBGQVQgZmlsZXN5c3RlbXMgdXNlLCBhbmQgY2FuIGJlIG92ZXJyaWRkZW5cbiAgOTc6XHRcdCAgd2l0aCB0aGUgXCYjMzQ7aW9jaGFyc2V0XCYjMzQ7IG1vdW50IG9wdGlvbiBmb3IgRkFUIGZpbGVzeXN0ZW1zLlxuICA5ODpcdFx0ICBOb3RlIHRoYXQgXCYjMzQ7dXRmOFwmIzM0OyBpcyBub3QgcmVjb21tZW5kZWQgZm9yIEZBVCBmaWxlc3lzdGVtcy5cbiAgOTk6XHRcdCAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkbiYjMzk7dCBzZXQgXCYjMzQ7dXRmOFwmIzM0OyBoZXJlIC0gc2VsZWN0IHRoZSBuZXh0IG9wdGlvblxuIDEwMDpcdFx0ICBpbnN0ZWFkIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBVVEYtOCBlbmNvZGVkIGZpbGUgbmFtZXMgYnkgZGVmYXVsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBhbmQgZnVuY3Rpb25zLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd24gdGhvdWdodHMsIGdpdmVuIG15IGRlZXAgZGl2ZSBpbnRvIHRoaXMgYXJlYToKCioqRGlnZ2luZyBpbnRvIHRoZSBGQVQgRmlsZSBTeXN0ZW0qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBGaWxlIEFsbG9jYXRpb24gVGFibGUgKEZBVCkgZmlsZSBzeXN0ZW0gc3R1ZmYuIFNwZWNpZmljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zIG1lbnRpb25lZCBhcmUgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgLiBTdHJhaWdodCBhd2F5LCB0aG9zZSB0ZWxsIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIGJyb2FkIGNvbXBhdGliaWxpdHkuIGBNU0RPU19GU2AgaXMgdGhlIGNsYXNzaWMsIHRoZSBncmFuZGRhZGR5IG9mIEZBVCwgd2hpbGUgYFZGQVRfRlNgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGxvbmcgZmlsZW5hbWVzIGV4dGVuc2lvbiwgcHJvYmFibHkgV2luZG93cy1yZWxhdGVkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBkaWZmZXJlbmNlcyBpbiBtZXRhZGF0YSBhbmQgbGltaXRhdGlvbnMgYmV0d2VlbiB0aGVtLgoKTm93LCBvbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucy4gV2UmIzM5O3ZlIGdvdCBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBGQVQgbWFuaXB1bGF0aW9uLiBgZmF0X2VudF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgRkFUIGl0c2VsZuKAlHdyaXRpbmcgdGhlIGNsdXN0ZXIgbnVtYmVycyB0aGF0IGRlZmluZSBmaWxlIGFsbG9jYXRpb24uIEl04oCZcyB0aGUgaGVhcnQgb2YgaG93IHdlIGxpbmsgZGF0YSBzZWN0b3JzLiBgZmF0X2ZyZWVgLCBubyBzdXJwcmlzZXMgdGhlcmUsIGxpa2VseSBtYXJrcyBhIGNsdXN0ZXIgYXMgYXZhaWxhYmxlIGZvciByZXVzZSwgYW5kLCBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCAqbXVzdCogaGFuZGxlIGVkZ2UgY2FzZXMgY2FyZWZ1bGx54oCUd2hhdCBpZiBpdCYjMzk7cyB0aGUgbGFzdCBjbHVzdGVyIGluIGEgZmlsZT8gSXMgdGhlcmUgYW55IHdyaXRlLWJhY2s/IFRoZSB0aGlyZCwgYGZhdF9jaGFpbl9hZGRgLCB3ZWxsLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiB0aGF0IGV4dGVuZHMgYW4gZXhpc3RpbmcgZmlsZSBvciBjcmVhdGVzIGEgbmV3IG9uZSBieSBhZGRpbmcgY2x1c3RlcnMgdG8gaXRzIGNoYWluLiBUaGlzIG9uZSBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZpbGVzIGdyb3cuIEkmIzM5O2QgbmVlZCB0byBleGFtaW5lIHRoaXMgZm9yIGZyYWdtZW50YXRpb24gaXNzdWVzLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gSSYjMzk7dmUgZ290IHRvIGNoZWNrLiBJcyBgZmF0X2VudF93cml0ZWAgZXhwb3J0ZWQ/IFRoYXQgd291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IHRlbGxzIG1lIGl0JiMzOTtzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tICpvdXRzaWRlKiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gVGhhdCBjb3VsZCBtZWFuIGl0JiMzOTtzIGEgY3JpdGljYWwgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgZGVwZW5kIG9uLiBTbywgaXMgaXQ/IEJldHRlciBtYWtlIHN1cmUgSSBjYW4gdHJhY2sgZG93biBpdHMgdXNlIGFuZCBiZWhhdmlvciB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipmYXRfZW50X3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBDcm9zcy1GaWxlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGhpbmcgaXNuJiMzOTt0IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNyb3NzLWZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHVzZWQgKmludGVybmFsbHkqIHdpdGhpbiB0aGUgcHJvamVjdCBzY29wZSwgYnV0IG5vdCBtYWRlIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aG9zZSBmdW5jdGlvbnMsIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCwgYXJlIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCByZWxpZXMgb24gdGhlbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZmFjdCB0aGF0IGl0IGlzbiYjMzk7dCBleHBvcnRlZCBjb3VsZCBzdWdnZXN0IGEgZmV3IHRoaW5nczogaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaXQmIzM5O3MgcGFydCBvZiBhIG1vZHVsZSB3aXRoIGEgZGVmaW5lZCBwdWJsaWMgaW50ZXJmYWNlLCBvciB0aGVyZSYjMzk7cyBhIGRlc2lnbiBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqIHdpdGggdGhvc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZhdF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvZmF0ZW50LmM9NTc0PWludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcilcbi0tXG5mcy9mYXQvZmF0ZW50LmMtNjU0LX1cbmZzL2ZhdC9mYXRlbnQuYzo2NTU6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X2ZyZWVfY2x1c3RlcnMpO1xuZnMvZmF0L2ZhdGVudC5jLTY1Ni1cbi0tXG5mcy9mYXQvaW5vZGUuYz0xOTg2PXZvaWQgZmF0X2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2ZhdC9pbm9kZS5jLTE5OTMtfVxuZnMvZmF0L2lub2RlLmM6MTk5NDpFWFBPUlRfU1lNQk9MX0dQTChmYXRfZnJlZV9mYyk7XG5mcy9mYXQvaW5vZGUuYy0xOTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBGQVQgRmlsZXN5c3RlbSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIHRoZSBGQVQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGZpbGUgb3BlcmF0aW9ucy4gSSBzZWUgYGZhdF9mcmVlYCAtIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYGZpbGUuY2Agc291cmNlIGZpbGUgaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlbHkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgaW50ZXJuYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluLCB3ZWxsLCBmcmVlaW5nIHNvbWUgc29ydCBvZiByZXNvdXJjZS4gQ291bGQgYmUgY2x1c3RlcnMsIGZpbGUgbWV0YWRhdGEuLi4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8ga25vdyBmb3Igc3VyZSwgYnV0IHRoZSBuYW1lIGdpdmVzIGEgcHJldHR5IHN0cm9uZyBoaW50LgoKVGhlbiB0aGVyZSYjMzk7cyBgZmF0X2NoYWluX2FkZGAuIFRoYXQmIzM5O3MgaW4gYG1pc2MuY2AsIGFnYWluLCB3aXRoaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gVGhlICYjMzQ7Y2hhaW4mIzM0OyBwYXJ0IG9mIHRoZSBuYW1lIGlzIGltcG9ydGFudCBpbiBGQVQgYmVjYXVzZSB0aGUgZmlsZXN5c3RlbSB1c2VzIGEgbGlua2VkIGxpc3Qgb2YgY2x1c3RlciBudW1iZXJzIHRvIHJlcHJlc2VudCBhIGZpbGUmIzM5O3MgZGF0YS4gQWRkaW5nIHRvIGEgJiMzNDtjaGFpbiYjMzQ7IHByb2JhYmx5IG1lYW5zIGFwcGVuZGluZyBhIG5ldyBjbHVzdGVyIChvciBhIHNlcmllcyBvZiBjbHVzdGVycykgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZpbGUuIFNpbmNlIGl0JiMzOTtzIGluIGBtaXNjLmNgLCBJJiMzOTtkIGd1ZXNzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcm92aWRpbmcgYSBnZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSB0byB0aGUgZmlsZXN5c3RlbSBjb2RlLgoKU28sIGluIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcuLi4gYGZhdF9mcmVlYCBsaWtlbHkgaGFuZGxlcyBmcmVlaW5nIHVwIGNsdXN0ZXIgY2hhaW5zIG9yIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIGEgZmlsZSBlbnRyeSwgd2hpbGUgYGZhdF9jaGFpbl9hZGRgIHByb2JhYmx5IGFwcGVuZHMgYmxvY2tzIChjbHVzdGVycykgb2YgZGF0YSB0byBhIGZpbGUuIE9uZSBmcmVlcywgdGhlIG90aGVyIGFkZHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgY2VydGFpbiwgYnV0IHRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZmF0X2NoYWluX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGZhdF9jaGFpbl9hZGRgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBpcyB0aGlzIGBmYXRfY2hhaW5fYWRkYCBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lwaGVyIGhvdyBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZS4gSSBhbnRpY2lwYXRlIHRoZSB1c2FnZSBwYXR0ZXJuIHdpbGwgZGljdGF0ZSB3aGF0IGtpbmQgb2YgYW5hbHlzaXMgSSYjMzk7bGwgbmVlZC4gSWYgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gYSBoZWF2aWx5IHVzZWQgcGF0aCwgSSYjMzk7bGwgcGF5IGNsb3NlciBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9jaGFpbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9kaXIuYz0xMzIxPWludCBmYXRfYWRkX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHZvaWQgKnNsb3RzLCBpbnQgbnJfc2xvdHMsXG4tLVxuZnMvZmF0L2Rpci5jLTE0MzQtXHRcdH1cbmZzL2ZhdC9kaXIuYzoxNDM1Olx0XHRlcnIgPSBmYXRfY2hhaW5fYWRkKGRpciwgY2x1c3RlciwgbnJfY2x1c3Rlcik7XG5mcy9mYXQvZGlyLmMtMTQzNi1cdFx0aWYgKGVycikge1xuLS1cbmZzL2ZhdC9mYXQuaD00NjY9ZXh0ZXJuIGludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9mYXQvZmF0Lmg6NDY3OmV4dGVybiBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcik7XG5mcy9mYXQvZmF0LmgtNDY4LWV4dGVybiB2b2lkIGZhdF90aW1lX2ZhdDJ1bml4KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5mcy9mYXQvaW5vZGUuYz0xMDQ9aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2ZhdC9pbm9kZS5jLTExMi1cdCAqIGNsdXN0ZXIgaXMgd3JpdGVkICovXG5mcy9mYXQvaW5vZGUuYzoxMTM6XHRlcnIgPSBmYXRfY2hhaW5fYWRkKGlub2RlLCBjbHVzdGVyLCAxKTtcbmZzL2ZhdC9pbm9kZS5jLTExNC1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L21pc2MuYz02OD1pbnQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZmF0L21pc2MuYy0xMDMtLypcbmZzL2ZhdC9taXNjLmM6MTA0OiAqIGZhdF9jaGFpbl9hZGQoKSBhZGRzIGEgbmV3IGNsdXN0ZXIgdG8gdGhlIGNoYWluIG9mIGNsdXN0ZXJzIHJlcHJlc2VudGVkXG5mcy9mYXQvbWlzYy5jLTEwNS0gKiBieSBpbm9kZS5cbmZzL2ZhdC9taXNjLmMtMTA2LSAqL1xuZnMvZmF0L21pc2MuYzoxMDc6aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG5mcy9mYXQvbWlzYy5jLTEwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRkFUIENsdXN0ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBGQVQgZmlsZXN5c3RlbSBoYW5kbGVzIGNsdXN0ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIGFuZCBmcmVlaW5nIG9mIHRoZW0uIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYm90aCByZWx5IG9uIGBmYXRfY2hhaW5fYWRkYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0IHBvaW50cyB0byBhIGNvbW1vbiBjb3JlIGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgZmlsZSBzcGFjZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnJlZWluZyBwcm9jZXNzLCBiZWNhdXNlIHRoYXQmIzM5O3MganVzdCBhcyBpbXBvcnRhbnQgZm9yIG1haW50YWluaW5nIGZpbGUgc3lzdGVtIGludGVncml0eS4gSXQgbG9va3MgbGlrZSBgZmF0X2ZyZWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBhc3BlY3QuIEkgc2hvdWxkIGNoZWNrIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIHdpbGwgemVybyBpbiBvbiBgZnMvZmF0L2ZpbGUuY2AgdG8gc2VlIHdoZXJlIHRoZSBgZmF0X2ZyZWVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGNhbGxzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBmaWxlcyBhcmUgZGVsZXRlZCBvciB0cnVuY2F0ZWQsIGFuZCBob3cgdGhlIEZBVCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9maWxlLmM9MjYzPXN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxuLS1cbmZzL2ZhdC9maWxlLmMtMzEyLS8qIEZyZWUgYWxsIGNsdXN0ZXJzIGFmdGVyIHRoZSBza2lwJiMzOTt0aCBjbHVzdGVyLiAqL1xuZnMvZmF0L2ZpbGUuYzozMTM6c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbmZzL2ZhdC9maWxlLmMtMzE0LXtcbi0tXG5mcy9mYXQvZmlsZS5jLTM3OS1cdC8qIEZyZWVpbmcgdGhlIHJlbWFpbmVkIGNsdXN0ZXIgY2hhaW4gKi9cbmZzL2ZhdC9maWxlLmM6MzgwOlx0cmV0dXJuIGZhdF9mcmVlX2NsdXN0ZXJzKGlub2RlLCBmcmVlX3N0YXJ0KTtcbmZzL2ZhdC9maWxlLmMtMzgxLX1cbi0tXG5mcy9mYXQvZmlsZS5jPTM4Mz12b2lkIGZhdF90cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldClcbi0tXG5mcy9mYXQvZmlsZS5jLTM5Ny1cbmZzL2ZhdC9maWxlLmM6Mzk4Olx0ZmF0X2ZyZWUoaW5vZGUsIG5yX2NsdXN0ZXJzKTtcbmZzL2ZhdC9maWxlLmMtMzk5LVx0ZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgRkFUIEZpbGVzeXN0ZW0gQmxvY2sgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZmF0X3RydW5jYXRlX2Jsb2Nrc2AgbGV2ZXJhZ2VzIGBmYXRfZnJlZWAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCAtIHRydW5jYXRpb24gcmVsaWVzIG9uIGZyZWVpbmcgdXAgYmxvY2tzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byBgZmF0X2VudF93cml0ZWAuIFRoaXMgc2VlbXMgY3J1Y2lhbCwgYXBwZWFyaW5nIGluIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIElzIGBmYXRfZW50X3dyaXRlYCB0cnVseSB1c2VkIHdpdGhpbiBgZmF0X2ZyZWVgPyBBbmQsIGlzIGl0IGFsc28gYmVpbmcgdXNlZCB3aXRoaW4gYGZhdF9jaGFpbl9hZGRgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYD8gVGhpcyByZXF1aXJlcyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgRkFUIChGaWxlIEFsbG9jYXRpb24gVGFibGUpIGVudHJpZXMgdGhlbXNlbHZlcywgYW5kIGFyZSwgdGhlcmVmb3JlLCBjYWxsZWQgZHVyaW5nIHNldmVyYWwgZGlmZmVyZW50IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3Nlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGFuZCBrZWVwcyB0cmFjayBvZiBhbGxvY2F0ZWQgYW5kIGZyZWUgY2x1c3RlcnMgb24gYSBGQVQgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZhdC5oPTM5Mj1leHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0LmgtMzkzLVx0XHRcdGludCBlbnRyeSk7XG5mcy9mYXQvZmF0Lmg6Mzk0OmV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0LmgtMzk1LVx0XHRcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XG4tLVxuZnMvZmF0L2ZhdGVudC5jPTM4MD1zdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcbi0tXG5mcy9mYXQvZmF0ZW50LmMtNDE0LVxuZnMvZmF0L2ZhdGVudC5jOjQxNTppbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0ZW50LmMtNDE2LVx0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuLS1cbmZzL2ZhdC9maWxlLmM9MzEzPXN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4tLVxuZnMvZmF0L2ZpbGUuYy0zNjUtXHRcdH0gZWxzZSBpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9mYXQvZmlsZS5jOjM2NjpcdFx0XHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXG5mcy9mYXQvZmlsZS5jLTM2Ny1cdFx0XHRcdFx0ICAgIHdhaXQpO1xuLS1cbmZzL2ZhdC9taXNjLmM9MTA3PWludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuLS1cbmZzL2ZhdC9taXNjLmMtMTM2LVxuZnMvZmF0L21pc2MuYzoxMzc6XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbmZzL2ZhdC9taXNjLmMtMTM4LVx0XHRcdFx0XHQgICAgd2FpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBmYXRfZW50X3dyaXRlYCBhbmQgaXQgc2VlbXMgbGlrZSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIGluY29tcGxldGUuIFRoaXMgcm91dGluZSBzZWVtcyB0byBiZSBwcmltYXJpbHkgdXRpbGl6ZWQgaW4gYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLCBidXQgSSYjMzk7bSBjZXJ0YWluIGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLgoKV2hhdCBhYm91dCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBhbmQgYGZhdF9mcmVlX2NsdXN0ZXJzYD8gU3VyZWx5IHRoZXkmIzM5O3JlIGludm9sdmVkIGluIG1vZGlmeWluZyBGQVQgZW50cmllcy4gVGhpcyByZXF1aXJlcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdmVybGFwIGluIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZhdF9hbGxvY19jbHVzdGVyc2Agbm93LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy9mYXQvZmF0ZW50LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIGdpdmVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB3cml0ZSBGQVQgZW50cmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2FsbG9jX2NsdXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvZGlyLmM9MTE3Mz1pbnQgZmF0X2FsbG9jX25ld19kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5mcy9mYXQvZGlyLmMtMTE4My1cbmZzL2ZhdC9kaXIuYzoxMTg0Olx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGRpciwgXHUwMDI2Y2x1c3RlciwgMSk7XG5mcy9mYXQvZGlyLmMtMTE4NS1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxuLS1cbmZzL2ZhdC9kaXIuYy0xMjU3LVxuZnMvZmF0L2Rpci5jOjEyNTg6XHRlcnIgPSBmYXRfYWxsb2NfY2x1c3RlcnMoZGlyLCBjbHVzdGVyLCAqbnJfY2x1c3Rlcik7XG5mcy9mYXQvZGlyLmMtMTI1OS1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2ZhdC5oPTM5ND1leHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5NS1cdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuZnMvZmF0L2ZhdC5oOjM5NjpleHRlcm4gaW50IGZhdF9hbGxvY19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmNsdXN0ZXIsXG5mcy9mYXQvZmF0LmgtMzk3LVx0XHRcdCAgICAgIGludCBucl9jbHVzdGVyKTtcbi0tXG5mcy9mYXQvZmF0ZW50LmM9NDY4PXN0YXRpYyB2b2lkIGZhdF9jb2xsZWN0X2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCAqbnJfYmhzLFxuLS1cbmZzL2ZhdC9mYXRlbnQuYy00ODUtXG5mcy9mYXQvZmF0ZW50LmM6NDg2OmludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcbmZzL2ZhdC9mYXRlbnQuYy00ODcte1xuLS1cbmZzL2ZhdC9pbm9kZS5jPTEwND1pbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZmF0L2lub2RlLmMtMTA3LVxuZnMvZmF0L2lub2RlLmM6MTA4Olx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGlub2RlLCBcdTAwMjZjbHVzdGVyLCAxKTtcbmZzL2ZhdC9pbm9kZS5jLTEwOS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGluIGBmcy9mYXQvZmF0ZW50LmNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmYXRfYWxsb2NfY2x1c3RlcnNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNsdXN0ZXIgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRkFUIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGZhdF9hbGxvY19jbHVzdGVyc2AgZnVuY3Rpb24gbG9jYXRlZCBpbiBgZnMvZmF0L2ZhdGVudC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGludHJpY2FjaWVzIG9mIGZpbmRpbmcgZnJlZSBjbHVzdGVycyBvbiB0aGUgZGlzaywgbWFya2luZyB0aGVtIGFzIGFsbG9jYXRlZCBpbiB0aGUgRkFULCBwb3RlbnRpYWxseSBleHRlbmRpbmcgdGhlIGZpbGUgc2l6ZSwgYW5kIG1hbmFnaW5nIGFueSBjaGFpbiBvZiBjbHVzdGVycy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGZyYWdtZW50YXRpb24gb3IgdGhlIHNwZWVkIG9mIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIFRpbWUgdG8gZ2V0IGNvZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mYXQvZmF0ZW50LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODY6XHRpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlciwgaW50IG5yX2NsdXN0ZXIpXG4gNDg3Olx0e1xuIDQ4ODpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gNDg5Olx0XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuIDQ5MDpcdFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBzYmktXHUwMDNlZmF0ZW50X29wcztcbiA0OTE6XHRcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50LCBwcmV2X2VudDtcbiA0OTI6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xuIDQ5MzpcdFx0aW50IGksIGNvdW50LCBlcnIsIG5yX2JocywgaWR4X2NsdXM7XG4gNDk0Olx0XG4gNDk1Olx0XHRCVUdfT04obnJfY2x1c3RlciBcdTAwM2UgKE1BWF9CVUZfUEVSX1BBR0UgLyAyKSk7XHQvKiBmaXhlZCBsaW1pdCAqL1xuIDQ5NjpcdFxuIDQ5NzpcdFx0bG9ja19mYXQoc2JpKTtcbiA0OTg6XHRcdGlmIChzYmktXHUwMDNlZnJlZV9jbHVzdGVycyAhPSAtMSBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZWZyZWVfY2x1c192YWxpZCBcdTAwMjZcdTAwMjZcbiA0OTk6XHRcdCAgICBzYmktXHUwMDNlZnJlZV9jbHVzdGVycyBcdTAwM2MgbnJfY2x1c3Rlcikge1xuIDUwMDpcdFx0XHR1bmxvY2tfZmF0KHNiaSk7XG4gNTAxOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuIDUwMjpcdFx0fVxuIDUwMzpcdFxuIDUwNDpcdFx0ZXJyID0gbnJfYmhzID0gaWR4X2NsdXMgPSAwO1xuIDUwNTpcdFx0Y291bnQgPSBGQVRfU1RBUlRfRU5UO1xuIDUwNjpcdFx0ZmF0ZW50X2luaXQoXHUwMDI2cHJldl9lbnQpO1xuIDUwNzpcdFx0ZmF0ZW50X2luaXQoXHUwMDI2ZmF0ZW50KTtcbiA1MDg6XHRcdGZhdGVudF9zZXRfZW50cnkoXHUwMDI2ZmF0ZW50LCBzYmktXHUwMDNlcHJldl9mcmVlICYjNDM7IDEpO1xuIDUwOTpcdFx0d2hpbGUgKGNvdW50IFx1MDAzYyBzYmktXHUwMDNlbWF4X2NsdXN0ZXIpIHtcbiA1MTA6XHRcdFx0aWYgKGZhdGVudC5lbnRyeSBcdTAwM2U9IHNiaS1cdTAwM2VtYXhfY2x1c3RlcilcbiA1MTE6XHRcdFx0XHRmYXRlbnQuZW50cnkgPSBGQVRfU1RBUlRfRU5UO1xuIDUxMjpcdFx0XHRmYXRlbnRfc2V0X2VudHJ5KFx1MDAyNmZhdGVudCwgZmF0ZW50LmVudHJ5KTtcbiA1MTM6XHRcdFx0ZXJyID0gZmF0X2VudF9yZWFkX2Jsb2NrKHNiLCBcdTAwMjZmYXRlbnQpO1xuIDUxNDpcdFx0XHRpZiAoZXJyKVxuIDUxNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDUxNjpcdFxuIDUxNzpcdFx0XHQvKiBGaW5kIHRoZSBmcmVlIGVudHJpZXMgaW4gYSBibG9jayAqL1xuIDUxODpcdFx0XHRkbyB7XG4gNTE5Olx0XHRcdFx0aWYgKG9wcy1cdTAwM2VlbnRfZ2V0KFx1MDAyNmZhdGVudCkgPT0gRkFUX0VOVF9GUkVFKSB7XG4gNTIwOlx0XHRcdFx0XHRpbnQgZW50cnkgPSBmYXRlbnQuZW50cnk7XG4gNTIxOlx0XG4gNTIyOlx0XHRcdFx0XHQvKiBtYWtlIHRoZSBjbHVzdGVyIGNoYWluICovXG4gNTIzOlx0XHRcdFx0XHRvcHMtXHUwMDNlZW50X3B1dChcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GKTtcbiA1MjQ6XHRcdFx0XHRcdGlmIChwcmV2X2VudC5ucl9iaHMpXG4gNTI1Olx0XHRcdFx0XHRcdG9wcy1cdTAwM2VlbnRfcHV0KFx1MDAyNnByZXZfZW50LCBlbnRyeSk7XG4gNTI2Olx0XG4gNTI3Olx0XHRcdFx0XHRmYXRfY29sbGVjdF9iaHMoYmhzLCBcdTAwMjZucl9iaHMsIFx1MDAyNmZhdGVudCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRcdFx0XHRzYmktXHUwMDNlcHJldl9mcmVlID0gZW50cnk7XG4gNTMwOlx0XHRcdFx0XHRpZiAoc2JpLVx1MDAzZWZyZWVfY2x1c3RlcnMgIT0gLTEpXG4gNTMxOlx0XHRcdFx0XHRcdHNiaS1cdTAwM2VmcmVlX2NsdXN0ZXJzLS07XG4gNTMyOlx0XG4gNTMzOlx0XHRcdFx0XHRjbHVzdGVyW2lkeF9jbHVzXSA9IGVudHJ5O1xuIDUzNDpcdFx0XHRcdFx0aWR4X2NsdXMmIzQzOyYjNDM7O1xuIDUzNTpcdFx0XHRcdFx0aWYgKGlkeF9jbHVzID09IG5yX2NsdXN0ZXIpXG4gNTM2Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDUzNzpcdFxuIDUzODpcdFx0XHRcdFx0LypcbiA1Mzk6XHRcdFx0XHRcdCAqIGZhdF9jb2xsZWN0X2JocygpIGdldHMgcmVmLWNvdW50IG9mIGJocyxcbiA1NDA6XHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHByZXZfZW50LlxuIDU0MTpcdFx0XHRcdFx0ICovXG4gNTQyOlx0XHRcdFx0XHRwcmV2X2VudCA9IGZhdGVudDtcbiA1NDM6XHRcdFx0XHR9XG4gNTQ0Olx0XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuIDU0NTpcdFx0XHRcdGlmIChjb3VudCA9PSBzYmktXHUwMDNlbWF4X2NsdXN0ZXIpXG4gNTQ2Olx0XHRcdFx0XHRicmVhaztcbiA1NDc6XHRcdFx0fSB3aGlsZSAoZmF0X2VudF9uZXh0KHNiaSwgXHUwMDI2ZmF0ZW50KSk7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHQvKiBDb3VsZG4mIzM5O3QgYWxsb2NhdGUgdGhlIGZyZWUgZW50cmllcyAqL1xuIDU1MTpcdFx0c2JpLVx1MDAzZWZyZWVfY2x1c3RlcnMgPSAwO1xuIDU1MjpcdFx0c2JpLVx1MDAzZWZyZWVfY2x1c192YWxpZCA9IDE7XG4gNTUzOlx0XHRlcnIgPSAtRU5PU1BDO1xuIDU1NDpcdFxuIDU1NTpcdG91dDpcbiA1NTY6XHRcdHVubG9ja19mYXQoc2JpKTtcbiA1NTc6XHRcdG1hcmtfZnNpbmZvX2RpcnR5KHNiKTtcbiA1NTg6XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiA1NTk6XHRcdGlmICghZXJyKSB7XG4gNTYwOlx0XHRcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcbiA1NjE6XHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBucl9iaHMpO1xuIDU2MjpcdFx0XHRpZiAoIWVycilcbiA1NjM6XHRcdFx0XHRlcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgYmhzLCBucl9iaHMpO1xuIDU2NDpcdFx0fVxuIDU2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYmhzOyBpJiM0MzsmIzQzOylcbiA1NjY6XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gNTY3Olx0XG4gNTY4Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpZHhfY2x1cylcbiA1Njk6XHRcdFx0ZmF0X2ZyZWVfY2x1c3RlcnMoaW5vZGUsIGNsdXN0ZXJbMF0pO1xuIDU3MDpcdFxuIDU3MTpcdFx0cmV0dXJuIGVycjtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0aW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKVxuIDU3NTpcdHtcbiA1NzY6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIDU3NzpcdFx0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTtcbiA1Nzg6XHRcdGNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gc2JpLVx1MDAzZWZhdGVudF9vcHM7XG4gNTc5Olx0XHRzdHJ1Y3QgZmF0X2VudHJ5IGZhdGVudDtcbiA1ODA6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xuIDU4MTpcdFx0aW50IGksIGVyciwgbnJfYmhzO1xuIDU4MjpcdFx0aW50IGZpcnN0X2NsID0gY2x1c3RlciwgZGlydHlfZnNpbmZvID0gMDtcbiA1ODM6XHRcbiA1ODQ6XHRcdG5yX2JocyA9IDA7XG4gNTg1Olx0XHRmYXRlbnRfaW5pdChcdTAwMjZmYXRlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uOiBpdCBjaGFuZ2VzIGhvdyBlcnJvciBoYW5kbGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGZhdF9taXJyb3JfYmhzYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uIGhhcyBhIHNpbWlsYXIgcGF0dGVybiwgY2FsbGluZyBgZmF0X21pcnJvcl9iaHNgIGJ1dCBpdCAqZG9lc24mIzM5O3QqIHJldmVydCBjaGFuZ2VzIG9uIGZhaWx1cmUuIEl0IGp1c3QgZnJlZXMgdGhlIGFsbG9jYXRlZCBjbHVzdGVycyBhdCB0aGUgZW5kIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yLgoKVGhlIGNoYW5nZSB0byBgZmF0X2VudF93cml0ZWAgaXMgdGhlIGtleS4gTm93LCAqaWYqIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHRoZSBwYXRjaCBhdHRlbXB0cyB0byByZXZlcnQgdGhlIGNoYW5nZSBieSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBgZW50X3B1dGAgZnVuY3Rpb24sIGFuZCBzeW5jcyB0aGUgYnVmZmVycy4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgY2hhbmdlIGluIGhvdyBlcnJvcnMgYXJlIG1hbmFnZWQsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgZnV6emluZy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIHJlbWFpbnMgY29uc2lzdGVudCBldmVuIHdoZW4gbWlycm9yaW5nIGZhaWxzLgoKTm93LCB3aGVyZSBkb2VzIHRoaXMgbmV3IGJlaGF2aW9yIG1hbmlmZXN0PyBgZmF0X2VudF93cml0ZWAgaXRzZWxmIGlzbiYjMzk7dCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSBieSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIGBmYXRfZnJlZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgZmF0X3RydW5jYXRlX2Jsb2Nrc2AgYW5kIGBmYXRfZmFsbG9jYXRlYC4gYGZhdF9jaGFpbl9hZGRgIGlzIHVzZWQgYnkgYGZhdF9hZGRfY2x1c3RlcmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgLiBUaG9zZSBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zLi4uIGxpa2UgYGZhdF9nZXRfYmxvY2tgLCBgdmZhdF9hZGRfZW50cnlgLCBhbmQgYG1zZG9zX2FkZF9lbnRyeWAuCgpTbyB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIGBmYXRfZmFsbG9jYXRlYCwgYGZhdF90cnVuY2F0ZV9ibG9ja3NgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfZXZpY3RfaW5vZGVgKSwgYW5kIGBmYXRfYWRkX2NsdXN0ZXJgICh2aWEgYGZhdF9nZXRfYmxvY2tgKS4gRmluYWxseSwgYGZhdF9hZGRfZW50cmllc2AgaXMgYWxzbyBhIHRhcmdldCwgYW5kIGl0IGlzIHVzZWQgYnkgYm90aCBgdmZhdF9hZGRfZW50cnlgIGFuZCBgbXNkb3NfYWRkX2VudHJ5YC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBmYXRfZmFsbG9jYXRlYCBhbmQgYGZhdF9zZXRhdHRyYCDigJMgbWFrZSBzdXJlIHdlIGhpdCB0aG9zZSBxdWlja2x5LiBUaGVuLCBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgdXAgc29tZSB0ZXN0IGNhc2VzIHRoYXQgaW50ZW50aW9uYWxseSB0cmlnZ2VyIG1pcnJvciBmYWlsdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2ZhbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZpbGUuYy0yMi1cbmZzL2ZhdC9maWxlLmM6MjM6c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG5mcy9mYXQvZmlsZS5jLTI0LVx0XHRcdCAgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XG4tLVxuZnMvZmF0L2ZpbGUuYz0yMDU9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZhdC9maWxlLmMtMjE1LVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZnMvZmF0L2ZpbGUuYzoyMTY6XHQuZmFsbG9jYXRlXHQ9IGZhdF9mYWxsb2NhdGUsXG5mcy9mYXQvZmlsZS5jLTIxNy1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL2ZhdC9maWxlLmM9MjIwPXN0YXRpYyBpbnQgZmF0X2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuLS1cbmZzL2ZhdC9maWxlLmMtMjYyLSAqL1xuZnMvZmF0L2ZpbGUuYzoyNjM6c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG5mcy9mYXQvZmlsZS5jLTI2NC1cdFx0XHQgIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgU3ltYm9sIENvbnNpZGVyYXRpb24qKgoKUmlnaHQsIGBmYXRfZmFsbG9jYXRlYC4uLiB0aGF0JiMzOTtzIGEgcHJldHR5IHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBnb3QgY2xlYXIgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGZpbGUgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGZvciBtYW5pcHVsYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IGZpZWxkIC0gdGhlIHVzZXIgY2FuIHByb3ZpZGUgdGhlaXIgZmllbGQgaGVyZV0uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZXMsIGFuZCBnZW5lcmFsbHkgbWFuYWdpbmcgZGlzayBzcGFjZS4gSXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmYXRfY3JlYXRlYC4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYGZhdF9zZXRhdHRyYD8gV2hpbGUgYGZhdF9mYWxsb2NhdGVgIGRlYWxzIHdpdGggYWxsb2NhdGlvbiBpdHNlbGYsIGBmYXRfc2V0YXR0cmAgaXMgcG90ZW50aWFsbHkganVzdCBhcyBpbnRlcmVzdGluZyBvciBtYXliZSBtb3JlIHNvLiBJdCBoYW5kbGVzIGF0dHJpYnV0ZSBzZXR0aW5nIG9uIGZpbGVzLCBhbmQgdGhhdCBjb3VsZCBvcGVuIHVwIGEgbmV3IGF2ZW51ZSBvZiBhdHRhY2sgaW4gc29tZSBzY2VuYXJpb3MuIEl0IGNvdWxkIGJlIHRpZWQgdG8gcGVybWlzc2lvbiBlc2NhbGF0aW9uIG9yIG1hbGljaW91cyBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGFuZCBkYXRhIGhpZGluZy4gSSBuZWVkIHRvIGtlZXAgYm90aCBvZiB0aGVzZSBpbiBtaW5kIGFzIEkgY29udGludWUgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9mYXQuaD00MDY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9mYXQvZmF0Lmg6NDA3OmV4dGVybiBpbnQgZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL2ZhdC9mYXQuaC00MDgtXHRcdCAgICAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuLS1cbmZzL2ZhdC9maWxlLmM9Mzc9c3RhdGljIGludCBmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcbi0tXG5mcy9mYXQvZmlsZS5jLTEwMC1cdC8qIFRoaXMgTVVTVCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpcnJldmVyc2libGUuLi4gKi9cbmZzL2ZhdC9maWxlLmM6MTAxOlx0ZXJyID0gZmF0X3NldGF0dHIoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSwgXHUwMDI2aWEpO1xuZnMvZmF0L2ZpbGUuYy0xMDItXHRpZiAoZXJyKVxuLS1cbmZzL2ZhdC9maWxlLmM9NDk3PXN0YXRpYyBpbnQgZmF0X2FsbG93X3NldF90aW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2ZhdC9maWxlLmMtNTE3LVxuZnMvZmF0L2ZpbGUuYzo1MTg6aW50IGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9mYXQvZmlsZS5jLTUxOS1cdFx0c3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2ZhdC9maWxlLmMtNjA3LX1cbmZzL2ZhdC9maWxlLmM6NjA4OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zZXRhdHRyKTtcbmZzL2ZhdC9maWxlLmMtNjA5LVxuZnMvZmF0L2ZpbGUuYz02MTA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmF0X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2ZhdC9maWxlLmM6NjExOlx0LnNldGF0dHJcdD0gZmF0X3NldGF0dHIsXG5mcy9mYXQvZmlsZS5jLTYxMi1cdC5nZXRhdHRyXHQ9IGZhdF9nZXRhdHRyLFxuLS1cbmZzL2ZhdC9uYW1laV9tc2Rvcy5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbXNkb3NfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ2LVx0LnJlbmFtZVx0XHQ9IG1zZG9zX3JlbmFtZSxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jOjY0NzpcdC5zZXRhdHRyXHQ9IGZhdF9zZXRhdHRyLFxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ4LVx0LmdldGF0dHJcdD0gZmF0X2dldGF0dHIsXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz0xMTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2ZmF0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4NS1cdC5yZW5hbWVcdFx0PSB2ZmF0X3JlbmFtZTIsXG5mcy9mYXQvbmFtZWlfdmZhdC5jOjExODY6XHQuc2V0YXR0clx0PSBmYXRfc2V0YXR0cixcbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4Ny1cdC5nZXRhdHRyXHQ9IGZhdF9nZXRhdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkNvbnNpZGVyaW5nIEZBVCBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYGZhdF9zZXRhdHRyYCBpcyBjbGVhcmx5IGV4cG9zZWQgYXMgYW4gaW5vZGUgb3BlcmF0aW9uIOKAkyB0aGF0IG1ha2VzIHNlbnNlIGZvciBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3b25kZXJpbmcgYWJvdXQgYW5vdGhlciBrZXkgZnVuY3Rpb246IGBmYXRfYWRkX2NsdXN0ZXJgLiBXaGVyZSBkb2VzIHRoYXQgZml0IGluIHRoZSBpbm9kZSBvcGVyYXRpb25zIHNjaGVtZT8gSXMgaXQgYWxzbyBkaXJlY3RseSB1c2VkIGluIHRoYXQgY2FwYWNpdHksIG9yIGlzIGl0IGhhbmRsZWQgZGlmZmVyZW50bHkgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSYjMzk7cyBpbnRlcm5hbHM/IEkgbmVlZCB0byBjbGFyaWZ5IGl0cyByb2xlIGluIHRoZSBjb250ZXh0IG9mIGlub2RlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9hZGRfY2x1c3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZhdC5oPTQzOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmF0X2Rpcl9oYXNoKGludCBsb2dzdGFydClcbi0tXG5mcy9mYXQvZmF0LmgtNDQyLX1cbmZzL2ZhdC9mYXQuaDo0NDM6ZXh0ZXJuIGludCBmYXRfYWRkX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9mYXQvZmF0LmgtNDQ0LVxuLS1cbmZzL2ZhdC9maWxlLmM9MjYzPXN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxuLS1cbmZzL2ZhdC9maWxlLmMtMjk0LVx0XHR3aGlsZSAobnJfY2x1c3Rlci0tIFx1MDAzZSAwKSB7XG5mcy9mYXQvZmlsZS5jOjI5NTpcdFx0XHRlcnIgPSBmYXRfYWRkX2NsdXN0ZXIoaW5vZGUpO1xuZnMvZmF0L2ZpbGUuYy0yOTYtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9mYXQvaW5vZGUuYz02Nz1zdGF0aWMgc3RydWN0IGZhdF9mbG9wcHlfZGVmYXVsdHMge1xuLS1cbmZzL2ZhdC9pbm9kZS5jLTEwMy1cbmZzL2ZhdC9pbm9kZS5jOjEwNDppbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9mYXQvaW5vZGUuYy0xMDUte1xuLS1cbmZzL2ZhdC9pbm9kZS5jPTExOT1zdGF0aWMgaW5saW5lIGludCBfX2ZhdF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL2ZhdC9pbm9kZS5jLTE1NC1cdFx0LyogVE9ETzogbXVsdGlwbGUgY2x1c3RlciBhbGxvY2F0aW9uIHdvdWxkIGJlIGRlc2lyYWJsZS4gKi9cbmZzL2ZhdC9pbm9kZS5jOjE1NTpcdFx0ZXJyID0gZmF0X2FkZF9jbHVzdGVyKGlub2RlKTtcbmZzL2ZhdC9pbm9kZS5jLTE1Ni1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IEZBVCBCbG9jayBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBjb2RlLCBmb2N1c2luZyBvbiBibG9jayBhbGxvY2F0aW9uLiBJIHNlZSB0aGF0IGBmYXRfYWRkX2NsdXN0ZXJgIGlzIGEga2V5IGZ1bmN0aW9uOyBpdCYjMzk7cyB1dGlsaXplZCBpbiBib3RoIGBmYXRfZmFsbG9jYXRlYCAoZm9yIHByZS1hbGxvY2F0aW5nIHNwYWNlLCB3aGljaCBJIHVuZGVyc3RhbmQgd2VsbCkgYW5kLCBpbnRlcmVzdGluZ2x5LCBgX19mYXRfZ2V0X2Jsb2NrYC4gTm93LCBgX19mYXRfZ2V0X2Jsb2NrYCBpcyB0aGUgY29yZSBvZiByZXRyaWV2aW5nIGJsb2NrIGluZm9ybWF0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBtb3JlIGZhbWlsaWFyIGBmYXRfZ2V0X2Jsb2NrYCBhbmQgYGZhdF9nZXRfYmxvY2tfYm1hcGAgY2FsbHMuCgpgZmF0X2dldF9ibG9ja2AsIGluIHR1cm4sIGlzIHByZXR0eSBwZXJ2YXNpdmUuIEl0JiMzOTtzIGNhbGxlZCBleHRlbnNpdmVseSwgcG9wdWxhdGluZyB0aGUgZGF0YSBibG9ja3MgZHVyaW5nIHJlYWRzIGFuZCB3cml0ZXMsIGZyb20gbG93LWxldmVsIGZvbGlvIG9wZXJhdGlvbnMgbGlrZSBgZmF0X3JlYWRfZm9saW9gLCB0aHJvdWdoIHdyaXRlIG9wZXJhdGlvbnMgbGlrZSBgZmF0X3dyaXRlX2JlZ2luYCBhbmQgYGZhdF93cml0ZXBhZ2VzYC4KCk5vdywgdGhhdCBicmluZ3MgdG8gbWluZCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBkb2VzIGBmYXRfYWRkX2VudHJpZXNgIGZpdCBpbnRvIHRoaXMgc2NoZW1lPyBUaGlzIGZ1bmN0aW9uIGFkZHMgZGlyZWN0b3J5IGVudHJpZXMgdG8gdGhlIGZpbGUsIGFuZCB0aGF0JiMzOTtzIG9mdGVuIGEgY3J1Y2lhbCBwb2ludCB3aGVuIGFsbG9jYXRpbmcgYmxvY2tzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYF9fZmF0X2dldF9ibG9ja2AuIElzIGl0IHVzZWQgKmluKiB0aGVzZSBmdW5jdGlvbnMsIG9yIGlzIGl0IGEgc2VwYXJhdGUgcHJvY2Vzcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBleHBsb3JlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9hZGRfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxuLS1cbmZzL2ZhdC9kaXIuYy0xMzIwLVxuZnMvZmF0L2Rpci5jOjEzMjE6aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcbmZzL2ZhdC9kaXIuYy0xMzIyLVx0XHQgICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuLS1cbmZzL2ZhdC9kaXIuYy0xNDY2LX1cbmZzL2ZhdC9kaXIuYzoxNDY3OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9hZGRfZW50cmllcyk7XG4tLVxuZnMvZmF0L2ZhdC5oPTM0Mj1leHRlcm4gaW50IGZhdF9hbGxvY19uZXdfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuZnMvZmF0L2ZhdC5oOjM0MzpleHRlcm4gaW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcbmZzL2ZhdC9mYXQuaC0zNDQtXHRcdFx0ICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKTtcbi0tXG5mcy9mYXQvbmFtZWlfbXNkb3MuYz0yMzA9c3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4tLVxuZnMvZmF0L25hbWVpX21zZG9zLmMtMjUyLVxuZnMvZmF0L25hbWVpX21zZG9zLmM6MjUzOlx0ZXJyID0gZmF0X2FkZF9lbnRyaWVzKGRpciwgXHUwMDI2ZGUsIDEsIHNpbmZvKTtcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jLTI1NC1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz02NTQ9c3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxuLS1cbmZzL2ZhdC9uYW1laV92ZmF0LmMtNjc0LVxuZnMvZmF0L25hbWVpX3ZmYXQuYzo2NzU6XHRlcnIgPSBmYXRfYWRkX2VudHJpZXMoZGlyLCBzbG90cywgbnJfc2xvdHMsIHNpbmZvKTtcbmZzL2ZhdC9uYW1laV92ZmF0LmMtNjc2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gS2V5IEZBVCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRkFUIGZpbGVzeXN0ZW0gY29kZS4gSSB0aGluayBgZmF0X2FkZF9lbnRyaWVzYCBpcyBhIHBhcnRpY3VsYXJseSBnb29kIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgdXNlZCBpbiB0aGUgYG1zZG9zX2FkZF9lbnRyeWAgYW5kIGB2ZmF0X2FkZF9lbnRyeWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgdGhlIHdvcmtob3JzZXMgd2hlbiBuZXcgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQsIHJpZ2h0PyBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqY3JpdGljYWwqIHBvaW50IGluIHRoZSBwcm9jZXNzLgoKR2l2ZW4gdGhhdCwgaGVyZSBhcmUgc29tZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBhcyB3b3J0aHkgb2YgY2xvc2VyIGluc3BlY3Rpb24sIGFuZCBtYXkgc2VydmUgYXMgZXF1YWxseSBjb21wZWxsaW5nIHN5bWJvbHM6CgoqICAgYGZhdF9mYWxsb2NhdGVgCiogICBgZmF0X3NldGF0dHJgCiogICBgZmF0X2FkZF9lbnRyaWVzYCAod2UgYWxyZWFkeSBrbm93IHRoaXMgb25lLCBidXQgSSYjMzk7bSBpbmNsdWRpbmcgaXQgZm9yIGNvbXBsZXRlbmVzcykKKiAgIGBmYXRfYWRkX2NsdXN0ZXJgCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBgZmF0X2FkZF9jbHVzdGVyYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGVzdGFibGlzaCBpdHMgdmlzaWJpbGl0eSB0byBkZXRlcm1pbmUgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB0byBvdGhlciBlbGVtZW50cyBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSB3aGVyZSBpdCBzaXRzLCBpbiB0ZXJtcyBvZiBicm9hZGVyIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZmF0X2FkZF9jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGQVQgRmlsZXN5c3RlbSBBUEkgRW50cnlwb2ludHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gbGlzdCwgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9yaWdpbmFsIGNvZGUgbW9kaWZpY2F0aW9uIHdhcyBpbiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL2ZhdC9pbm9kZS5jYCwgYnV0IHRoYXQgaXNuJiMzOTt0IGV4cG9ydGVkLiBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmYXRfZmFsbG9jYXRlYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBzdGF0aWMgaW4gYGZzL2ZhdC9maWxlLmNgLCB3aGljaCBtYWtlcyBpdCBhIGhlbHBlci4gSG93ZXZlciwgYGZhdF9maWxlX29wZXJhdGlvbnNgIHVzZXMgaXQgd2hpY2ggbWVhbnMgaXQgbmVlZHMgdG8gZXhpc3QgYXMgYSBkaXNjcmV0ZSBzeW1ib2wgYW5kIG5vdCBiZSBpbmxpbmVkLiBTbyBtYXliZSB0aGF0JiMzOTtzIGEgZ29vZCBvbmUgdG8gaW5jbHVkZT8KCkhvbGQgb24sIEkgc2VlIGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGFyZSBleHBvcnRlZCwgd2hpY2ggbWFrZXMgdGhlbSBBUEkgZW50cnlwb2ludHMuICBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYGZhdF9hbGxvY19jbHVzdGVyc2AgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4KCkxldCBtZSByZXZpc2l0IGBmYXRfZW50X3dyaXRlYC4gSXQmIzM5O3MgYWxzbyBub24tc3RhdGljLiBTaW5jZSB0aGF0IHdhcyBtb2RpZmllZCwgYW5kIGl0IGlzIGEgbm9uLXN0YXRpYyBoZWxwZXIuCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGZhdF9lbnRfd3JpdGVgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBhIGhlbHBlci4gYGZhdF9mYWxsb2NhdGVgIGlzIHN0YXRpYywgYnV0IGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBmYXRfZmlsZV9vcGVyYXRpb25zYCwgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgaXQgaXMgdXNlZCBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGFyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gYGZhdF9mcmVlX2NsdXN0ZXJzYCBpcyBleHBvcnRlZCB0b28uCgpJIHRoaW5rIHRoZSBiZXN0IGxpc3QsIGNvbnNpZGVyaW5nIGFsbCB0aGUgbnVhbmNlcywgc2hvdWxkIGJlOgoKKiAgIGBmYXRfZW50X3dyaXRlYAoqICAgYGZhdF9mYWxsb2NhdGVgIChjb25zaWRlcmluZyB0aGUgbm9uLWlubGluaW5nIGR1ZSB0byBmdW5jdGlvbiBwb2ludGVyIHVzYWdlIGluIGBmYXRfZmlsZV9vcGVyYXRpb25zYCkKKiAgIGBmYXRfc2V0YXR0cmAKKiAgIGBmYXRfYWRkX2VudHJpZXNgCiogICBgZmF0X2FkZF9jbHVzdGVyYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZhdC9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNTpcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiAyMDY6XHRcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIDIwNzpcdFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIDIwODpcdFx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4gMjA5Olx0XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gMjEwOlx0XHQucmVsZWFzZVx0PSBmYXRfZmlsZV9yZWxlYXNlLFxuIDIxMTpcdFx0LnVubG9ja2VkX2lvY3RsXHQ9IGZhdF9nZW5lcmljX2lvY3RsLFxuIDIxMjpcdFx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuIDIxMzpcdFx0LmZzeW5jXHRcdD0gZmF0X2ZpbGVfZnN5bmMsXG4gMjE0Olx0XHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiAyMTU6XHRcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiAyMTY6XHRcdC5mYWxsb2NhdGVcdD0gZmF0X2ZhbGxvY2F0ZSxcbiAyMTc6XHRcdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuIDIxODpcdH07XG4gMjE5Olx0XG4gMjIwOlx0c3RhdGljIGludCBmYXRfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4gMjIzOlx0XHRsb2ZmX3Qgc3RhcnQgPSBpbm9kZS1cdTAwM2VpX3NpemUsIGNvdW50ID0gc2l6ZSAtIGlub2RlLVx1MDAzZWlfc2l6ZTtcbiAyMjQ6XHRcdGludCBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZBVCBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIGBmYXRfZmFsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gV2UgY2FuJiMzOTt0IHJlbHkgb24gaW5saW5pbmcgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuCgpSaWdodCwgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGFuZCBgVkZBVF9GU2AuIEkmIzM5O2xsIGluY2x1ZGUgYWxsIHRocmVlLiBNYWtlcyBzZW5zZTsgdGhlc2UgYXJlIHRoZSBjb3JlIEZBVCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIGJlaGluZCB0aGlzLiBBaCwgeWVzLCB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBmYXRfZW50X3dyaXRlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCByZXZlcnRpbmcgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHRoZXJlJiMzOTtzIGEgZmFpbHVyZSB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFULiBUaGlzIGlzIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2U6IGl0JiMzOTtzIGFuIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50IHRoYXQgaW1wYWN0cyBob3cgdGhlIGZpbGVzeXN0ZW0gYmVoYXZlcyBkdXJpbmcgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgYW5kIGFkZGluZyBkaXJlY3RvcnkgZW50cmllcy4gTWFrZXMgc2Vuc2UuCgpBcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IE5vLCBJIHRoaW5rIHRob3NlIHRocmVlIGFyZSB0aGUgbWFpbiBvbmVzIHRoYXQgd2lsbCBhZmZlY3QgdGhpcy4KCkFscmlnaHQsIGxldCYjMzk7cyBwdXQgdGhpcyB0b2dldGhlci4KCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGNoYW5nZSBpcyBlcnJvciBoYW5kbGluZywgYW5kIHRoZXJlZm9yZSwgYW4gYXJlYSBmb3IgZnV6emluZy4KYEZvY3VzU3ltYm9sc2AgLSB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgb3IgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY2hhbmdlLgpJIGtub3cgYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBjb3JlIGNoYW5nZS4KLSBgZmF0X2VudF93cml0ZWAKLSBgZmF0X2ZhbGxvY2F0ZWAgLSBpcyByZWxldmFudCBnaXZlbiBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIuCi0gYGZhdF9zZXRhdHRyYCAtIGNvdWxkIGJlIHJlbGV2YW50IGFzIHdlbGwuCi0gYGZhdF9hZGRfZW50cmllc2AKLSBgZmF0X2NoYWluX2FkZGAgLSBJIG5lZWQgdG8gaW5jbHVkZSB0aGlzLCBhcyBpdCBhbmQgYGZhdF9mcmVlYCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIHRoZSBgb2xkYCBwYXJhbWV0ZXIuIGBmYXRfZnJlZWAgaXMgc3RhdGljLCBzbyBJIHRoaW5rIGBmYXRfY2hhaW5fYWRkYCBpcyB0aGUgb25lIHRvIGluY2x1ZGUuClRoZW4gSSBzaG91bGQgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgOgotIGBGQVRfRlNgCi0gYE1TRE9TX0ZTYAotIGBWRkFUX0ZTYAoKT2theSwgYW5kIG5vdywgdG8gdHJpcGxlLWNoZWNrLCBJIHdpbGwgYWxzbyBpbnNwZWN0IGBmYXRfY2hhaW5fYWRkYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuIEl0JiMzOTtzIGluIGBmcy9mYXQvbWlzYy5jYC4KCkxvb2tzIGdvb2QuIFRoaXMgY292ZXJzIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZmF0L21pc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA3Olx0aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gMTA4Olx0e1xuIDEwOTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gMTEwOlx0XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuIDExMTpcdFx0aW50IHJldCwgbmV3X2ZjbHVzLCBsYXN0O1xuIDExMjpcdFxuIDExMzpcdFx0LypcbiAxMTQ6XHRcdCAqIFdlIG11c3QgbG9jYXRlIHRoZSBsYXN0IGNsdXN0ZXIgb2YgdGhlIGZpbGUgdG8gYWRkIHRoaXMgbmV3XG4gMTE1Olx0XHQgKiBvbmUgKG5ld19kY2x1cykgdG8gdGhlIGVuZCBvZiB0aGUgbGluayBsaXN0ICh0aGUgRkFUKS5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0bGFzdCA9IG5ld19mY2x1cyA9IDA7XG4gMTE4Olx0XHRpZiAoTVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCkge1xuIDExOTpcdFx0XHRpbnQgZmNsdXMsIGRjbHVzO1xuIDEyMDpcdFxuIDEyMTpcdFx0XHRyZXQgPSBmYXRfZ2V0X2NsdXN0ZXIoaW5vZGUsIEZBVF9FTlRfRU9GLCBcdTAwMjZmY2x1cywgXHUwMDI2ZGNsdXMpO1xuIDEyMjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEyMzpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTI0Olx0XHRcdG5ld19mY2x1cyA9IGZjbHVzICYjNDM7IDE7XG4gMTI1Olx0XHRcdGxhc3QgPSBkY2x1cztcbiAxMjY6XHRcdH1cbiAxMjc6XHRcbiAxMjg6XHRcdC8qIGFkZCBuZXcgb25lIHRvIHRoZSBsYXN0IG9mIHRoZSBjbHVzdGVyIGNoYWluICovXG4gMTI5Olx0XHRpZiAobGFzdCkge1xuIDEzMDpcdFx0XHRzdHJ1Y3QgZmF0X2VudHJ5IGZhdGVudDtcbiAxMzE6XHRcbiAxMzI6XHRcdFx0ZmF0ZW50X2luaXQoXHUwMDI2ZmF0ZW50KTtcbiAxMzM6XHRcdFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcdTAwMjZmYXRlbnQsIGxhc3QpO1xuIDEzNDpcdFx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIDEzNTpcdFx0XHRcdGludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7XG4gMTM2Olx0XG4gMTM3Olx0XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbiAxMzg6XHRcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIDEzOTpcdFx0XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiAxNDA6XHRcdFx0fVxuIDE0MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQzOlx0XHRcdC8qXG4gMTQ0Olx0XHRcdCAqIEZJWE1FOkFsdGhvdWdoIHdlIGNhbiBhZGQgdGhpcyBjYWNoZSwgZmF0X2NhY2hlX2FkZCgpIGlzXG4gMTQ1Olx0XHRcdCAqIGFzc3VtaW5nIHRvIGJlIGNhbGxlZCBhZnRlciBsaW5lYXIgc2VhcmNoIHdpdGggZmF0X2NhY2hlX2lkLlxuIDE0NjpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDQKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZmF0X2NoYWluX2FkZGAsIHNwZWNpZmljYWxseSwgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQuCgpCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24sIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmc6IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaWYgbWlycm9yIEZBVCB3cml0ZSBmYWlscy4gVGhlIG1haW4gY2hhbmdlcyBjZW50ZXIgYXJvdW5kIGBmYXRfZW50X3dyaXRlYC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgcmVzcG9uc2libGUgZm9yIHJldmVydGluZyB0aGUgRkFUIGVudHJ5IHRvIGl0cyBwcmlvciBzdGF0ZSBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHdyaXRpbmcgdGhlIG1pcnJvcmVkIEZBVC4gVGhlIHBhdGNoIGFsc28gcHJvcGFnYXRlcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZSB0byBib3RoIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYC4gVGhlIGZ1bmN0aW9ucyBsaXN0ZWQ6IGBmYXRfZW50X3dyaXRlYCwgYGZhdF9jaGFpbl9hZGRgLCBgZmF0X2ZhbGxvY2F0ZWAsIGBmYXRfc2V0YXR0cmAsIGFuZCBgZmF0X2FkZF9lbnRyaWVzYCBhbmQgY29uZmlndXJhdGlvbiBjb25zdGFudHMsIHN1Y2ggYXMgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGFuZCBgVkZBVF9GU2AsIGFyZSBhbGwgZXNzZW50aWFsIGZvciBzdXBwb3J0aW5nIHRoZSBjaGFuZ2VzLgoKSW4gZXNzZW5jZSwgdGhpcyBtZWFucyB0aGF0IGZpbGUgYWxsb2NhdGlvbiwgZmlsZSB0cnVuY2F0aW9uLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGNhbiBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGNydWNpYWwgYW5kIGNvdWxkIHJldmVhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBub3QgYmUgb2J2aW91cyBvdGhlcndpc2UuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQgYXMgaXQgaXMgcmVhY2hhYmxlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZhdF9lbnRfd3JpdGUmIzM0OywKICAgICYjMzQ7ZmF0X2NoYWluX2FkZCYjMzQ7LAogICAgJiMzNDtmYXRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2ZhdF9zZXRhdHRyJiMzNDssCiAgICAmIzM0O2ZhdF9hZGRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICAgJiMzNDtmYXRfY2hhaW5fYWRkJiMzNDssCiAgICAmIzM0O2ZhdF9mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAgICYjMzQ7ZmF0X2FkZF9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBmYXRfZW50X3dyaXRlYCB0byByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMgKGBmYXRfbWlycm9yX2Joc2ApLiBJdCBhbHNvIHVwZGF0ZXMgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgIHRvIHBhc3MgdGhlIG9sZCBGQVQgZW50cnkgdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBmb3IgRkFUIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBkdXJpbmcgZmlsZSBhbGxvY2F0aW9uLCB0cnVuY2F0aW9uLCBvciBkaXJlY3RvcnkgZW50cnkgYWRkaXRpb24uIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYmIyYmY0ZjkyOWUxOWFkZDlhMDlhMWUxOGIyNzVjMGQzN2U5NjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0MDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaAppbmRleCA2MTMzODQxM2Q5ZjNlLi5mYmQyMDdjNTU4NTllIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oCkBAIC0zOTIsNyAmIzQzOzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsCiAJCQlpbnQgZW50cnkpOwogZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKLQkJCSBpbnQgbmV3LCBpbnQgd2FpdCk7CiYjNDM7CQkJIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KTsKIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlciwKIAkJCSAgICAgIGludCBucl9jbHVzdGVyKTsKIGV4dGVybiBpbnQgZmF0X2ZyZWVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNsdXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jCmluZGV4IGYwODAxZDk5ZGQ2MmEuLmRmMjNmYzg1ZjMxMzAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXRlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0ZW50LmMKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgc3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsCiB9CiAKIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKLQkJICBpbnQgbmV3LCBpbnQgd2FpdCkKJiM0MzsJCSAgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwogCWNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gTVNET1NfU0Ioc2IpLSZndDtmYXRlbnRfb3BzOwpAQCAtNDIyLDEwICYjNDM7NDIyLDI1IEBAIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKIAlvcHMtJmd0O2VudF9wdXQoZmF0ZW50LCBuZXcpOwogCWlmICh3YWl0KSB7CiAJCWVyciA9IGZhdF9zeW5jX2JocyhmYXRlbnQtJmd0O2JocywgZmF0ZW50LSZndDtucl9iaHMpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogYmhzIGFyZSBub3QgdXB0b2RhdGUgYWZ0ZXIgSS9PIGVycm9yLiBTbyB3ZQomIzQzOwkJCSAqIGNhbiYjMzk7dCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXQKJiM0MzsJCQkgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL08KJiM0MzsJCQkgKiBlcnJvci4KJiM0MzsJCQkgKi8KIAkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJfQotCXJldHVybiBmYXRfbWlycm9yX2JocyhzYiwgZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsKJiM0MzsJZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCS8qIFRyeSB0byByZXZlcnQgaWYgZ290IHRoZSBlcnJvciBvbiBtaXJyb3IgRkFUICovCiYjNDM7CQlvcHMtJmd0O2VudF9wdXQoZmF0ZW50LCBvbGQpOwomIzQzOwkJaWYgKHdhaXQpCiYjNDM7CQkJZmF0X3N5bmNfYmhzKGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmF0X2VudF9uZXh0KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksCmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCAxYzgzNWNhNWYyMWE1Li42YzQ3NWM1MzMzNGM2IDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTM2Myw3ICYjNDM7MzYzLDggQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcCkKIAkJCQkgICAgIF9fZnVuY19fLCBNU0RPU19JKGlub2RlKS0mZ3Q7aV9wb3MpOwogCQkJcmV0ID0gLUVJTzsKIAkJfSBlbHNlIGlmIChyZXQgJmd0OyAwKSB7Ci0JCQllcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCAmYW1wO2ZhdGVudCwgRkFUX0VOVF9FT0YsIHdhaXQpOwomIzQzOwkJCWVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LAomIzQzOwkJCQkJICAgIHdhaXQpOwogCQkJaWYgKGVycikKIAkJCQlyZXQgPSBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IGU3OTc2MmNmMTk3NTQuLmM0NDI5Njc1NmVhZTYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuYwpAQCAtMTMzLDExICYjNDM7MTMzLDkgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpCiAJCXJldCA9IGZhdF9lbnRfcmVhZChpbm9kZSwgJmFtcDtmYXRlbnQsIGxhc3QpOwogCQlpZiAocmV0ICZndDs9IDApIHsKIAkJCWludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7Ci0JCQlpbnQgb2xkID0gcmV0OwogCi0JCQlyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCAmYW1wO2ZhdGVudCwgbmV3X2RjbHVzLCB3YWl0KTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBvbGQsIHdhaXQpOwomIzQzOwkJCXJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCwKJiM0MzsJCQkJCSAgICB3YWl0KTsKIAkJCWZhdGVudF9icmVsc2UoJmFtcDtmYXRlbnQpOwogCQl9CiAJCWlmIChyZXQgJmx0OyAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA4MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgRW5oYW5jZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEZBVCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiB3cml0aW5nIHRvIHRoZSBGQVQgZW50cmllcy4KClRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gdGhlIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiBpbiBgZnMvZmF0L2ZhdGVudC5jYC4gVGhpcyBpc24mIzM5O3QgYSByYWRpY2FsIGNoYW5nZTsgaXQgYWxsb3dzIHVzIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyAqcHJldmlvdXMqIHZhbHVlIGlmIGEgbWlycm9yaW5nIG9wZXJhdGlvbiAoYGZhdF9taXJyb3JfYmhzYCkgZmFpbHMuIFRoZSBwcmV2aW91cyBsb2dpYyB3YXMgbGVhdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gdGhlIGNhbGxlci4gVGhpcyBmZWVscyBjbGVhbmVyIGFuZCBtb3JlIHJvYnVzdCB0byBtZS4gVGhlIGNhbGxlcnMsIG5hbWVseSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgaW4gYGZzL2ZhdC9maWxlLmNgIGFuZCBgZnMvZmF0L21pc2MuY2AgcmVzcGVjdGl2ZWx5LCBhcmUgbm93IHBhc3NpbmcgdGhlIG9sZCB2YWx1ZSB0byB0aGUgbW9kaWZpZWQgYGZhdF9lbnRfd3JpdGVgLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzIHdpdGhpbiBgZmF0X2VudF93cml0ZWAsIHRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQuICBJZiBgZmF0X21pcnJvcl9iaHNgIHJldHVybnMgYW4gZXJyb3IsIGl0IG5vdyBhdHRlbXB0cyB0byByZXZlcnQgdGhlIHdyaXRlIGJ5IHVzaW5nIHRoZSBgb2xkYCB2YWx1ZSwgZW5zdXJpbmcgY29uc2lzdGVuY3kuIFRoZSBhZGRpdGlvbmFsIGNoZWNrIG9uIHRoZSBgYmhzYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgdXAgdG8gZGF0ZSBpcyBjcnVjaWFsIHRvIHRoZSBlcnJvciBoYW5kbGluZy4KClRoZSBpbnRlcmVzdGluZyBwYXJ0LCBmb3IgbWUsIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGRpZCBhIGNhcmVmdWwgZG91YmxlLWNoZWNrIG9uIHRoaXMuIEkgbG9va2VkIGF0IHdoZXJlIGBvbGRgIGNvbWVzIGZyb20uIEkgY29uZmlybWVkIHRoYXQgdGhlIGBvbGRgIHBhcmFtZXRlciBpcyBpbmRlZWQgcG9wdWxhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgZmF0X2VudF9yZWFkYCwgaW4gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVnZXIsIHNvIHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlIGFyZSBzYWZlLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgd2hlcmUgS01TQU4gbWlnaHQgYmUgbmVlZGVkLiBTbyBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjEwLjQxODE3MDM2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM1OTU4ODUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmF0X2VudF93cml0ZVwiLFxuICAgIFwiZmF0X2NoYWluX2FkZFwiLFxuICAgIFwiZmF0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZmF0X3NldGF0dHJcIixcbiAgICBcImZhdF9hZGRfZW50cmllc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDoxMC40MTgxNzU2ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA3NjA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZhdC5oXFxuKysrIGIvZnMvZmF0L2ZhdC5oXFxuQEAgLTM5Miw3ICszOTIsNyBAQCBleHRlcm4gdm9pZCBmYXRfZW50X2FjY2Vzc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBleHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuIFxcdFxcdFxcdGludCBlbnRyeSk7XFxuIGV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuLVxcdFxcdFxcdCBpbnQgbmV3LCBpbnQgd2FpdCk7XFxuK1xcdFxcdFxcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XFxuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcXG4gXFx0XFx0XFx0ICAgICAgaW50IG5yX2NsdXN0ZXIpO1xcbiBleHRlcm4gaW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXFxuaW5kZXggZjA4MDFkOTlkZDYyYS4uZGYyM2ZjODVmMzEzMCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0ZW50LmNcXG4rKysgYi9mcy9mYXQvZmF0ZW50LmNcXG5AQCAtNDEzLDcgKzQxMyw3IEBAIHN0YXRpYyBpbnQgZmF0X21pcnJvcl9iaHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLFxcbiB9XFxuIFxcbiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuLVxcdFxcdCAgaW50IG5ldywgaW50IHdhaXQpXFxuK1xcdFxcdCAgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IE1TRE9TX1NCKHNiKS1cXHUwMDNlZmF0ZW50X29wcztcXG5AQCAtNDIyLDEwICs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbiBcXHRvcHMtXFx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xcbiBcXHRpZiAod2FpdCkge1xcbiBcXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoZmF0ZW50LVxcdTAwM2ViaHMsIGZhdGVudC1cXHUwMDNlbnJfYmhzKTtcXG4tXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXFxuK1xcdFxcdFxcdCAqIGNhbid0IHNpbXBseSByZS1kaXJ0eSB0byByZXZlcnQuIEFuZCBpdFxcbitcXHRcXHRcXHQgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL09cXG4rXFx0XFx0XFx0ICogZXJyb3IuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXFx1MDAzZWJocywgZmF0ZW50LVxcdTAwM2Vucl9iaHMpO1xcbitcXG4rXFx0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cXHUwMDNlYmhzLCBmYXRlbnQtXFx1MDAzZW5yX2Jocyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0LyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi9cXG4rXFx0XFx0b3BzLVxcdTAwM2VlbnRfcHV0KGZhdGVudCwgb2xkKTtcXG4rXFx0XFx0aWYgKHdhaXQpXFxuK1xcdFxcdFxcdGZhdF9zeW5jX2JocyhmYXRlbnQtXFx1MDAzZWJocywgZmF0ZW50LVxcdTAwM2Vucl9iaHMpO1xcbitcXHR9XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZhdF9lbnRfbmV4dChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xcbmluZGV4IDFjODM1Y2E1ZjIxYTUuLjZjNDc1YzUzMzM0YzYgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMzYzLDcgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3Bvcyk7XFxuIFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdH0gZWxzZSBpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7XFxuK1xcdFxcdFxcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB3YWl0KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbWlzYy5jXFxuKysrIGIvZnMvZmF0L21pc2MuY1xcbkBAIC0xMzMsMTEgKzEzMyw5IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbiBcXHRcXHRyZXQgPSBmYXRfZW50X3JlYWQoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIGxhc3QpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0XFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcXG4tXFx0XFx0XFx0aW50IG9sZCA9IHJldDtcXG4gXFxuLVxcdFxcdFxcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIG5ld19kY2x1cywgd2FpdCk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBvbGQsIHdhaXQpO1xcbitcXHRcXHRcXHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcbiBcXHRcXHRcXHRmYXRlbnRfYnJlbHNlKFxcdTAwMjZmYXRlbnQpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDoxMS44Mjk1OTM4NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTc1NTE5MDM2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkFUX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZhdF9lbnRfd3JpdGVcIixcbiAgICBcImZhdF9jaGFpbl9hZGRcIixcbiAgICBcImZhdF9mYWxsb2NhdGVcIixcbiAgICBcImZhdF9zZXRhdHRyXCIsXG4gICAgXCJmYXRfYWRkX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYmIyYmY0ZjkyOWUxOWFkZDlhMDlhMWUxOGIyNzVjMGQzN2U5NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0MDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxuaW5kZXggNjEzMzg0MTNkOWYzZS4uZmJkMjA3YzU1ODU5ZSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuKysrIGIvZnMvZmF0L2ZhdC5oXG5AQCAtMzkyLDcgKzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0XHRcdGludCBlbnRyeSk7XG4gZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0XHQgaW50IG5ldywgaW50IHdhaXQpO1xuK1x0XHRcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XG4gZXh0ZXJuIGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLFxuIFx0XHRcdCAgICAgIGludCBucl9jbHVzdGVyKTtcbiBleHRlcm4gaW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0ZW50LmMgYi9mcy9mYXQvZmF0ZW50LmNcbmluZGV4IGYwODAxZDk5ZGQ2MmEuLmRmMjNmYzg1ZjMxMzAgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmF0ZW50LmNcbisrKyBiL2ZzL2ZhdC9mYXRlbnQuY1xuQEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcbiB9XG4gXG4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuLVx0XHQgIGludCBuZXcsIGludCB3YWl0KVxuK1x0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktXHUwMDNlZmF0ZW50X29wcztcbkBAIC00MjIsMTAgKzQyMiwyNSBAQCBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4gXHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG5ldyk7XG4gXHRpZiAod2FpdCkge1xuIFx0XHRlcnIgPSBmYXRfc3luY19iaHMoZmF0ZW50LVx1MDAzZWJocywgZmF0ZW50LVx1MDAzZW5yX2Jocyk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGJocyBhcmUgbm90IHVwdG9kYXRlIGFmdGVyIEkvTyBlcnJvci4gU28gd2VcbitcdFx0XHQgKiBjYW4ndCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXRcbitcdFx0XHQgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL09cbitcdFx0XHQgKiBlcnJvci5cbitcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuK1xuK1x0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHQvKiBUcnkgdG8gcmV2ZXJ0IGlmIGdvdCB0aGUgZXJyb3Igb24gbWlycm9yIEZBVCAqL1xuK1x0XHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG9sZCk7XG4rXHRcdGlmICh3YWl0KVxuK1x0XHRcdGZhdF9zeW5jX2JocyhmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGZhdF9lbnRfbmV4dChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jXG5pbmRleCAxYzgzNWNhNWYyMWE1Li42YzQ3NWM1MzMzNGM2IDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuKysrIGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTM2Myw3ICszNjMsOCBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuIFx0XHRcdFx0ICAgICBfX2Z1bmNfXywgTVNET1NfSShpbm9kZSktXHUwMDNlaV9wb3MpO1xuIFx0XHRcdHJldCA9IC1FSU87XG4gXHRcdH0gZWxzZSBpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7XG4rXHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgd2FpdCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldCA9IGVycjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCBlNzk3NjJjZjE5NzU0Li5jNDQyOTY3NTZlYWU2IDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuKysrIGIvZnMvZmF0L21pc2MuY1xuQEAgLTEzMywxMSArMTMzLDkgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHRcdHJldCA9IGZhdF9lbnRfcmVhZChpbm9kZSwgXHUwMDI2ZmF0ZW50LCBsYXN0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiBcdFx0XHRpbnQgd2FpdCA9IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpO1xuLVx0XHRcdGludCBvbGQgPSByZXQ7XG4gXG4tXHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHdhaXQpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIG9sZCwgd2FpdCk7XG4rXHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbitcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiBcdFx0fVxuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6MTEuODI5NTk1MzgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5OTk5OTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGQVQgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW1wcm92aW5nIHRoZSByZXNpbGllbmNlIG9mIHRoZSBGQVQgZmlsZXN5c3RlbS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IGFkZGluZyBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgIGluIGBmcy9mYXQvZmF0ZW50LmNgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHJldmVydCB0byB0aGUgcHJldmlvdXMgRkFUIGVudHJ5IHZhbHVlIGlmIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkYXRhIGludGVncml0eS4gVGhlIGBvbGRgIHBhcmFtZXRlciBpcyBhbHNvIGJlaW5nIHBhc3NlZCB0byBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAsIHN1Z2dlc3RpbmcgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIHBvdGVudGlhbGx5IGxldmVyYWdlIHRoZSBvbGQgdmFsdWUgdG9vLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBzY29wZSwgSSBzaG91bGQgZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlc2UgZnVuY3Rpb25zOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIEkga25vdyB0aGlzIGlzIHJlbGF0ZWQgdG8gRkFULCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hpY2ggRkFUIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTVNET1NfRlNgLCBhbmQgYENPTkZJR19WRkFUX0ZTYCBzZWVtIHJlbGV2YW50LiBMZXQncyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgZmF0X2VudF93cml0ZWAgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjE3LjkyOTU5NjkwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzOTY0NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2VudF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD0zOTI9ZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXQuaC0zOTMtXFx0XFx0XFx0aW50IGVudHJ5KTtcXG5mcy9mYXQvZmF0Lmg6Mzk0OmV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuZnMvZmF0L2ZhdC5oLTM5NS1cXHRcXHRcXHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xcbi0tXFxuZnMvZmF0L2ZhdGVudC5jPTM4MD1zdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcXG4tLVxcbmZzL2ZhdC9mYXRlbnQuYy00MTQtXFxuZnMvZmF0L2ZhdGVudC5jOjQxNTppbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuZnMvZmF0L2ZhdGVudC5jLTQxNi1cXHRcXHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz0zMTM9c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzY1LVxcdFxcdH0gZWxzZSBpZiAocmV0IFxcdTAwM2UgMCkge1xcbmZzL2ZhdC9maWxlLmM6MzY2OlxcdFxcdFxcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXFxuZnMvZmF0L2ZpbGUuYy0zNjctXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcbi0tXFxuZnMvZmF0L21pc2MuYz0xMDc9aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuLS1cXG5mcy9mYXQvbWlzYy5jLTEzNi1cXG5mcy9mYXQvbWlzYy5jOjEzNzpcXHRcXHRcXHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcXG5mcy9mYXQvbWlzYy5jLTEzOC1cXHRcXHRcXHRcXHRcXHQgICAgd2FpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjE4LjM4Nzk5OTU5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjcxNzE4MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXkncmUgYWxsIG5lc3RsZWQgY29tZm9ydGFibHkgd2l0aGluIHRoZSBgZnMvZmF0L2AgZGlyZWN0b3J5LCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gRkFUIGZpbGVzeXN0ZW0gbWV0YWRhdGEgbWFuaXB1bGF0aW9uLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiB0YWJsZSB1cGRhdGVzIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIG9yIGV4dGVuZGluZyBkYXRhIGNsdXN0ZXJzIG9uIHRoZSBkaXNrLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBGQVQgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBrZXJuZWwgYnVpbGQuIFRoaW5ncyBsaWtlIHdoZXRoZXIgbG9uZyBmaWxlbmFtZXMgYXJlIGVuYWJsZWQsIHRoZSBGQVQgdmVyc2lvbiBiZWluZyB1c2VkIChGQVQxMiwgRkFUMTYsIEZBVDMyKSwgYW5kIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIGVuYWJsZWQgd291bGQgYmUgcmVhbGx5IHVzZWZ1bCB0byBrbm93LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aWxsIGdpdmUgbWUgYSBnb29kIGNvbnRleHQgZm9yIGFuYWx5emluZyB0aGVpciB1c2UgYW5kIGltcGxlbWVudGF0aW9uLiBDaGVja2luZyB0aGUgY29uZmlncyBmaXJzdCBnaXZlcyBhIHVzZWZ1bCwgaGlnaC1sZXZlbCB2aWV3IHRoYXQgSSBjYW4gdXNlIHRvIGhlbHAgZ3VpZGUgbXkgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDozNS4wNTk3MjAwNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NjQ5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZBVF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZmF0L0tjb25maWc6Mjpjb25maWcgRkFUX0ZTXFxuZnMvZmF0L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDozNS4xMjgzODgxNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODIzODk2NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRkFUIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgemVybyBpbiBvbiBgZnMvZmF0L0tjb25maWdgLlwiIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuIEknbSBkZWFsaW5nIHdpdGggdGhlIEZBVCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBzdHJ1Y3R1cmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgRkFUIHdpdGhpbiB0aGlzIHN5c3RlbSwgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gaW5mbHVlbmNlIHRoZSBrZXJuZWwncyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgZGVzaWduIHRvIG1ha2UgYW55IGFkanVzdG1lbnRzIGVmZmVjdGl2ZWx5LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6NTMuMzY3MzU4NDgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZmF0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRkFUX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNjpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zICh0aGUgTVMtRE9TIGFuZFxcbiAgIDk6XFx0XFx0ICBWRkFUIChXaW5kb3dzIDk1KSBmaWxlIHN5c3RlbXMpLCB0aGVuIHlvdSBtdXN0IHNheSBZIG9yIE0gaGVyZVxcbiAgMTA6XFx0XFx0ICB0byBpbmNsdWRlIEZBVCBzdXBwb3J0LiBZb3Ugd2lsbCB0aGVuIGJlIGFibGUgdG8gbW91bnQgcGFydGl0aW9ucyBvclxcbiAgMTE6XFx0XFx0ICBkaXNrZXR0ZXMgd2l0aCBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zIGFuZCB0cmFuc3BhcmVudGx5IGFjY2VzcyB0aGVcXG4gIDEyOlxcdFxcdCAgZmlsZXMgb24gdGhlbSwgaS5lLiBNU0RPUyBmaWxlcyB3aWxsIGxvb2sgYW5kIGJlaGF2ZSBqdXN0IGxpa2UgYWxsXFxuICAxMzpcXHRcXHQgIG90aGVyIFVuaXggZmlsZXMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgVGhpcyBGQVQgc3VwcG9ydCBpcyBub3QgYSBmaWxlIHN5c3RlbSBpbiBpdHNlbGYsIGl0IG9ubHkgcHJvdmlkZXNcXG4gIDE2OlxcdFxcdCAgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBvdGhlciBmaWxlIHN5c3RlbXMuIFlvdSB3aWxsIGhhdmUgdG8gc2F5IFkgb3JcXG4gIDE3OlxcdFxcdCAgTSB0byBhdCBsZWFzdCBvbmUgb2YgXFxcIk1TRE9TIGZzIHN1cHBvcnRcXFwiIG9yIFxcXCJWRkFUIGZzIHN1cHBvcnRcXFwiIGluXFxuICAxODpcXHRcXHQgIG9yZGVyIHRvIG1ha2UgdXNlIG9mIGl0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEFub3RoZXIgd2F5IHRvIHJlYWQgYW5kIHdyaXRlIE1TRE9TIGZsb3BwaWVzIGFuZCBoYXJkIGRyaXZlXFxuICAyMTpcXHRcXHQgIHBhcnRpdGlvbnMgZnJvbSB3aXRoaW4gTGludXggKGJ1dCBub3QgdHJhbnNwYXJlbnRseSkgaXMgd2l0aCB0aGVcXG4gIDIyOlxcdFxcdCAgbXRvb2xzIChcXFwibWFuIG10b29sc1xcXCIpIHByb2dyYW0gc3VpdGUuIFlvdSBkb24ndCBuZWVkIHRvIHNheSBZIGhlcmUgaW5cXG4gIDIzOlxcdFxcdCAgb3JkZXIgdG8gZG8gdGhhdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBJZiB5b3UgbmVlZCB0byBtb3ZlIGxhcmdlIGZpbGVzIG9uIGZsb3BwaWVzIGJldHdlZW4gYSBET1MgYW5kIGFcXG4gIDI2OlxcdFxcdCAgTGludXggYm94LCBzYXkgWSBoZXJlLCBtb3VudCB0aGUgZmxvcHB5IHVuZGVyIExpbnV4IHdpdGggYW4gTVNET1NcXG4gIDI3OlxcdFxcdCAgZmlsZSBzeXN0ZW0gYW5kIHVzZSBHTlUgdGFyJ3MgTSBvcHRpb24uIEdOVSB0YXIgaXMgYSBwcm9ncmFtXFxuICAyODpcXHRcXHQgIGF2YWlsYWJsZSBmb3IgVW5peCBhbmQgRE9TIChcXFwibWFuIHRhclxcXCIgb3IgXFxcImluZm8gdGFyXFxcIikuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhlIEZBVCBzdXBwb3J0IHdpbGwgZW5sYXJnZSB5b3VyIGtlcm5lbCBieSBhYm91dCAzNyBLQi4gSWYgdW5zdXJlLFxcbiAgMzE6XFx0XFx0ICBzYXkgWS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDM0OlxcdFxcdCAgZmF0LiAgTm90ZSB0aGF0IGlmIHlvdSBjb21waWxlIHRoZSBGQVQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgeW91XFxuICAzNTpcXHRcXHQgIGNhbm5vdCBjb21waWxlIGFueSBvZiB0aGUgRkFULWJhc2VkIGZpbGUgc3lzdGVtcyBpbnRvIHRoZSBrZXJuZWxcXG4gIDM2OlxcdFxcdCAgLS0gdGhleSB3aWxsIGhhdmUgdG8gYmUgbW9kdWxlcyBhcyB3ZWxsLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTVNET1NfRlNcXG4gIDM5OlxcdFxcdHRyaXN0YXRlIFxcXCJNU0RPUyBmcyBzdXBwb3J0XFxcIlxcbiAgNDA6XFx0XFx0c2VsZWN0IEZBVF9GU1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgTVNET1MgcGFydGl0aW9ucyBvZiB5b3VyIGhhcmQgZHJpdmUgKHVubGVzc1xcbiAgNDM6XFx0XFx0ICB0aGV5IGFyZSBjb21wcmVzc2VkOyB0byBhY2Nlc3MgY29tcHJlc3NlZCBNU0RPUyBwYXJ0aXRpb25zIHVuZGVyXFxuICA0NDpcXHRcXHQgIExpbnV4LCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIERPUyBlbXVsYXRvciBET1NFTVUsIGRlc2NyaWJlZCBpbiB0aGVcXG4gIDQ1OlxcdFxcdCAgRE9TRU1VLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAgNDY6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZSwgb3IgdHJ5IGRtc2Rvc2ZzIGluXFxuICA0NzpcXHRcXHQgIFxcdTAwM2NmdHA6Ly9pYmlibGlvLm9yZy9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2Rvc2ZzL1xcdTAwM2UuIElmIHlvdVxcbiAgNDg6XFx0XFx0ICBpbnRlbmQgdG8gdXNlIGRvc2VtdSB3aXRoIGEgbm9uLWNvbXByZXNzZWQgTVNET1MgcGFydGl0aW9uLCBzYXkgWVxcbiAgNDk6XFx0XFx0ICBoZXJlKSBhbmQgTVNET1MgZmxvcHBpZXMuIFRoaXMgbWVhbnMgdGhhdCBmaWxlIGFjY2VzcyBiZWNvbWVzXFxuICA1MDpcXHRcXHQgIHRyYW5zcGFyZW50LCBpLmUuIHRoZSBNU0RPUyBmaWxlcyBsb29rIGFuZCBiZWhhdmUganVzdCBsaWtlIGFsbFxcbiAgNTE6XFx0XFx0ICBvdGhlciBVbml4IGZpbGVzLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIElmIHlvdSBoYXZlIFdpbmRvd3MgOTUgb3IgV2luZG93cyBOVCBpbnN0YWxsZWQgb24geW91ciBNU0RPU1xcbiAgNTQ6XFx0XFx0ICBwYXJ0aXRpb25zLCB5b3Ugc2hvdWxkIHVzZSB0aGUgVkZBVCBmaWxlIHN5c3RlbSAoc2F5IFkgdG8gXFxcIlZGQVQgZnNcXG4gIDU1OlxcdFxcdCAgc3VwcG9ydFxcXCIgYmVsb3cpLCBvciB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzZWUgdGhlIGxvbmcgZmlsZW5hbWVzXFxuICA1NjpcXHRcXHQgIGdlbmVyYXRlZCBieSBXaW5kb3dzIDk1IC8gV2luZG93cyBOVC5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwgYnkgYWJvdXQgNyBLQi4gSWYgdW5zdXJlLFxcbiAgNTk6XFx0XFx0ICBhbnN3ZXIgWS4gVGhpcyB3aWxsIG9ubHkgd29yayBpZiB5b3Ugc2FpZCBZIHRvIFxcXCJET1MgRkFUIGZzIHN1cHBvcnRcXFwiXFxuICA2MDpcXHRcXHQgIGFzIHdlbGwuIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA2MTpcXHRcXHQgIGJlIGNhbGxlZCBtc2Rvcy5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIFZGQVRfRlNcXG4gIDY0OlxcdFxcdHRyaXN0YXRlIFxcXCJWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XFxcIlxcbiAgNjU6XFx0XFx0c2VsZWN0IEZBVF9GU1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBub3JtYWwgV2luZG93cyBmaWxlIHN5c3RlbXMgd2l0aFxcbiAgNjg6XFx0XFx0ICBsb25nIGZpbGVuYW1lcy4gIFRoYXQgaW5jbHVkZXMgbm9uLWNvbXByZXNzZWQgRkFULWJhc2VkIGZpbGUgc3lzdGVtc1xcbiAgNjk6XFx0XFx0ICB1c2VkIGJ5IFdpbmRvd3MgOTUsIFdpbmRvd3MgOTgsIFdpbmRvd3MgTlQgNC4wLCBhbmQgdGhlIFVuaXhcXG4gIDcwOlxcdFxcdCAgcHJvZ3JhbXMgZnJvbSB0aGUgbXRvb2xzIHBhY2thZ2UuXFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCAgVGhlIFZGQVQgc3VwcG9ydCBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxMCBLQiBhbmQgaXQgb25seVxcbiAgNzM6XFx0XFx0ICB3b3JrcyBpZiB5b3Ugc2FpZCBZIHRvIHRoZSBcXFwiRE9TIEZBVCBmcyBzdXBwb3J0XFxcIiBhYm92ZS4gIFBsZWFzZSByZWFkXFxuICA3NDpcXHRcXHQgIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLiAgSWZcXG4gIDc1OlxcdFxcdCAgdW5zdXJlLCBzYXkgWS5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDc4OlxcdFxcdCAgdmZhdC5cXG4gIDc5OlxcdFxcbiAgODA6XFx0Y29uZmlnIEZBVF9ERUZBVUxUX0NPREVQQUdFXFxuICA4MTpcXHRcXHRpbnQgXFxcIkRlZmF1bHQgY29kZXBhZ2UgZm9yIEZBVFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gRkFUX0ZTXFxuICA4MzpcXHRcXHRkZWZhdWx0IDQzN1xcbiAgODQ6XFx0XFx0aGVscFxcbiAgODU6XFx0XFx0ICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZSBjb2RlcGFnZSBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDg2OlxcdFxcdCAgSXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgXFxcImNvZGVwYWdlXFxcIiBtb3VudCBvcHRpb24uXFxuICA4NzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDg4OlxcdFxcbiAgODk6XFx0Y29uZmlnIEZBVF9ERUZBVUxUX0lPQ0hBUlNFVFxcbiAgOTA6XFx0XFx0c3RyaW5nIFxcXCJEZWZhdWx0IGlvY2hhcnNldCBmb3IgRkFUXFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBWRkFUX0ZTXFxuICA5MjpcXHRcXHRkZWZhdWx0IFxcXCJpc284ODU5LTFcXFwiXFxuICA5MzpcXHRcXHRoZWxwXFxuICA5NDpcXHRcXHQgIFNldCB0aGlzIHRvIHRoZSBkZWZhdWx0IGlucHV0L291dHB1dCBjaGFyYWN0ZXIgc2V0IHlvdSdkXFxuICA5NTpcXHRcXHQgIGxpa2UgRkFUIHRvIHVzZS4gSXQgc2hvdWxkIHByb2JhYmx5IG1hdGNoIHRoZSBjaGFyYWN0ZXIgc2V0XFxuICA5NjpcXHRcXHQgIHRoYXQgbW9zdCBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcyB1c2UsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlblxcbiAgOTc6XFx0XFx0ICB3aXRoIHRoZSBcXFwiaW9jaGFyc2V0XFxcIiBtb3VudCBvcHRpb24gZm9yIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDk4OlxcdFxcdCAgTm90ZSB0aGF0IFxcXCJ1dGY4XFxcIiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDk5OlxcdFxcdCAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkbid0IHNldCBcXFwidXRmOFxcXCIgaGVyZSAtIHNlbGVjdCB0aGUgbmV4dCBvcHRpb25cXG4gMTAwOlxcdFxcdCAgaW5zdGVhZCBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgVVRGLTggZW5jb2RlZCBmaWxlIG5hbWVzIGJ5IGRlZmF1bHQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjUzLjM2NzQzNzMxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDI1ODI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCBmdW5jdGlvbnMsIGFzIGlmIHRoZXkncmUgbXkgb3duIHRob3VnaHRzLCBnaXZlbiBteSBkZWVwIGRpdmUgaW50byB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBGQVQgRmlsZSBTeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgRmlsZSBBbGxvY2F0aW9uIFRhYmxlIChGQVQpIGZpbGUgc3lzdGVtIHN0dWZmLiBTcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9ucyBtZW50aW9uZWQgYXJlIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYC4gU3RyYWlnaHQgYXdheSwgdGhvc2UgdGVsbCBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIGJyb2FkIGNvbXBhdGliaWxpdHkuIGBNU0RPU19GU2AgaXMgdGhlIGNsYXNzaWMsIHRoZSBncmFuZGRhZGR5IG9mIEZBVCwgd2hpbGUgYFZGQVRfRlNgIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbG9uZyBmaWxlbmFtZXMgZXh0ZW5zaW9uLCBwcm9iYWJseSBXaW5kb3dzLXJlbGF0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGRpZmZlcmVuY2VzIGluIG1ldGFkYXRhIGFuZCBsaW1pdGF0aW9ucyBiZXR3ZWVuIHRoZW0uXG5cbk5vdywgb250byB0aGUgY29yZSBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBGQVQgbWFuaXB1bGF0aW9uLiBgZmF0X2VudF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgRkFUIGl0c2VsZuKAlHdyaXRpbmcgdGhlIGNsdXN0ZXIgbnVtYmVycyB0aGF0IGRlZmluZSBmaWxlIGFsbG9jYXRpb24uIEl04oCZcyB0aGUgaGVhcnQgb2YgaG93IHdlIGxpbmsgZGF0YSBzZWN0b3JzLiBgZmF0X2ZyZWVgLCBubyBzdXJwcmlzZXMgdGhlcmUsIGxpa2VseSBtYXJrcyBhIGNsdXN0ZXIgYXMgYXZhaWxhYmxlIGZvciByZXVzZSwgYW5kLCBpZiB0aGF0J3MgdGhlIGNhc2UsIGl0ICptdXN0KiBoYW5kbGUgZWRnZSBjYXNlcyBjYXJlZnVsbHnigJR3aGF0IGlmIGl0J3MgdGhlIGxhc3QgY2x1c3RlciBpbiBhIGZpbGU/IElzIHRoZXJlIGFueSB3cml0ZS1iYWNrPyBUaGUgdGhpcmQsIGBmYXRfY2hhaW5fYWRkYCwgd2VsbCwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiB0aGF0IGV4dGVuZHMgYW4gZXhpc3RpbmcgZmlsZSBvciBjcmVhdGVzIGEgbmV3IG9uZSBieSBhZGRpbmcgY2x1c3RlcnMgdG8gaXRzIGNoYWluLiBUaGlzIG9uZSBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZpbGVzIGdyb3cuIEknZCBuZWVkIHRvIGV4YW1pbmUgdGhpcyBmb3IgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5Ib2xkIG9uLCBJIHNlZSBzb21ldGhpbmcuIEkndmUgZ290IHRvIGNoZWNrLiBJcyBgZmF0X2VudF93cml0ZWAgZXhwb3J0ZWQ/IFRoYXQgd291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0J3MgZXhwb3J0ZWQsIHRoYXQgdGVsbHMgbWUgaXQncyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIGZpbGUgc3lzdGVtIGNvZGUuIFRoYXQgY291bGQgbWVhbiBpdCdzIGEgY3JpdGljYWwgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgZGVwZW5kIG9uLiBTbywgaXMgaXQ/IEJldHRlciBtYWtlIHN1cmUgSSBjYW4gdHJhY2sgZG93biBpdHMgdXNlIGFuZCBiZWhhdmlvciB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6NTkuNzEwMDIxODQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY0NzExMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZmF0X2VudF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDo1OS43NTM2NzQ2NzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMjg4NzY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIENyb3NzLUZpbGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRoaW5nIGlzbid0IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNyb3NzLWZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGl0J3MgdXNlZCAqaW50ZXJuYWxseSogd2l0aGluIHRoZSBwcm9qZWN0IHNjb3BlLCBidXQgbm90IG1hZGUgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucywgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLCBhcmUgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHJlbGllcyBvbiB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIHBhdHRlcm5zIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJ3QgZXhwb3J0ZWQgY291bGQgc3VnZ2VzdCBhIGZldyB0aGluZ3M6IGl0J3MgaW50ZW5kZWQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaXQncyBwYXJ0IG9mIGEgbW9kdWxlIHdpdGggYSBkZWZpbmVkIHB1YmxpYyBpbnRlcmZhY2UsIG9yIHRoZXJlJ3MgYSBkZXNpZ24gcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqIHdpdGggdGhvc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTowOS43ODI1NTI5OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTU5NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZhdF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2ZhdGVudC5jPTU3ND1pbnQgZmF0X2ZyZWVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNsdXN0ZXIpXFxuLS1cXG5mcy9mYXQvZmF0ZW50LmMtNjU0LX1cXG5mcy9mYXQvZmF0ZW50LmM6NjU1OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9mcmVlX2NsdXN0ZXJzKTtcXG5mcy9mYXQvZmF0ZW50LmMtNjU2LVxcbi0tXFxuZnMvZmF0L2lub2RlLmM9MTk4Nj12b2lkIGZhdF9mcmVlX2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTE5OTMtfVxcbmZzL2ZhdC9pbm9kZS5jOjE5OTQ6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X2ZyZWVfZmMpO1xcbmZzL2ZhdC9pbm9kZS5jLTE5OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjA5LjgyNDcxNDE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM0MDUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgRkFUIEZpbGVzeXN0ZW0gU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gdGhlIEZBVCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZmlsZSBvcGVyYXRpb25zLiBJIHNlZSBgZmF0X2ZyZWVgIC0gdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYGZpbGUuY2Agc291cmNlIGZpbGUgaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlbHkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgaW50ZXJuYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4sIHdlbGwsIGZyZWVpbmcgc29tZSBzb3J0IG9mIHJlc291cmNlLiBDb3VsZCBiZSBjbHVzdGVycywgZmlsZSBtZXRhZGF0YS4uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIGtub3cgZm9yIHN1cmUsIGJ1dCB0aGUgbmFtZSBnaXZlcyBhIHByZXR0eSBzdHJvbmcgaGludC5cblxuVGhlbiB0aGVyZSdzIGBmYXRfY2hhaW5fYWRkYC4gVGhhdCdzIGluIGBtaXNjLmNgLCBhZ2Fpbiwgd2l0aGluIHRoZSBgZnMvZmF0YCBkaXJlY3RvcnkuIFRoZSBcImNoYWluXCIgcGFydCBvZiB0aGUgbmFtZSBpcyBpbXBvcnRhbnQgaW4gRkFUIGJlY2F1c2UgdGhlIGZpbGVzeXN0ZW0gdXNlcyBhIGxpbmtlZCBsaXN0IG9mIGNsdXN0ZXIgbnVtYmVycyB0byByZXByZXNlbnQgYSBmaWxlJ3MgZGF0YS4gQWRkaW5nIHRvIGEgXCJjaGFpblwiIHByb2JhYmx5IG1lYW5zIGFwcGVuZGluZyBhIG5ldyBjbHVzdGVyIChvciBhIHNlcmllcyBvZiBjbHVzdGVycykgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZpbGUuIFNpbmNlIGl0J3MgaW4gYG1pc2MuY2AsIEknZCBndWVzcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkaW5nIGEgZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgdG8gdGhlIGZpbGVzeXN0ZW0gY29kZS5cblxuU28sIGluIG15IGhlYWQsIEknbSB0aGlua2luZy4uLiBgZmF0X2ZyZWVgIGxpa2VseSBoYW5kbGVzIGZyZWVpbmcgdXAgY2x1c3RlciBjaGFpbnMgb3Igc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gYSBmaWxlIGVudHJ5LCB3aGlsZSBgZmF0X2NoYWluX2FkZGAgcHJvYmFibHkgYXBwZW5kcyBibG9ja3MgKGNsdXN0ZXJzKSBvZiBkYXRhIHRvIGEgZmlsZS4gT25lIGZyZWVzLCB0aGUgb3RoZXIgYWRkcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlaXIgaW1wbGVtZW50YXRpb25zIHRvIGJlIGNlcnRhaW4sIGJ1dCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgcHJldHR5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MTQuNzg4MTIxNjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0ODI0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZmF0X2NoYWluX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToxNC44MzU0NzUzODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDE4ODk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGZhdF9jaGFpbl9hZGRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgaXMgdGhpcyBgZmF0X2NoYWluX2FkZGAgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSB0cnlpbmcgdG8gZGVjaXBoZXIgaG93IGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UuIEkgYW50aWNpcGF0ZSB0aGUgdXNhZ2UgcGF0dGVybiB3aWxsIGRpY3RhdGUgd2hhdCBraW5kIG9mIGFuYWx5c2lzIEknbGwgbmVlZC4gSWYgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBhIGhlYXZpbHkgdXNlZCBwYXRoLCBJJ2xsIHBheSBjbG9zZXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MjAuNTI5NjY2MzQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEzMjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfY2hhaW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2Rpci5jPTEzMjE9aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG4tLVxcbmZzL2ZhdC9kaXIuYy0xNDM0LVxcdFxcdH1cXG5mcy9mYXQvZGlyLmM6MTQzNTpcXHRcXHRlcnIgPSBmYXRfY2hhaW5fYWRkKGRpciwgY2x1c3RlciwgbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2Rpci5jLTE0MzYtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvZmF0L2ZhdC5oPTQ2Nj1leHRlcm4gaW50IGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9mYXQvZmF0Lmg6NDY3OmV4dGVybiBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2ZhdC5oLTQ2OC1leHRlcm4gdm9pZCBmYXRfdGltZV9mYXQydW5peChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuLS1cXG5mcy9mYXQvaW5vZGUuYz0xMDQ9aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZmF0L2lub2RlLmMtMTEyLVxcdCAqIGNsdXN0ZXIgaXMgd3JpdGVkICovXFxuZnMvZmF0L2lub2RlLmM6MTEzOlxcdGVyciA9IGZhdF9jaGFpbl9hZGQoaW5vZGUsIGNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9pbm9kZS5jLTExNC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L21pc2MuYz02OD1pbnQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9mYXQvbWlzYy5jLTEwMy0vKlxcbmZzL2ZhdC9taXNjLmM6MTA0OiAqIGZhdF9jaGFpbl9hZGQoKSBhZGRzIGEgbmV3IGNsdXN0ZXIgdG8gdGhlIGNoYWluIG9mIGNsdXN0ZXJzIHJlcHJlc2VudGVkXFxuZnMvZmF0L21pc2MuYy0xMDUtICogYnkgaW5vZGUuXFxuZnMvZmF0L21pc2MuYy0xMDYtICovXFxuZnMvZmF0L21pc2MuYzoxMDc6aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuZnMvZmF0L21pc2MuYy0xMDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyMC41NzI4MDE3NDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0MDcwMTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRkFUIENsdXN0ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgRkFUIGZpbGVzeXN0ZW0gaGFuZGxlcyBjbHVzdGVycywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBhbmQgZnJlZWluZyBvZiB0aGVtLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGZhdF9hZGRfY2x1c3RlcmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGJvdGggcmVseSBvbiBgZmF0X2NoYWluX2FkZGAuIFRoYXQncyBnb29kIHRvIGtub3c7IGl0IHBvaW50cyB0byBhIGNvbW1vbiBjb3JlIGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgZmlsZSBzcGFjZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnJlZWluZyBwcm9jZXNzLCBiZWNhdXNlIHRoYXQncyBqdXN0IGFzIGltcG9ydGFudCBmb3IgbWFpbnRhaW5pbmcgZmlsZSBzeXN0ZW0gaW50ZWdyaXR5LiBJdCBsb29rcyBsaWtlIGBmYXRfZnJlZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGF0IGFzcGVjdC4gSSBzaG91bGQgY2hlY2sgaG93IGl0J3MgYmVpbmcgdXNlZC4gSSB3aWxsIHplcm8gaW4gb24gYGZzL2ZhdC9maWxlLmNgIHRvIHNlZSB3aGVyZSB0aGUgYGZhdF9mcmVlYCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGNhbGxzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBmaWxlcyBhcmUgZGVsZXRlZCBvciB0cnVuY2F0ZWQsIGFuZCBob3cgdGhlIEZBVCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjI0LjcxMzUwNTU2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MTU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzEyLS8qIEZyZWUgYWxsIGNsdXN0ZXJzIGFmdGVyIHRoZSBza2lwJ3RoIGNsdXN0ZXIuICovXFxuZnMvZmF0L2ZpbGUuYzozMTM6c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcXG5mcy9mYXQvZmlsZS5jLTMxNC17XFxuLS1cXG5mcy9mYXQvZmlsZS5jLTM3OS1cXHQvKiBGcmVlaW5nIHRoZSByZW1haW5lZCBjbHVzdGVyIGNoYWluICovXFxuZnMvZmF0L2ZpbGUuYzozODA6XFx0cmV0dXJuIGZhdF9mcmVlX2NsdXN0ZXJzKGlub2RlLCBmcmVlX3N0YXJ0KTtcXG5mcy9mYXQvZmlsZS5jLTM4MS19XFxuLS1cXG5mcy9mYXQvZmlsZS5jPTM4Mz12b2lkIGZhdF90cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldClcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzk3LVxcbmZzL2ZhdC9maWxlLmM6Mzk4OlxcdGZhdF9mcmVlKGlub2RlLCBucl9jbHVzdGVycyk7XFxuZnMvZmF0L2ZpbGUuYy0zOTktXFx0ZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyNC43NjkxMjYwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNzgyNDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIEJsb2NrIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBmYXRfdHJ1bmNhdGVfYmxvY2tzYCBsZXZlcmFnZXMgYGZhdF9mcmVlYC4gU28sIHRoYXQncyBzdHJhaWdodGZvcndhcmQgLSB0cnVuY2F0aW9uIHJlbGllcyBvbiBmcmVlaW5nIHVwIGJsb2Nrcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBsZXQncyBkaWcgaW50byBgZmF0X2VudF93cml0ZWAuIFRoaXMgc2VlbXMgY3J1Y2lhbCwgYXBwZWFyaW5nIGluIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIElzIGBmYXRfZW50X3dyaXRlYCB0cnVseSB1c2VkIHdpdGhpbiBgZmF0X2ZyZWVgPyBBbmQsIGlzIGl0IGFsc28gYmVpbmcgdXNlZCB3aXRoaW4gYGZhdF9jaGFpbl9hZGRgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYD8gVGhpcyByZXF1aXJlcyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgRkFUIChGaWxlIEFsbG9jYXRpb24gVGFibGUpIGVudHJpZXMgdGhlbXNlbHZlcywgYW5kIGFyZSwgdGhlcmVmb3JlLCBjYWxsZWQgZHVyaW5nIHNldmVyYWwgZGlmZmVyZW50IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3Nlcy4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgYW5kIGtlZXBzIHRyYWNrIG9mIGFsbG9jYXRlZCBhbmQgZnJlZSBjbHVzdGVycyBvbiBhIEZBVCBmaWxlc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MjkuNTc2OTUzMzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDY5ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9lbnRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvZmF0Lmg9MzkyPWV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcXG5mcy9mYXQvZmF0LmgtMzkzLVxcdFxcdFxcdGludCBlbnRyeSk7XFxuZnMvZmF0L2ZhdC5oOjM5NDpleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXQuaC0zOTUtXFx0XFx0XFx0IGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KTtcXG4tLVxcbmZzL2ZhdC9mYXRlbnQuYz0zODA9c3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXFxuLS1cXG5mcy9mYXQvZmF0ZW50LmMtNDE0LVxcbmZzL2ZhdC9mYXRlbnQuYzo0MTU6aW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXRlbnQuYy00MTYtXFx0XFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcXG4tLVxcbmZzL2ZhdC9maWxlLmM9MzEzPXN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTM2NS1cXHRcXHR9IGVsc2UgaWYgKHJldCBcXHUwMDNlIDApIHtcXG5mcy9mYXQvZmlsZS5jOjM2NjpcXHRcXHRcXHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxcbmZzL2ZhdC9maWxlLmMtMzY3LVxcdFxcdFxcdFxcdFxcdCAgICB3YWl0KTtcXG4tLVxcbmZzL2ZhdC9taXNjLmM9MTA3PWludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbi0tXFxuZnMvZmF0L21pc2MuYy0xMzYtXFxuZnMvZmF0L21pc2MuYzoxMzc6XFx0XFx0XFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXFxuZnMvZmF0L21pc2MuYy0xMzgtXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyOS42NTQ0MjgzMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzI4NjI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgZmF0X2VudF93cml0ZWAgYW5kIGl0IHNlZW1zIGxpa2UgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyBpbmNvbXBsZXRlLiBUaGlzIHJvdXRpbmUgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IHV0aWxpemVkIGluIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCwgYnV0IEknbSBjZXJ0YWluIGl0J3MgdXNlZCBlbHNld2hlcmUuXG5cbldoYXQgYWJvdXQgYGZhdF9hbGxvY19jbHVzdGVyc2AgYW5kIGBmYXRfZnJlZV9jbHVzdGVyc2A/IFN1cmVseSB0aGV5J3JlIGludm9sdmVkIGluIG1vZGlmeWluZyBGQVQgZW50cmllcy4gVGhpcyByZXF1aXJlcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdmVybGFwIGluIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBmYXRfYWxsb2NfY2x1c3RlcnNgIG5vdywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvZmF0L2ZhdGVudC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlcyBnaXZlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gd3JpdGUgRkFUIGVudHJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozMy4zMjE3MTY5NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzU1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9hbGxvY19jbHVzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9kaXIuYz0xMTczPWludCBmYXRfYWxsb2NfbmV3X2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbi0tXFxuZnMvZmF0L2Rpci5jLTExODMtXFxuZnMvZmF0L2Rpci5jOjExODQ6XFx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGRpciwgXFx1MDAyNmNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9kaXIuYy0xMTg1LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mYXQvZGlyLmM9MTIzOD1zdGF0aWMgaW50IGZhdF9hZGRfbmV3X2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHZvaWQgKnNsb3RzLCBpbnQgbnJfc2xvdHMsXFxuLS1cXG5mcy9mYXQvZGlyLmMtMTI1Ny1cXG5mcy9mYXQvZGlyLmM6MTI1ODpcXHRlcnIgPSBmYXRfYWxsb2NfY2x1c3RlcnMoZGlyLCBjbHVzdGVyLCAqbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2Rpci5jLTEyNTktXFx0aWYgKGVycilcXG4tLVxcbmZzL2ZhdC9mYXQuaD0zOTQ9ZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcXG5mcy9mYXQvZmF0LmgtMzk1LVxcdFxcdFxcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XFxuZnMvZmF0L2ZhdC5oOjM5NjpleHRlcm4gaW50IGZhdF9hbGxvY19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmNsdXN0ZXIsXFxuZnMvZmF0L2ZhdC5oLTM5Ny1cXHRcXHRcXHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XFxuLS1cXG5mcy9mYXQvZmF0ZW50LmM9NDY4PXN0YXRpYyB2b2lkIGZhdF9jb2xsZWN0X2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCAqbnJfYmhzLFxcbi0tXFxuZnMvZmF0L2ZhdGVudC5jLTQ4NS1cXG5mcy9mYXQvZmF0ZW50LmM6NDg2OmludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcXG5mcy9mYXQvZmF0ZW50LmMtNDg3LXtcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jPTEwND1pbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mYXQvaW5vZGUuYy0xMDctXFxuZnMvZmF0L2lub2RlLmM6MTA4OlxcdGVyciA9IGZhdF9hbGxvY19jbHVzdGVycyhpbm9kZSwgXFx1MDAyNmNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9pbm9kZS5jLTEwOS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozMy4zNjQ0NzUzNDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzY4NTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGluIGBmcy9mYXQvZmF0ZW50LmNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGZhdF9hbGxvY19jbHVzdGVyc2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgY2x1c3RlciBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYGZzL2ZhdC9mYXRlbnQuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRyaWNhY2llcyBvZiBmaW5kaW5nIGZyZWUgY2x1c3RlcnMgb24gdGhlIGRpc2ssIG1hcmtpbmcgdGhlbSBhcyBhbGxvY2F0ZWQgaW4gdGhlIEZBVCwgcG90ZW50aWFsbHkgZXh0ZW5kaW5nIHRoZSBmaWxlIHNpemUsIGFuZCBtYW5hZ2luZyBhbnkgY2hhaW4gb2YgY2x1c3RlcnMuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGVzcGVjaWFsbHkgY29uY2VybmluZyBmcmFnbWVudGF0aW9uIG9yIHRoZSBzcGVlZCBvZiBhbGxvY2F0aW9uIGZvciBsYXJnZSBmaWxlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIFRpbWUgdG8gZ2V0IGNvZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozNy40NzgxNjM5NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZhdC9mYXRlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg2OlxcdGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcXG4gNDg3OlxcdHtcXG4gNDg4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gNDg5OlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDQ5MDpcXHRcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IHNiaS1cXHUwMDNlZmF0ZW50X29wcztcXG4gNDkxOlxcdFxcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50LCBwcmV2X2VudDtcXG4gNDkyOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xcbiA0OTM6XFx0XFx0aW50IGksIGNvdW50LCBlcnIsIG5yX2JocywgaWR4X2NsdXM7XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdFxcdEJVR19PTihucl9jbHVzdGVyIFxcdTAwM2UgKE1BWF9CVUZfUEVSX1BBR0UgLyAyKSk7XFx0LyogZml4ZWQgbGltaXQgKi9cXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0bG9ja19mYXQoc2JpKTtcXG4gNDk4OlxcdFxcdGlmIChzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc2JpLVxcdTAwM2VmcmVlX2NsdXNfdmFsaWQgXFx1MDAyNlxcdTAwMjZcXG4gNDk5OlxcdFxcdCAgICBzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgXFx1MDAzYyBucl9jbHVzdGVyKSB7XFxuIDUwMDpcXHRcXHRcXHR1bmxvY2tfZmF0KHNiaSk7XFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gNTAyOlxcdFxcdH1cXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0ZXJyID0gbnJfYmhzID0gaWR4X2NsdXMgPSAwO1xcbiA1MDU6XFx0XFx0Y291bnQgPSBGQVRfU1RBUlRfRU5UO1xcbiA1MDY6XFx0XFx0ZmF0ZW50X2luaXQoXFx1MDAyNnByZXZfZW50KTtcXG4gNTA3OlxcdFxcdGZhdGVudF9pbml0KFxcdTAwMjZmYXRlbnQpO1xcbiA1MDg6XFx0XFx0ZmF0ZW50X3NldF9lbnRyeShcXHUwMDI2ZmF0ZW50LCBzYmktXFx1MDAzZXByZXZfZnJlZSArIDEpO1xcbiA1MDk6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2Mgc2JpLVxcdTAwM2VtYXhfY2x1c3Rlcikge1xcbiA1MTA6XFx0XFx0XFx0aWYgKGZhdGVudC5lbnRyeSBcXHUwMDNlPSBzYmktXFx1MDAzZW1heF9jbHVzdGVyKVxcbiA1MTE6XFx0XFx0XFx0XFx0ZmF0ZW50LmVudHJ5ID0gRkFUX1NUQVJUX0VOVDtcXG4gNTEyOlxcdFxcdFxcdGZhdGVudF9zZXRfZW50cnkoXFx1MDAyNmZhdGVudCwgZmF0ZW50LmVudHJ5KTtcXG4gNTEzOlxcdFxcdFxcdGVyciA9IGZhdF9lbnRfcmVhZF9ibG9jayhzYiwgXFx1MDAyNmZhdGVudCk7XFxuIDUxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA1MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdFxcdC8qIEZpbmQgdGhlIGZyZWUgZW50cmllcyBpbiBhIGJsb2NrICovXFxuIDUxODpcXHRcXHRcXHRkbyB7XFxuIDUxOTpcXHRcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VlbnRfZ2V0KFxcdTAwMjZmYXRlbnQpID09IEZBVF9FTlRfRlJFRSkge1xcbiA1MjA6XFx0XFx0XFx0XFx0XFx0aW50IGVudHJ5ID0gZmF0ZW50LmVudHJ5O1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRcXHRcXHRcXHQvKiBtYWtlIHRoZSBjbHVzdGVyIGNoYWluICovXFxuIDUyMzpcXHRcXHRcXHRcXHRcXHRvcHMtXFx1MDAzZWVudF9wdXQoXFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YpO1xcbiA1MjQ6XFx0XFx0XFx0XFx0XFx0aWYgKHByZXZfZW50Lm5yX2JocylcXG4gNTI1OlxcdFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlZW50X3B1dChcXHUwMDI2cHJldl9lbnQsIGVudHJ5KTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0XFx0XFx0XFx0ZmF0X2NvbGxlY3RfYmhzKGJocywgXFx1MDAyNm5yX2JocywgXFx1MDAyNmZhdGVudCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdFxcdFxcdFxcdHNiaS1cXHUwMDNlcHJldl9mcmVlID0gZW50cnk7XFxuIDUzMDpcXHRcXHRcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VmcmVlX2NsdXN0ZXJzICE9IC0xKVxcbiA1MzE6XFx0XFx0XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VmcmVlX2NsdXN0ZXJzLS07XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdFxcdFxcdFxcdGNsdXN0ZXJbaWR4X2NsdXNdID0gZW50cnk7XFxuIDUzNDpcXHRcXHRcXHRcXHRcXHRpZHhfY2x1cysrO1xcbiA1MzU6XFx0XFx0XFx0XFx0XFx0aWYgKGlkeF9jbHVzID09IG5yX2NsdXN0ZXIpXFxuIDUzNjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0XFx0XFx0XFx0LypcXG4gNTM5OlxcdFxcdFxcdFxcdFxcdCAqIGZhdF9jb2xsZWN0X2JocygpIGdldHMgcmVmLWNvdW50IG9mIGJocyxcXG4gNTQwOlxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHByZXZfZW50LlxcbiA1NDE6XFx0XFx0XFx0XFx0XFx0ICovXFxuIDU0MjpcXHRcXHRcXHRcXHRcXHRwcmV2X2VudCA9IGZhdGVudDtcXG4gNTQzOlxcdFxcdFxcdFxcdH1cXG4gNTQ0OlxcdFxcdFxcdFxcdGNvdW50Kys7XFxuIDU0NTpcXHRcXHRcXHRcXHRpZiAoY291bnQgPT0gc2JpLVxcdTAwM2VtYXhfY2x1c3RlcilcXG4gNTQ2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NDc6XFx0XFx0XFx0fSB3aGlsZSAoZmF0X2VudF9uZXh0KHNiaSwgXFx1MDAyNmZhdGVudCkpO1xcbiA1NDg6XFx0XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHQvKiBDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgZnJlZSBlbnRyaWVzICovXFxuIDU1MTpcXHRcXHRzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgPSAwO1xcbiA1NTI6XFx0XFx0c2JpLVxcdTAwM2VmcmVlX2NsdXNfdmFsaWQgPSAxO1xcbiA1NTM6XFx0XFx0ZXJyID0gLUVOT1NQQztcXG4gNTU0OlxcdFxcbiA1NTU6XFx0b3V0OlxcbiA1NTY6XFx0XFx0dW5sb2NrX2ZhdChzYmkpO1xcbiA1NTc6XFx0XFx0bWFya19mc2luZm9fZGlydHkoc2IpO1xcbiA1NTg6XFx0XFx0ZmF0ZW50X2JyZWxzZShcXHUwMDI2ZmF0ZW50KTtcXG4gNTU5OlxcdFxcdGlmICghZXJyKSB7XFxuIDU2MDpcXHRcXHRcXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpXFxuIDU2MTpcXHRcXHRcXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBucl9iaHMpO1xcbiA1NjI6XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDU2MzpcXHRcXHRcXHRcXHRlcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgYmhzLCBucl9iaHMpO1xcbiA1NjQ6XFx0XFx0fVxcbiA1NjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2JoczsgaSsrKVxcbiA1NjY6XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIDU2NzpcXHRcXG4gNTY4OlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaWR4X2NsdXMpXFxuIDU2OTpcXHRcXHRcXHRmYXRfZnJlZV9jbHVzdGVycyhpbm9kZSwgY2x1c3RlclswXSk7XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdHJldHVybiBlcnI7XFxuIDU3MjpcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3RlcilcXG4gNTc1OlxcdHtcXG4gNTc2OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gNTc3OlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDU3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IHNiaS1cXHUwMDNlZmF0ZW50X29wcztcXG4gNTc5OlxcdFxcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50O1xcbiA1ODA6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbTUFYX0JVRl9QRVJfUEFHRV07XFxuIDU4MTpcXHRcXHRpbnQgaSwgZXJyLCBucl9iaHM7XFxuIDU4MjpcXHRcXHRpbnQgZmlyc3RfY2wgPSBjbHVzdGVyLCBkaXJ0eV9mc2luZm8gPSAwO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRucl9iaHMgPSAwO1xcbiA1ODU6XFx0XFx0ZmF0ZW50X2luaXQoXFx1MDAyNmZhdGVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjM3LjQ3ODI2NzAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUyNjg5MzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbjogaXQgY2hhbmdlcyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBmYXRfbWlycm9yX2Joc2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBmdW5jdGlvbiBoYXMgYSBzaW1pbGFyIHBhdHRlcm4sIGNhbGxpbmcgYGZhdF9taXJyb3JfYmhzYCBidXQgaXQgKmRvZXNuJ3QqIHJldmVydCBjaGFuZ2VzIG9uIGZhaWx1cmUuIEl0IGp1c3QgZnJlZXMgdGhlIGFsbG9jYXRlZCBjbHVzdGVycyBhdCB0aGUgZW5kIGlmIHRoZXJlJ3MgYW4gZXJyb3IuXG5cblRoZSBjaGFuZ2UgdG8gYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBrZXkuIE5vdywgKmlmKiBgZmF0X21pcnJvcl9iaHNgIGZhaWxzLCB0aGUgcGF0Y2ggYXR0ZW1wdHMgdG8gcmV2ZXJ0IHRoZSBjaGFuZ2UgYnkgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgYGVudF9wdXRgIGZ1bmN0aW9uLCBhbmQgc3luY3MgdGhlIGJ1ZmZlcnMuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNoYW5nZSBpbiBob3cgZXJyb3JzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN5c3RlbSByZW1haW5zIGNvbnNpc3RlbnQgZXZlbiB3aGVuIG1pcnJvcmluZyBmYWlscy5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgbmV3IGJlaGF2aW9yIG1hbmlmZXN0PyBgZmF0X2VudF93cml0ZWAgaXRzZWxmIGlzbid0IGV4cG9ydGVkLCBidXQgaXQncyB1c2VkIGludGVybmFsbHkgYnkgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLiBgZmF0X2ZyZWVgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGZhdF90cnVuY2F0ZV9ibG9ja3NgIGFuZCBgZmF0X2ZhbGxvY2F0ZWAuIGBmYXRfY2hhaW5fYWRkYCBpcyB1c2VkIGJ5IGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgZmF0X2FkZF9lbnRyaWVzYC4gVGhvc2UgYXJlIHRoZW4gY2FsbGVkIGJ5IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucy4uLiBsaWtlIGBmYXRfZ2V0X2Jsb2NrYCwgYHZmYXRfYWRkX2VudHJ5YCwgYW5kIGBtc2Rvc19hZGRfZW50cnlgLlxuXG5TbyB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIGBmYXRfZmFsbG9jYXRlYCwgYGZhdF90cnVuY2F0ZV9ibG9ja3NgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfZXZpY3RfaW5vZGVgKSwgYW5kIGBmYXRfYWRkX2NsdXN0ZXJgICh2aWEgYGZhdF9nZXRfYmxvY2tgKS4gRmluYWxseSwgYGZhdF9hZGRfZW50cmllc2AgaXMgYWxzbyBhIHRhcmdldCwgYW5kIGl0IGlzIHVzZWQgYnkgYm90aCBgdmZhdF9hZGRfZW50cnlgIGFuZCBgbXNkb3NfYWRkX2VudHJ5YC5cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyBgZmF0X2ZhbGxvY2F0ZWAgYW5kIGBmYXRfc2V0YXR0cmAg4oCTIG1ha2Ugc3VyZSB3ZSBoaXQgdGhvc2UgcXVpY2tseS4gVGhlbiwgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIHVwIHNvbWUgdGVzdCBjYXNlcyB0aGF0IGludGVudGlvbmFsbHkgdHJpZ2dlciBtaXJyb3IgZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTIuMDA1MTYyODY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDUzMjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfZmFsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2ZpbGUuYy0yMi1cXG5mcy9mYXQvZmlsZS5jOjIzOnN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbmZzL2ZhdC9maWxlLmMtMjQtXFx0XFx0XFx0ICBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKTtcXG4tLVxcbmZzL2ZhdC9maWxlLmM9MjA1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjE1LVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuZnMvZmF0L2ZpbGUuYzoyMTY6XFx0LmZhbGxvY2F0ZVxcdD0gZmF0X2ZhbGxvY2F0ZSxcXG5mcy9mYXQvZmlsZS5jLTIxNy1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTIyMD1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjYyLSAqL1xcbmZzL2ZhdC9maWxlLmM6MjYzOnN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbmZzL2ZhdC9maWxlLmMtMjY0LVxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTIuMDc5Njk3NDA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNDg3MzA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIFN5bWJvbCBDb25zaWRlcmF0aW9uKipcblxuUmlnaHQsIGBmYXRfZmFsbG9jYXRlYC4uLiB0aGF0J3MgYSBwcmV0dHkgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgZ290IGNsZWFyIGltcGxpY2F0aW9ucyBpbiB0ZXJtcyBvZiBmaWxlIGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBmb3IgbWFuaXB1bGF0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IGZpZWxkIC0gdGhlIHVzZXIgY2FuIHByb3ZpZGUgdGhlaXIgZmllbGQgaGVyZV0uIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlc3lzdGVtIGhhbmRsZXMgcHJlLWFsbG9jYXRpb24sIHNwYXJzZSBmaWxlcywgYW5kIGdlbmVyYWxseSBtYW5hZ2luZyBkaXNrIHNwYWNlLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGZhdF9jcmVhdGVgLlxuXG5Ob3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGBmYXRfc2V0YXR0cmA/IFdoaWxlIGBmYXRfZmFsbG9jYXRlYCBkZWFscyB3aXRoIGFsbG9jYXRpb24gaXRzZWxmLCBgZmF0X3NldGF0dHJgIGlzIHBvdGVudGlhbGx5IGp1c3QgYXMgaW50ZXJlc3Rpbmcgb3IgbWF5YmUgbW9yZSBzby4gSXQgaGFuZGxlcyBhdHRyaWJ1dGUgc2V0dGluZyBvbiBmaWxlcywgYW5kIHRoYXQgY291bGQgb3BlbiB1cCBhIG5ldyBhdmVudWUgb2YgYXR0YWNrIGluIHNvbWUgc2NlbmFyaW9zLiBJdCBjb3VsZCBiZSB0aWVkIHRvIHBlcm1pc3Npb24gZXNjYWxhdGlvbiBvciBtYWxpY2lvdXMgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBhbmQgZGF0YSBoaWRpbmcuIEkgbmVlZCB0byBrZWVwIGJvdGggb2YgdGhlc2UgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MDEuMjI4NDMwMjgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkxNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfc2V0YXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD00MDY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvZmF0L2ZhdC5oOjQwNzpleHRlcm4gaW50IGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZmF0L2ZhdC5oLTQwOC1cXHRcXHQgICAgICAgc3RydWN0IGlhdHRyICphdHRyKTtcXG4tLVxcbmZzL2ZhdC9maWxlLmM9Mzc9c3RhdGljIGludCBmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMTAwLVxcdC8qIFRoaXMgTVVTVCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpcnJldmVyc2libGUuLi4gKi9cXG5mcy9mYXQvZmlsZS5jOjEwMTpcXHRlcnIgPSBmYXRfc2V0YXR0cihmaWxlX21udF9pZG1hcChmaWxlKSwgZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeSwgXFx1MDAyNmlhKTtcXG5mcy9mYXQvZmlsZS5jLTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz00OTc9c3RhdGljIGludCBmYXRfYWxsb3dfc2V0X3RpbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTUxNy1cXG5mcy9mYXQvZmlsZS5jOjUxODppbnQgZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9mYXQvZmlsZS5jLTUxOS1cXHRcXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTYwNy19XFxuZnMvZmF0L2ZpbGUuYzo2MDg6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X3NldGF0dHIpO1xcbmZzL2ZhdC9maWxlLmMtNjA5LVxcbmZzL2ZhdC9maWxlLmM9NjEwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvZmF0L2ZpbGUuYzo2MTE6XFx0LnNldGF0dHJcXHQ9IGZhdF9zZXRhdHRyLFxcbmZzL2ZhdC9maWxlLmMtNjEyLVxcdC5nZXRhdHRyXFx0PSBmYXRfZ2V0YXR0cixcXG4tLVxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbXNkb3NfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYy02NDYtXFx0LnJlbmFtZVxcdFxcdD0gbXNkb3NfcmVuYW1lLFxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jOjY0NzpcXHQuc2V0YXR0clxcdD0gZmF0X3NldGF0dHIsXFxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ4LVxcdC5nZXRhdHRyXFx0PSBmYXRfZ2V0YXR0cixcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM9MTE3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmZhdF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4NS1cXHQucmVuYW1lXFx0XFx0PSB2ZmF0X3JlbmFtZTIsXFxuZnMvZmF0L25hbWVpX3ZmYXQuYzoxMTg2OlxcdC5zZXRhdHRyXFx0PSBmYXRfc2V0YXR0cixcXG5mcy9mYXQvbmFtZWlfdmZhdC5jLTExODctXFx0LmdldGF0dHJcXHQ9IGZhdF9nZXRhdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS4yNzEzNDkwODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTU5ODQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgRkFUIEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBmYXRfc2V0YXR0cmAgaXMgY2xlYXJseSBleHBvc2VkIGFzIGFuIGlub2RlIG9wZXJhdGlvbiDigJMgdGhhdCBtYWtlcyBzZW5zZSBmb3IgYXR0cmlidXRlIG1vZGlmaWNhdGlvbi4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3b25kZXJpbmcgYWJvdXQgYW5vdGhlciBrZXkgZnVuY3Rpb246IGBmYXRfYWRkX2NsdXN0ZXJgLiBXaGVyZSBkb2VzIHRoYXQgZml0IGluIHRoZSBpbm9kZSBvcGVyYXRpb25zIHNjaGVtZT8gSXMgaXQgYWxzbyBkaXJlY3RseSB1c2VkIGluIHRoYXQgY2FwYWNpdHksIG9yIGlzIGl0IGhhbmRsZWQgZGlmZmVyZW50bHkgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGludGVybmFscz8gSSBuZWVkIHRvIGNsYXJpZnkgaXRzIHJvbGUgaW4gdGhlIGNvbnRleHQgb2YgaW5vZGUgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNC40MTA5NTAwNzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9hZGRfY2x1c3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD00Mzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZhdF9kaXJfaGFzaChpbnQgbG9nc3RhcnQpXFxuLS1cXG5mcy9mYXQvZmF0LmgtNDQyLX1cXG5mcy9mYXQvZmF0Lmg6NDQzOmV4dGVybiBpbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ZhdC9mYXQuaC00NDQtXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjk0LVxcdFxcdHdoaWxlIChucl9jbHVzdGVyLS0gXFx1MDAzZSAwKSB7XFxuZnMvZmF0L2ZpbGUuYzoyOTU6XFx0XFx0XFx0ZXJyID0gZmF0X2FkZF9jbHVzdGVyKGlub2RlKTtcXG5mcy9mYXQvZmlsZS5jLTI5Ni1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L2lub2RlLmM9Njc9c3RhdGljIHN0cnVjdCBmYXRfZmxvcHB5X2RlZmF1bHRzIHtcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTEwMy1cXG5mcy9mYXQvaW5vZGUuYzoxMDQ6aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2ZhdC9pbm9kZS5jLTEwNS17XFxuLS1cXG5mcy9mYXQvaW5vZGUuYz0xMTk9c3RhdGljIGlubGluZSBpbnQgX19mYXRfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTE1NC1cXHRcXHQvKiBUT0RPOiBtdWx0aXBsZSBjbHVzdGVyIGFsbG9jYXRpb24gd291bGQgYmUgZGVzaXJhYmxlLiAqL1xcbmZzL2ZhdC9pbm9kZS5jOjE1NTpcXHRcXHRlcnIgPSBmYXRfYWRkX2NsdXN0ZXIoaW5vZGUpO1xcbmZzL2ZhdC9pbm9kZS5jLTE1Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNC40NTQ4NzU5NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2Mzk1NDg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBGQVQgQmxvY2sgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIGNvZGUsIGZvY3VzaW5nIG9uIGJsb2NrIGFsbG9jYXRpb24uIEkgc2VlIHRoYXQgYGZhdF9hZGRfY2x1c3RlcmAgaXMgYSBrZXkgZnVuY3Rpb247IGl0J3MgdXRpbGl6ZWQgaW4gYm90aCBgZmF0X2ZhbGxvY2F0ZWAgKGZvciBwcmUtYWxsb2NhdGluZyBzcGFjZSwgd2hpY2ggSSB1bmRlcnN0YW5kIHdlbGwpIGFuZCwgaW50ZXJlc3RpbmdseSwgYF9fZmF0X2dldF9ibG9ja2AuIE5vdywgYF9fZmF0X2dldF9ibG9ja2AgaXMgdGhlIGNvcmUgb2YgcmV0cmlldmluZyBibG9jayBpbmZvcm1hdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGJ5IHRoZSBtb3JlIGZhbWlsaWFyIGBmYXRfZ2V0X2Jsb2NrYCBhbmQgYGZhdF9nZXRfYmxvY2tfYm1hcGAgY2FsbHMuXG5cbmBmYXRfZ2V0X2Jsb2NrYCwgaW4gdHVybiwgaXMgcHJldHR5IHBlcnZhc2l2ZS4gSXQncyBjYWxsZWQgZXh0ZW5zaXZlbHksIHBvcHVsYXRpbmcgdGhlIGRhdGEgYmxvY2tzIGR1cmluZyByZWFkcyBhbmQgd3JpdGVzLCBmcm9tIGxvdy1sZXZlbCBmb2xpbyBvcGVyYXRpb25zIGxpa2UgYGZhdF9yZWFkX2ZvbGlvYCwgdGhyb3VnaCB3cml0ZSBvcGVyYXRpb25zIGxpa2UgYGZhdF93cml0ZV9iZWdpbmAgYW5kIGBmYXRfd3JpdGVwYWdlc2AuXG5cbk5vdywgdGhhdCBicmluZ3MgdG8gbWluZCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBkb2VzIGBmYXRfYWRkX2VudHJpZXNgIGZpdCBpbnRvIHRoaXMgc2NoZW1lPyBUaGlzIGZ1bmN0aW9uIGFkZHMgZGlyZWN0b3J5IGVudHJpZXMgdG8gdGhlIGZpbGUsIGFuZCB0aGF0J3Mgb2Z0ZW4gYSBjcnVjaWFsIHBvaW50IHdoZW4gYWxsb2NhdGluZyBibG9ja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgX19mYXRfZ2V0X2Jsb2NrYC4gSXMgaXQgdXNlZCAqaW4qIHRoZXNlIGZ1bmN0aW9ucywgb3IgaXMgaXQgYSBzZXBhcmF0ZSBwcm9jZXNzPyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gZXhwbG9yZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjE3LjA5NDQyNzY3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MTEzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2FkZF9lbnRyaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxcbi0tXFxuZnMvZmF0L2Rpci5jLTEzMjAtXFxuZnMvZmF0L2Rpci5jOjEzMjE6aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG5mcy9mYXQvZGlyLmMtMTMyMi1cXHRcXHQgICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbi0tXFxuZnMvZmF0L2Rpci5jLTE0NjYtfVxcbmZzL2ZhdC9kaXIuYzoxNDY3OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9hZGRfZW50cmllcyk7XFxuLS1cXG5mcy9mYXQvZmF0Lmg9MzQyPWV4dGVybiBpbnQgZmF0X2FsbG9jX25ld19kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuZnMvZmF0L2ZhdC5oOjM0MzpleHRlcm4gaW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG5mcy9mYXQvZmF0LmgtMzQ0LVxcdFxcdFxcdCAgIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbyk7XFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYz0yMzA9c3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYy0yNTItXFxuZnMvZmF0L25hbWVpX21zZG9zLmM6MjUzOlxcdGVyciA9IGZhdF9hZGRfZW50cmllcyhkaXIsIFxcdTAwMjZkZSwgMSwgc2luZm8pO1xcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jLTI1NC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYz02NTQ9c3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYy02NzQtXFxuZnMvZmF0L25hbWVpX3ZmYXQuYzo2NzU6XFx0ZXJyID0gZmF0X2FkZF9lbnRyaWVzKGRpciwgc2xvdHMsIG5yX3Nsb3RzLCBzaW5mbyk7XFxuZnMvZmF0L25hbWVpX3ZmYXQuYy02NzYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MTcuMTM4ODQxNDY4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODUzNTQxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gS2V5IEZBVCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIGNvZGUuIEkgdGhpbmsgYGZhdF9hZGRfZW50cmllc2AgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBmb2N1cyBzeW1ib2wuIEl0J3MgdXNlZCBpbiB0aGUgYG1zZG9zX2FkZF9lbnRyeWAgYW5kIGB2ZmF0X2FkZF9lbnRyeWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgdGhlIHdvcmtob3JzZXMgd2hlbiBuZXcgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQsIHJpZ2h0PyBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqY3JpdGljYWwqIHBvaW50IGluIHRoZSBwcm9jZXNzLlxuXG5HaXZlbiB0aGF0LCBoZXJlIGFyZSBzb21lIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFzIHdvcnRoeSBvZiBjbG9zZXIgaW5zcGVjdGlvbiwgYW5kIG1heSBzZXJ2ZSBhcyBlcXVhbGx5IGNvbXBlbGxpbmcgc3ltYm9sczpcblxuKiAgIGBmYXRfZmFsbG9jYXRlYFxuKiAgIGBmYXRfc2V0YXR0cmBcbiogICBgZmF0X2FkZF9lbnRyaWVzYCAod2UgYWxyZWFkeSBrbm93IHRoaXMgb25lLCBidXQgSSdtIGluY2x1ZGluZyBpdCBmb3IgY29tcGxldGVuZXNzKVxuKiAgIGBmYXRfYWRkX2NsdXN0ZXJgXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYGZhdF9hZGRfY2x1c3RlcmAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggaXRzIHZpc2liaWxpdHkgdG8gZGV0ZXJtaW5lIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgdG8gb3RoZXIgZWxlbWVudHMgb2YgdGhlIGNvZGUuIFRoYXQgd2lsbCBpbmZsdWVuY2Ugd2hlcmUgaXQgc2l0cywgaW4gdGVybXMgb2YgYnJvYWRlciBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjoyMi44MjQxOTc4MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzM5MjYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmYXRfYWRkX2NsdXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MjIuODY5NTQyNTcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjA2MDI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gbGlzdCwgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9yaWdpbmFsIGNvZGUgbW9kaWZpY2F0aW9uIHdhcyBpbiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL2ZhdC9pbm9kZS5jYCwgYnV0IHRoYXQgaXNuJ3QgZXhwb3J0ZWQuIExldCdzIHNlZS4uLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgYGZhdF9mYWxsb2NhdGVgLiBJdCdzIGRlZmluZWQgYXMgc3RhdGljIGluIGBmcy9mYXQvZmlsZS5jYCwgd2hpY2ggbWFrZXMgaXQgYSBoZWxwZXIuIEhvd2V2ZXIsIGBmYXRfZmlsZV9vcGVyYXRpb25zYCB1c2VzIGl0IHdoaWNoIG1lYW5zIGl0IG5lZWRzIHRvIGV4aXN0IGFzIGEgZGlzY3JldGUgc3ltYm9sIGFuZCBub3QgYmUgaW5saW5lZC4gU28gbWF5YmUgdGhhdCdzIGEgZ29vZCBvbmUgdG8gaW5jbHVkZT9cblxuSG9sZCBvbiwgSSBzZWUgYGZhdF9zZXRhdHRyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYXJlIGV4cG9ydGVkLCB3aGljaCBtYWtlcyB0aGVtIEFQSSBlbnRyeXBvaW50cy4gIGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLlxuXG5MZXQgbWUgcmV2aXNpdCBgZmF0X2VudF93cml0ZWAuIEl0J3MgYWxzbyBub24tc3RhdGljLiBTaW5jZSB0aGF0IHdhcyBtb2RpZmllZCwgYW5kIGl0IGlzIGEgbm9uLXN0YXRpYyBoZWxwZXIuXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgZmF0X2VudF93cml0ZWAgaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzIGEgaGVscGVyLiBgZmF0X2ZhbGxvY2F0ZWAgaXMgc3RhdGljLCBidXQgaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYGZhdF9maWxlX29wZXJhdGlvbnNgLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIGFuZCBpdCBpcyB1c2VkIGFzIGFuIEFQSSBlbnRyeXBvaW50LiBBbmQgYGZhdF9zZXRhdHRyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBgZmF0X2ZyZWVfY2x1c3RlcnNgIGlzIGV4cG9ydGVkIHRvby5cblxuSSB0aGluayB0aGUgYmVzdCBsaXN0LCBjb25zaWRlcmluZyBhbGwgdGhlIG51YW5jZXMsIHNob3VsZCBiZTpcblxuKiAgIGBmYXRfZW50X3dyaXRlYFxuKiAgIGBmYXRfZmFsbG9jYXRlYCAoY29uc2lkZXJpbmcgdGhlIG5vbi1pbmxpbmluZyBkdWUgdG8gZnVuY3Rpb24gcG9pbnRlciB1c2FnZSBpbiBgZmF0X2ZpbGVfb3BlcmF0aW9uc2ApXG4qICAgYGZhdF9zZXRhdHRyYFxuKiAgIGBmYXRfYWRkX2VudHJpZXNgXG4qICAgYGZhdF9hZGRfY2x1c3RlcmBcblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MzIuNzMwMTQ3Mzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZhdC9maWxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA1OlxcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gMjA2OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIDIwNzpcXHRcXHQucmVhZF9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiAyMDg6XFx0XFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbiAyMDk6XFx0XFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gMjEwOlxcdFxcdC5yZWxlYXNlXFx0PSBmYXRfZmlsZV9yZWxlYXNlLFxcbiAyMTE6XFx0XFx0LnVubG9ja2VkX2lvY3RsXFx0PSBmYXRfZ2VuZXJpY19pb2N0bCxcXG4gMjEyOlxcdFxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIDIxMzpcXHRcXHQuZnN5bmNcXHRcXHQ9IGZhdF9maWxlX2ZzeW5jLFxcbiAyMTQ6XFx0XFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiAyMTU6XFx0XFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gMjE2OlxcdFxcdC5mYWxsb2NhdGVcXHQ9IGZhdF9mYWxsb2NhdGUsXFxuIDIxNzpcXHRcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIDIxODpcXHR9O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRzdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4gMjIxOlxcdHtcXG4gMjIyOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4gMjIzOlxcdFxcdGxvZmZfdCBzdGFydCA9IGlub2RlLVxcdTAwM2VpX3NpemUsIGNvdW50ID0gc2l6ZSAtIGlub2RlLVxcdTAwM2VpX3NpemU7XFxuIDIyNDpcXHRcXHRpbnQgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjozMi43MzAyMjcwNDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAxODMxNDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGQVQgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIGBmYXRfZmFsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQncyAqbm90KiBpbmxpbmVkLiBXZSBjYW4ndCByZWx5IG9uIGlubGluaW5nIGhlcmUuIExldCdzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuXG5cblJpZ2h0LCBgRkFUX0ZTYCwgYE1TRE9TX0ZTYCwgYW5kIGBWRkFUX0ZTYC4gSSdsbCBpbmNsdWRlIGFsbCB0aHJlZS4gTWFrZXMgc2Vuc2U7IHRoZXNlIGFyZSB0aGUgY29yZSBGQVQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9ucy5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgbG9naWMgYmVoaW5kIHRoaXMuIEFoLCB5ZXMsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGZhdF9lbnRfd3JpdGVgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgcmV2ZXJ0aW5nIHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB0aGVyZSdzIGEgZmFpbHVyZSB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFULiBUaGlzIGlzIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2U6IGl0J3MgYW4gZXJyb3IgaGFuZGxpbmcgaW1wcm92ZW1lbnQgdGhhdCBpbXBhY3RzIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIGR1cmluZyBhbGxvY2F0aW9uLCB0cnVuY2F0aW9uLCBhbmQgYWRkaW5nIGRpcmVjdG9yeSBlbnRyaWVzLiBNYWtlcyBzZW5zZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBObywgSSB0aGluayB0aG9zZSB0aHJlZSBhcmUgdGhlIG1haW4gb25lcyB0aGF0IHdpbGwgYWZmZWN0IHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIHB1dCB0aGlzIHRvZ2V0aGVyLlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2UgdGhpcyBjaGFuZ2UgaXMgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGVyZWZvcmUsIGFuIGFyZWEgZm9yIGZ1enppbmcuXG5gRm9jdXNTeW1ib2xzYCAtIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBtb2RpZmllZCBvciBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjaGFuZ2UuXG5JIGtub3cgYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBjb3JlIGNoYW5nZS5cbi0gYGZhdF9lbnRfd3JpdGVgXG4tIGBmYXRfZmFsbG9jYXRlYCAtIGlzIHJlbGV2YW50IGdpdmVuIGl0J3MgYSBmdW5jdGlvbiBwb2ludGVyLlxuLSBgZmF0X3NldGF0dHJgIC0gY291bGQgYmUgcmVsZXZhbnQgYXMgd2VsbC5cbi0gYGZhdF9hZGRfZW50cmllc2Bcbi0gYGZhdF9jaGFpbl9hZGRgIC0gSSBuZWVkIHRvIGluY2x1ZGUgdGhpcywgYXMgaXQgYW5kIGBmYXRfZnJlZWAgYXJlIGFsc28gbW9kaWZpZWQgdG8gcGFzcyB0aGUgYG9sZGAgcGFyYW1ldGVyLiBgZmF0X2ZyZWVgIGlzIHN0YXRpYywgc28gSSB0aGluayBgZmF0X2NoYWluX2FkZGAgaXMgdGhlIG9uZSB0byBpbmNsdWRlLlxuVGhlbiBJIHNob3VsZCBoYXZlIHRoZSBgRW5hYmxlQ29uZmlnc2A6XG4tIGBGQVRfRlNgXG4tIGBNU0RPU19GU2Bcbi0gYFZGQVRfRlNgXG5cbk9rYXksIGFuZCBub3csIHRvIHRyaXBsZS1jaGVjaywgSSB3aWxsIGFsc28gaW5zcGVjdCBgZmF0X2NoYWluX2FkZGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhdCBwbGF5LiBJdCdzIGluIGBmcy9mYXQvbWlzYy5jYC5cblxuTG9va3MgZ29vZC4gVGhpcyBjb3ZlcnMgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0MS43NDg1NDQ2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mYXQvbWlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNzpcXHRpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcilcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gMTEwOlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDExMTpcXHRcXHRpbnQgcmV0LCBuZXdfZmNsdXMsIGxhc3Q7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdC8qXFxuIDExNDpcXHRcXHQgKiBXZSBtdXN0IGxvY2F0ZSB0aGUgbGFzdCBjbHVzdGVyIG9mIHRoZSBmaWxlIHRvIGFkZCB0aGlzIG5ld1xcbiAxMTU6XFx0XFx0ICogb25lIChuZXdfZGNsdXMpIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmsgbGlzdCAodGhlIEZBVCkuXFxuIDExNjpcXHRcXHQgKi9cXG4gMTE3OlxcdFxcdGxhc3QgPSBuZXdfZmNsdXMgPSAwO1xcbiAxMTg6XFx0XFx0aWYgKE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3N0YXJ0KSB7XFxuIDExOTpcXHRcXHRcXHRpbnQgZmNsdXMsIGRjbHVzO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRcXHRyZXQgPSBmYXRfZ2V0X2NsdXN0ZXIoaW5vZGUsIEZBVF9FTlRfRU9GLCBcXHUwMDI2ZmNsdXMsIFxcdTAwMjZkY2x1cyk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTIzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyNDpcXHRcXHRcXHRuZXdfZmNsdXMgPSBmY2x1cyArIDE7XFxuIDEyNTpcXHRcXHRcXHRsYXN0ID0gZGNsdXM7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGFkZCBuZXcgb25lIHRvIHRoZSBsYXN0IG9mIHRoZSBjbHVzdGVyIGNoYWluICovXFxuIDEyOTpcXHRcXHRpZiAobGFzdCkge1xcbiAxMzA6XFx0XFx0XFx0c3RydWN0IGZhdF9lbnRyeSBmYXRlbnQ7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdFxcdGZhdGVudF9pbml0KFxcdTAwMjZmYXRlbnQpO1xcbiAxMzM6XFx0XFx0XFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBsYXN0KTtcXG4gMTM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0XFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXFxuIDEzODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgd2FpdCk7XFxuIDEzOTpcXHRcXHRcXHRcXHRmYXRlbnRfYnJlbHNlKFxcdTAwMjZmYXRlbnQpO1xcbiAxNDA6XFx0XFx0XFx0fVxcbiAxNDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDM6XFx0XFx0XFx0LypcXG4gMTQ0OlxcdFxcdFxcdCAqIEZJWE1FOkFsdGhvdWdoIHdlIGNhbiBhZGQgdGhpcyBjYWNoZSwgZmF0X2NhY2hlX2FkZCgpIGlzXFxuIDE0NTpcXHRcXHRcXHQgKiBhc3N1bWluZyB0byBiZSBjYWxsZWQgYWZ0ZXIgbGluZWFyIHNlYXJjaCB3aXRoIGZhdF9jYWNoZV9pZC5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0MS43NDg2MjM0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTUwOTUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmYXRfY2hhaW5fYWRkYCwgc3BlY2lmaWNhbGx5LCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBhbHRlcmVkLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIGlzIGltcG9ydGFudC5cblxuQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZzogdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBtaXJyb3IgRkFUIHdyaXRlIGZhaWxzLiBUaGUgbWFpbiBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGZhdF9lbnRfd3JpdGVgLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgcmV2ZXJ0aW5nIHRoZSBGQVQgZW50cnkgdG8gaXRzIHByaW9yIHN0YXRlIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB3cml0aW5nIHRoZSBtaXJyb3JlZCBGQVQuIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIG9sZCBGQVQgZW50cnkgdmFsdWUgdG8gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZSBmdW5jdGlvbnMgbGlzdGVkOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfY2hhaW5fYWRkYCwgYGZhdF9mYWxsb2NhdGVgLCBgZmF0X3NldGF0dHJgLCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYW5kIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLCBzdWNoIGFzIGBGQVRfRlNgLCBgTVNET1NfRlNgLCBhbmQgYFZGQVRfRlNgLCBhcmUgYWxsIGVzc2VudGlhbCBmb3Igc3VwcG9ydGluZyB0aGUgY2hhbmdlcy5cblxuSW4gZXNzZW5jZSwgdGhpcyBtZWFucyB0aGF0IGZpbGUgYWxsb2NhdGlvbiwgZmlsZSB0cnVuY2F0aW9uLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGNhbiBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBhbmQgY291bGQgcmV2ZWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IG5vdCBiZSBvYnZpb3VzIG90aGVyd2lzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZCBhcyBpdCBpcyByZWFjaGFibGUuXG5cbkknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDQsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6NDkuMjk5NTc2NDU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MTc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZBVF9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYXRfZW50X3dyaXRlXCIsXG4gICAgXCJmYXRfY2hhaW5fYWRkXCIsXG4gICAgXCJmYXRfZmFsbG9jYXRlXCIsXG4gICAgXCJmYXRfc2V0YXR0clwiLFxuICAgIFwiZmF0X2FkZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZBVF9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYXRfZW50X3dyaXRlXCIsXG4gICAgXCJmYXRfY2hhaW5fYWRkXCIsXG4gICAgXCJmYXRfZmFsbG9jYXRlXCIsXG4gICAgXCJmYXRfc2V0YXR0clwiLFxuICAgIFwiZmF0X2FkZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0OS4zODE1MDEzNjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk2MjQ2NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6NDkuMzgxOTYzNjczWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2Mzk1NzgwNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJ3MgYGZhdF9lbnRfd3JpdGVgIGZ1bmN0aW9uIHRvIHByb3Blcmx5IHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscy4gSXQgcGFzc2VzIHRoZSBvbGQgY2x1c3RlciB2YWx1ZSAoYW4gaW50ZWdlcikgYXMgYSBuZXcgcGFyYW1ldGVyIHRvIGBmYXRfZW50X3dyaXRlYC4gVGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBhbmQgZXJyb3ItaGFuZGxpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmF0LmhcbisrKyBiL2ZzL2ZhdC9mYXQuaFxuQEAgLTM5Miw3ICszOTIsNyBAQCBleHRlcm4gdm9pZCBmYXRfZW50X2FjY2Vzc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbiBcdFx0XHRpbnQgZW50cnkpO1xuIGV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4tXHRcdFx0IGludCBuZXcsIGludCB3YWl0KTtcbitcdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcbiBcdFx0XHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XG4gZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXG5pbmRleCBmMDgwMWQ5OWRkNjJhLi5kZjIzZmM4NWYzMTMwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdGVudC5jXG4rKysgYi9mcy9mYXQvZmF0ZW50LmNcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXG4gfVxuIFxuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0ICBpbnQgbmV3LCBpbnQgd2FpdClcbitcdFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdGNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gTVNET1NfU0Ioc2IpLVx1MDAzZWZhdGVudF9vcHM7XG5AQCAtNDIyLDEwICs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xuIFx0aWYgKHdhaXQpIHtcbiBcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXG4rXHRcdFx0ICogY2FuJ3Qgc2ltcGx5IHJlLWRpcnR5IHRvIHJldmVydC4gQW5kIGl0XG4rXHRcdFx0ICogd291bGQgbm90IGhhdmUgdmFsdWUgdG8gd3JpdGUgYWdhaW4gb24gSS9PXG4rXHRcdFx0ICogZXJyb3IuXG4rXHRcdFx0ICovXG4gXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcbitcdGVyciA9IGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0LyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi9cbitcdFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBvbGQpO1xuK1x0XHRpZiAod2FpdClcbitcdFx0XHRmYXRfc3luY19iaHMoZmF0ZW50LVx1MDAzZWJocywgZmF0ZW50LVx1MDAzZW5yX2Jocyk7XG4rXHR9XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMWM4MzVjYTVmMjFhNS4uNmM0NzVjNTMzMzRjNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbisrKyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0zNjMsNyArMzYzLDggQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbiBcdFx0XHRcdCAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfcG9zKTtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YsIHdhaXQpO1xuK1x0XHRcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YsIHJldCxcbitcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbisrKyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xMzMsMTEgKzEzMyw5IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuIFx0XHRyZXQgPSBmYXRfZW50X3JlYWQoaW5vZGUsIFx1MDAyNmZhdGVudCwgbGFzdCk7XG4gXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4gXHRcdFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcbi1cdFx0XHRpbnQgb2xkID0gcmV0O1xuIFxuLVx0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCB3YWl0KTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0ZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBvbGQsIHdhaXQpO1xuK1x0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXG4rXHRcdFx0XHRcdCAgICB3YWl0KTtcbiBcdFx0XHRmYXRlbnRfYnJlbHNlKFx1MDAyNmZhdGVudCk7XG4gXHRcdH1cbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjQ5LjM4MTk2NDU1M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjM5NTc1OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGQVQgRmlsZXN5c3RlbSBFcnJvciBIYW5kbGluZyBFbmhhbmNlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSdtIHByZXR0eSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjaGFuZ2VzLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgRkFUIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbiBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYG9sZGAgcGFyYW1ldGVyIHRvIHRoZSBgZmF0X2VudF93cml0ZWAgZnVuY3Rpb24gaW4gYGZzL2ZhdC9mYXRlbnQuY2AuIFRoaXMgaXNuJ3QgYSByYWRpY2FsIGNoYW5nZTsgaXQgYWxsb3dzIHVzIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyAqcHJldmlvdXMqIHZhbHVlIGlmIGEgbWlycm9yaW5nIG9wZXJhdGlvbiAoYGZhdF9taXJyb3JfYmhzYCkgZmFpbHMuIFRoZSBwcmV2aW91cyBsb2dpYyB3YXMgbGVhdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gdGhlIGNhbGxlci4gVGhpcyBmZWVscyBjbGVhbmVyIGFuZCBtb3JlIHJvYnVzdCB0byBtZS4gVGhlIGNhbGxlcnMsIG5hbWVseSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgaW4gYGZzL2ZhdC9maWxlLmNgIGFuZCBgZnMvZmF0L21pc2MuY2AgcmVzcGVjdGl2ZWx5LCBhcmUgbm93IHBhc3NpbmcgdGhlIG9sZCB2YWx1ZSB0byB0aGUgbW9kaWZpZWQgYGZhdF9lbnRfd3JpdGVgLlxuXG5Mb29raW5nIGF0IHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgd2l0aGluIGBmYXRfZW50X3dyaXRlYCwgdGhlIGxvZ2ljIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gIElmIGBmYXRfbWlycm9yX2Joc2AgcmV0dXJucyBhbiBlcnJvciwgaXQgbm93IGF0dGVtcHRzIHRvIHJldmVydCB0aGUgd3JpdGUgYnkgdXNpbmcgdGhlIGBvbGRgIHZhbHVlLCBlbnN1cmluZyBjb25zaXN0ZW5jeS4gVGhlIGFkZGl0aW9uYWwgY2hlY2sgb24gdGhlIGBiaHNgIHRvIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgaXMgY3J1Y2lhbCB0byB0aGUgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0LCBmb3IgbWUsIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGRpZCBhIGNhcmVmdWwgZG91YmxlLWNoZWNrIG9uIHRoaXMuIEkgbG9va2VkIGF0IHdoZXJlIGBvbGRgIGNvbWVzIGZyb20uIEkgY29uZmlybWVkIHRoYXQgdGhlIGBvbGRgIHBhcmFtZXRlciBpcyBpbmRlZWQgcG9wdWxhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgZmF0X2VudF9yZWFkYCwgaW4gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVnZXIsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHdoZXJlIEtNU0FOIG1pZ2h0IGJlIG5lZWRlZC4gU28gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU1LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQzOjE1Ljc3NzcyNjE2N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 12:59:46 +0000 UTC FinishedAt: 2026-08-25 13:43:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FAT_FS", "MSDOS_FS", "VFAT_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FAT_FS", "MSDOS_FS", "VFAT_FS" ], "series_id": "bb64f7a6-c070-4fd1-8727-a9e3e4d0975b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fat_ent_write", "fat_chain_add", "fat_fallocate", "fat_setattr", "fat_add_entries" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICAgJiMzNDtmYXRfY2hhaW5fYWRkJiMzNDssCiAgICAmIzM0O2ZhdF9mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAgICYjMzQ7ZmF0X2FkZF9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSYjMzk7cyBgZmF0X2VudF93cml0ZWAgZnVuY3Rpb24gdG8gcHJvcGVybHkgcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzLiBJdCBwYXNzZXMgdGhlIG9sZCBjbHVzdGVyIHZhbHVlIChhbiBpbnRlZ2VyKSBhcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGFuZCBlcnJvci1oYW5kbGluZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDA6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oXG5pbmRleCA2MTMzODQxM2Q5ZjNlLi5mYmQyMDdjNTU4NTllIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmhcbkBAIC0zOTIsNyAmIzQzOzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0XHRcdGludCBlbnRyeSk7XG4gZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0XHQgaW50IG5ldywgaW50IHdhaXQpO1xuJiM0MztcdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcbiBcdFx0XHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XG4gZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXG5pbmRleCBmMDgwMWQ5OWRkNjJhLi5kZjIzZmM4NWYzMTMwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdGVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0ZW50LmNcbkBAIC00MTMsNyAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgZmF0X21pcnJvcl9iaHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLFxuIH1cbiBcbiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4tXHRcdCAgaW50IG5ldywgaW50IHdhaXQpXG4mIzQzO1x0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktXHUwMDNlZmF0ZW50X29wcztcbkBAIC00MjIsMTAgJiM0Mzs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xuIFx0aWYgKHdhaXQpIHtcbiBcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXG4mIzQzO1x0XHRcdCAqIGNhbiYjMzk7dCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXRcbiYjNDM7XHRcdFx0ICogd291bGQgbm90IGhhdmUgdmFsdWUgdG8gd3JpdGUgYWdhaW4gb24gSS9PXG4mIzQzO1x0XHRcdCAqIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdC8qIFRyeSB0byByZXZlcnQgaWYgZ290IHRoZSBlcnJvciBvbiBtaXJyb3IgRkFUICovXG4mIzQzO1x0XHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG9sZCk7XG4mIzQzO1x0XHRpZiAod2FpdClcbiYjNDM7XHRcdFx0ZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMWM4MzVjYTVmMjFhNS4uNmM0NzVjNTMzMzRjNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0zNjMsNyAmIzQzOzM2Myw4IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHRcdFx0XHQgICAgIF9fZnVuY19fLCBNU0RPU19JKGlub2RlKS1cdTAwM2VpX3Bvcyk7XG4gXHRcdFx0cmV0ID0gLUVJTztcbiBcdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCB3YWl0KTtcbiYjNDM7XHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xMzMsMTEgJiM0MzsxMzMsOSBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcilcbiBcdFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcdTAwMjZmYXRlbnQsIGxhc3QpO1xuIFx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIFx0XHRcdGludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7XG4tXHRcdFx0aW50IG9sZCA9IHJldDtcbiBcbi1cdFx0XHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIG5ld19kY2x1cywgd2FpdCk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgb2xkLCB3YWl0KTtcbiYjNDM7XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICB3YWl0KTtcbiBcdFx0XHRmYXRlbnRfYnJlbHNlKFx1MDAyNmZhdGVudCk7XG4gXHRcdH1cbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RkFUX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYXRfZW50X3dyaXRlJiMzNDssCiAgICAmIzM0O2ZhdF9jaGFpbl9hZGQmIzM0OywKICAgICYjMzQ7ZmF0X2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtmYXRfc2V0YXR0ciYjMzQ7LAogICAgJiMzNDtmYXRfYWRkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNiYjJiZjRmOTI5ZTE5YWRkOWEwOWExZTE4YjI3NWMwZDM3ZTk2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oCmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmgKQEAgLTM5Miw3ICYjNDM7MzkyLDcgQEAgZXh0ZXJuIHZvaWQgZmF0X2VudF9hY2Nlc3NfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKIAkJCWludCBlbnRyeSk7CiBleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAotCQkJIGludCBuZXcsIGludCB3YWl0KTsKJiM0MzsJCQkgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpOwogZXh0ZXJuIGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLAogCQkJICAgICAgaW50IG5yX2NsdXN0ZXIpOwogZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0ZW50LmMgYi9mcy9mYXQvZmF0ZW50LmMKaW5kZXggZjA4MDFkOTlkZDYyYS4uZGYyM2ZjODVmMzEzMCAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdGVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9mYXRlbnQuYwpAQCAtNDEzLDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywKIH0KIAogaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAotCQkgIGludCBuZXcsIGludCB3YWl0KQomIzQzOwkJICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJY29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktJmd0O2ZhdGVudF9vcHM7CkBAIC00MjIsMTAgJiM0Mzs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LAogCW9wcy0mZ3Q7ZW50X3B1dChmYXRlbnQsIG5ldyk7CiAJaWYgKHdhaXQpIHsKIAkJZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlCiYjNDM7CQkJICogY2FuJiMzOTt0IHNpbXBseSByZS1kaXJ0eSB0byByZXZlcnQuIEFuZCBpdAomIzQzOwkJCSAqIHdvdWxkIG5vdCBoYXZlIHZhbHVlIHRvIHdyaXRlIGFnYWluIG9uIEkvTwomIzQzOwkJCSAqIGVycm9yLgomIzQzOwkJCSAqLwogCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAl9Ci0JcmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtJmd0O2JocywgZmF0ZW50LSZndDtucl9iaHMpOwomIzQzOwomIzQzOwllcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJLyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi8KJiM0MzsJCW9wcy0mZ3Q7ZW50X3B1dChmYXRlbnQsIG9sZCk7CiYjNDM7CQlpZiAod2FpdCkKJiM0MzsJCQlmYXRfc3luY19iaHMoZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDFjODM1Y2E1ZjIxYTUuLjZjNDc1YzUzMzM0YzYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuYwpAQCAtMzYzLDcgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKQogCQkJCSAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLSZndDtpX3Bvcyk7CiAJCQlyZXQgPSAtRUlPOwogCQl9IGVsc2UgaWYgKHJldCAmZ3Q7IDApIHsKLQkJCWVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7CiYjNDM7CQkJZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsCiYjNDM7CQkJCQkgICAgd2FpdCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldCA9IGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvbWlzYy5jCkBAIC0xMzMsMTEgJiM0MzsxMzMsOSBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAkJcmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCAmYW1wO2ZhdGVudCwgbGFzdCk7CiAJCWlmIChyZXQgJmd0Oz0gMCkgewogCQkJaW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTsKLQkJCWludCBvbGQgPSByZXQ7CiAKLQkJCXJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBuZXdfZGNsdXMsIHdhaXQpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIG9sZCwgd2FpdCk7CiYjNDM7CQkJcmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgJmFtcDtmYXRlbnQsIG5ld19kY2x1cywgcmV0LAomIzQzOwkJCQkJICAgIHdhaXQpOwogCQkJZmF0ZW50X2JyZWxzZSgmYW1wO2ZhdGVudCk7CiAJCX0KIAkJaWYgKHJldCAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRkFUIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIEZBVCBmaWxlc3lzdGVtLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IGFkZGluZyBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgIGluIGBmcy9mYXQvZmF0ZW50LmNgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHJldmVydCB0byB0aGUgcHJldmlvdXMgRkFUIGVudHJ5IHZhbHVlIGlmIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkYXRhIGludGVncml0eS4gVGhlIGBvbGRgIHBhcmFtZXRlciBpcyBhbHNvIGJlaW5nIHBhc3NlZCB0byBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAsIHN1Z2dlc3RpbmcgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIHBvdGVudGlhbGx5IGxldmVyYWdlIHRoZSBvbGQgdmFsdWUgdG9vLgoKVG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUsIEkgc2hvdWxkIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZXNlIGZ1bmN0aW9uczogYGZhdF9lbnRfd3JpdGVgLCBgZmF0X2ZyZWVgLCBhbmQgYGZhdF9jaGFpbl9hZGRgLiBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIEZBVCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoaWNoIEZBVCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX01TRE9TX0ZTYCwgYW5kIGBDT05GSUdfVkZBVF9GU2Agc2VlbSByZWxldmFudC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBmYXRfZW50X3dyaXRlYCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgdGhpcyBjaGFuZ2Ugd2lsbCBpbXBhY3QgdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9lbnRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9mYXQuaD0zOTI9ZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5My1cdFx0XHRpbnQgZW50cnkpO1xuZnMvZmF0L2ZhdC5oOjM5NDpleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5NS1cdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuLS1cbmZzL2ZhdC9mYXRlbnQuYz0zODA9c3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXG4tLVxuZnMvZmF0L2ZhdGVudC5jLTQxNC1cbmZzL2ZhdC9mYXRlbnQuYzo0MTU6aW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdGVudC5jLTQxNi1cdFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcbi0tXG5mcy9mYXQvZmlsZS5jPTMxMz1zdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuLS1cbmZzL2ZhdC9maWxlLmMtMzY1LVx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2UgMCkge1xuZnMvZmF0L2ZpbGUuYzozNjY6XHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuZnMvZmF0L2ZpbGUuYy0zNjctXHRcdFx0XHRcdCAgICB3YWl0KTtcbi0tXG5mcy9mYXQvbWlzYy5jPTEwNz1pbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcilcbi0tXG5mcy9mYXQvbWlzYy5jLTEzNi1cbmZzL2ZhdC9taXNjLmM6MTM3Olx0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXG5mcy9mYXQvbWlzYy5jLTEzOC1cdFx0XHRcdFx0ICAgIHdhaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGBmYXRfZW50X3dyaXRlYCwgYGZhdF9mcmVlYCwgYW5kIGBmYXRfY2hhaW5fYWRkYC4gVGhleSYjMzk7cmUgYWxsIG5lc3RsZWQgY29tZm9ydGFibHkgd2l0aGluIHRoZSBgZnMvZmF0L2AgZGlyZWN0b3J5LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIEZBVCBmaWxlc3lzdGVtIG1ldGFkYXRhIG1hbmlwdWxhdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gdGFibGUgdXBkYXRlcyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBvciBleHRlbmRpbmcgZGF0YSBjbHVzdGVycyBvbiB0aGUgZGlzay4gTm93LCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEZBVCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGtlcm5lbCBidWlsZC4gVGhpbmdzIGxpa2Ugd2hldGhlciBsb25nIGZpbGVuYW1lcyBhcmUgZW5hYmxlZCwgdGhlIEZBVCB2ZXJzaW9uIGJlaW5nIHVzZWQgKEZBVDEyLCBGQVQxNiwgRkFUMzIpLCBhbmQgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCB3b3VsZCBiZSByZWFsbHkgdXNlZnVsIHRvIGtub3cuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCBmb3IgYW5hbHl6aW5nIHRoZWlyIHVzZSBhbmQgaW1wbGVtZW50YXRpb24uIENoZWNraW5nIHRoZSBjb25maWdzIGZpcnN0IGdpdmVzIGEgdXNlZnVsLCBoaWdoLWxldmVsIHZpZXcgdGhhdCBJIGNhbiB1c2UgdG8gaGVscCBndWlkZSBteSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZmF0L0tjb25maWc6Mjpjb25maWcgRkFUX0ZTXG5mcy9mYXQvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRkFUIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyB6ZXJvIGluIG9uIGBmcy9mYXQvS2NvbmZpZ2AuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBGQVQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgRkFUIHdpdGhpbiB0aGlzIHN5c3RlbSwgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gaW5mbHVlbmNlIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbiB0byBtYWtlIGFueSBhZGp1c3RtZW50cyBlZmZlY3RpdmVseS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZhdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBGQVRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBOTFNcbiAgIDY6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIEZBVC1iYXNlZCBmaWxlIHN5c3RlbXMgKHRoZSBNUy1ET1MgYW5kXG4gICA5Olx0XHQgIFZGQVQgKFdpbmRvd3MgOTUpIGZpbGUgc3lzdGVtcyksIHRoZW4geW91IG11c3Qgc2F5IFkgb3IgTSBoZXJlXG4gIDEwOlx0XHQgIHRvIGluY2x1ZGUgRkFUIHN1cHBvcnQuIFlvdSB3aWxsIHRoZW4gYmUgYWJsZSB0byBtb3VudCBwYXJ0aXRpb25zIG9yXG4gIDExOlx0XHQgIGRpc2tldHRlcyB3aXRoIEZBVC1iYXNlZCBmaWxlIHN5c3RlbXMgYW5kIHRyYW5zcGFyZW50bHkgYWNjZXNzIHRoZVxuICAxMjpcdFx0ICBmaWxlcyBvbiB0aGVtLCBpLmUuIE1TRE9TIGZpbGVzIHdpbGwgbG9vayBhbmQgYmVoYXZlIGp1c3QgbGlrZSBhbGxcbiAgMTM6XHRcdCAgb3RoZXIgVW5peCBmaWxlcy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVGhpcyBGQVQgc3VwcG9ydCBpcyBub3QgYSBmaWxlIHN5c3RlbSBpbiBpdHNlbGYsIGl0IG9ubHkgcHJvdmlkZXNcbiAgMTY6XHRcdCAgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBvdGhlciBmaWxlIHN5c3RlbXMuIFlvdSB3aWxsIGhhdmUgdG8gc2F5IFkgb3JcbiAgMTc6XHRcdCAgTSB0byBhdCBsZWFzdCBvbmUgb2YgXCYjMzQ7TVNET1MgZnMgc3VwcG9ydFwmIzM0OyBvciBcJiMzNDtWRkFUIGZzIHN1cHBvcnRcJiMzNDsgaW5cbiAgMTg6XHRcdCAgb3JkZXIgdG8gbWFrZSB1c2Ugb2YgaXQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFub3RoZXIgd2F5IHRvIHJlYWQgYW5kIHdyaXRlIE1TRE9TIGZsb3BwaWVzIGFuZCBoYXJkIGRyaXZlXG4gIDIxOlx0XHQgIHBhcnRpdGlvbnMgZnJvbSB3aXRoaW4gTGludXggKGJ1dCBub3QgdHJhbnNwYXJlbnRseSkgaXMgd2l0aCB0aGVcbiAgMjI6XHRcdCAgbXRvb2xzIChcJiMzNDttYW4gbXRvb2xzXCYjMzQ7KSBwcm9ncmFtIHN1aXRlLiBZb3UgZG9uJiMzOTt0IG5lZWQgdG8gc2F5IFkgaGVyZSBpblxuICAyMzpcdFx0ICBvcmRlciB0byBkbyB0aGF0LlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB5b3UgbmVlZCB0byBtb3ZlIGxhcmdlIGZpbGVzIG9uIGZsb3BwaWVzIGJldHdlZW4gYSBET1MgYW5kIGFcbiAgMjY6XHRcdCAgTGludXggYm94LCBzYXkgWSBoZXJlLCBtb3VudCB0aGUgZmxvcHB5IHVuZGVyIExpbnV4IHdpdGggYW4gTVNET1NcbiAgMjc6XHRcdCAgZmlsZSBzeXN0ZW0gYW5kIHVzZSBHTlUgdGFyJiMzOTtzIE0gb3B0aW9uLiBHTlUgdGFyIGlzIGEgcHJvZ3JhbVxuICAyODpcdFx0ICBhdmFpbGFibGUgZm9yIFVuaXggYW5kIERPUyAoXCYjMzQ7bWFuIHRhclwmIzM0OyBvciBcJiMzNDtpbmZvIHRhclwmIzM0OykuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRoZSBGQVQgc3VwcG9ydCB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwgYnkgYWJvdXQgMzcgS0IuIElmIHVuc3VyZSxcbiAgMzE6XHRcdCAgc2F5IFkuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICAzNDpcdFx0ICBmYXQuICBOb3RlIHRoYXQgaWYgeW91IGNvbXBpbGUgdGhlIEZBVCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB5b3VcbiAgMzU6XHRcdCAgY2Fubm90IGNvbXBpbGUgYW55IG9mIHRoZSBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zIGludG8gdGhlIGtlcm5lbFxuICAzNjpcdFx0ICAtLSB0aGV5IHdpbGwgaGF2ZSB0byBiZSBtb2R1bGVzIGFzIHdlbGwuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE1TRE9TX0ZTXG4gIDM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtNU0RPUyBmcyBzdXBwb3J0XCYjMzQ7XG4gIDQwOlx0XHRzZWxlY3QgRkFUX0ZTXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBNU0RPUyBwYXJ0aXRpb25zIG9mIHlvdXIgaGFyZCBkcml2ZSAodW5sZXNzXG4gIDQzOlx0XHQgIHRoZXkgYXJlIGNvbXByZXNzZWQ7IHRvIGFjY2VzcyBjb21wcmVzc2VkIE1TRE9TIHBhcnRpdGlvbnMgdW5kZXJcbiAgNDQ6XHRcdCAgTGludXgsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgRE9TIGVtdWxhdG9yIERPU0VNVSwgZGVzY3JpYmVkIGluIHRoZVxuICA0NTpcdFx0ICBET1NFTVUtSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gIDQ2Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZSwgb3IgdHJ5IGRtc2Rvc2ZzIGluXG4gIDQ3Olx0XHQgIFx1MDAzY2Z0cDovL2liaWJsaW8ub3JnL3B1Yi9MaW51eC9zeXN0ZW0vZmlsZXN5c3RlbXMvZG9zZnMvXHUwMDNlLiBJZiB5b3VcbiAgNDg6XHRcdCAgaW50ZW5kIHRvIHVzZSBkb3NlbXUgd2l0aCBhIG5vbi1jb21wcmVzc2VkIE1TRE9TIHBhcnRpdGlvbiwgc2F5IFlcbiAgNDk6XHRcdCAgaGVyZSkgYW5kIE1TRE9TIGZsb3BwaWVzLiBUaGlzIG1lYW5zIHRoYXQgZmlsZSBhY2Nlc3MgYmVjb21lc1xuICA1MDpcdFx0ICB0cmFuc3BhcmVudCwgaS5lLiB0aGUgTVNET1MgZmlsZXMgbG9vayBhbmQgYmVoYXZlIGp1c3QgbGlrZSBhbGxcbiAgNTE6XHRcdCAgb3RoZXIgVW5peCBmaWxlcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgSWYgeW91IGhhdmUgV2luZG93cyA5NSBvciBXaW5kb3dzIE5UIGluc3RhbGxlZCBvbiB5b3VyIE1TRE9TXG4gIDU0Olx0XHQgIHBhcnRpdGlvbnMsIHlvdSBzaG91bGQgdXNlIHRoZSBWRkFUIGZpbGUgc3lzdGVtIChzYXkgWSB0byBcJiMzNDtWRkFUIGZzXG4gIDU1Olx0XHQgIHN1cHBvcnRcJiMzNDsgYmVsb3cpLCBvciB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzZWUgdGhlIGxvbmcgZmlsZW5hbWVzXG4gIDU2Olx0XHQgIGdlbmVyYXRlZCBieSBXaW5kb3dzIDk1IC8gV2luZG93cyBOVC5cbiAgNTc6XHRcbiAgNTg6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmxhcmdlIHlvdXIga2VybmVsIGJ5IGFib3V0IDcgS0IuIElmIHVuc3VyZSxcbiAgNTk6XHRcdCAgYW5zd2VyIFkuIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IHNhaWQgWSB0byBcJiMzNDtET1MgRkFUIGZzIHN1cHBvcnRcJiMzNDtcbiAgNjA6XHRcdCAgYXMgd2VsbC4gVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNjE6XHRcdCAgYmUgY2FsbGVkIG1zZG9zLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBWRkFUX0ZTXG4gIDY0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XCYjMzQ7XG4gIDY1Olx0XHRzZWxlY3QgRkFUX0ZTXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIG5vcm1hbCBXaW5kb3dzIGZpbGUgc3lzdGVtcyB3aXRoXG4gIDY4Olx0XHQgIGxvbmcgZmlsZW5hbWVzLiAgVGhhdCBpbmNsdWRlcyBub24tY29tcHJlc3NlZCBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zXG4gIDY5Olx0XHQgIHVzZWQgYnkgV2luZG93cyA5NSwgV2luZG93cyA5OCwgV2luZG93cyBOVCA0LjAsIGFuZCB0aGUgVW5peFxuICA3MDpcdFx0ICBwcm9ncmFtcyBmcm9tIHRoZSBtdG9vbHMgcGFja2FnZS5cbiAgNzE6XHRcbiAgNzI6XHRcdCAgVGhlIFZGQVQgc3VwcG9ydCBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxMCBLQiBhbmQgaXQgb25seVxuICA3MzpcdFx0ICB3b3JrcyBpZiB5b3Ugc2FpZCBZIHRvIHRoZSBcJiMzNDtET1MgRkFUIGZzIHN1cHBvcnRcJiMzNDsgYWJvdmUuICBQbGVhc2UgcmVhZFxuICA3NDpcdFx0ICB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3RcdTAwM2UgZm9yIGRldGFpbHMuICBJZlxuICA3NTpcdFx0ICB1bnN1cmUsIHNheSBZLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNzg6XHRcdCAgdmZhdC5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgRkFUX0RFRkFVTFRfQ09ERVBBR0VcbiAgODE6XHRcdGludCBcJiMzNDtEZWZhdWx0IGNvZGVwYWdlIGZvciBGQVRcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gRkFUX0ZTXG4gIDgzOlx0XHRkZWZhdWx0IDQzN1xuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZSBjb2RlcGFnZSBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcy5cbiAgODY6XHRcdCAgSXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgXCYjMzQ7Y29kZXBhZ2VcJiMzNDsgbW91bnQgb3B0aW9uLlxuICA4NzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICA4ODpcdFxuICA4OTpcdGNvbmZpZyBGQVRfREVGQVVMVF9JT0NIQVJTRVRcbiAgOTA6XHRcdHN0cmluZyBcJiMzNDtEZWZhdWx0IGlvY2hhcnNldCBmb3IgRkFUXCYjMzQ7XG4gIDkxOlx0XHRkZXBlbmRzIG9uIFZGQVRfRlNcbiAgOTI6XHRcdGRlZmF1bHQgXCYjMzQ7aXNvODg1OS0xXCYjMzQ7XG4gIDkzOlx0XHRoZWxwXG4gIDk0Olx0XHQgIFNldCB0aGlzIHRvIHRoZSBkZWZhdWx0IGlucHV0L291dHB1dCBjaGFyYWN0ZXIgc2V0IHlvdSYjMzk7ZFxuICA5NTpcdFx0ICBsaWtlIEZBVCB0byB1c2UuIEl0IHNob3VsZCBwcm9iYWJseSBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldFxuICA5NjpcdFx0ICB0aGF0IG1vc3Qgb2YgeW91ciBGQVQgZmlsZXN5c3RlbXMgdXNlLCBhbmQgY2FuIGJlIG92ZXJyaWRkZW5cbiAgOTc6XHRcdCAgd2l0aCB0aGUgXCYjMzQ7aW9jaGFyc2V0XCYjMzQ7IG1vdW50IG9wdGlvbiBmb3IgRkFUIGZpbGVzeXN0ZW1zLlxuICA5ODpcdFx0ICBOb3RlIHRoYXQgXCYjMzQ7dXRmOFwmIzM0OyBpcyBub3QgcmVjb21tZW5kZWQgZm9yIEZBVCBmaWxlc3lzdGVtcy5cbiAgOTk6XHRcdCAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkbiYjMzk7dCBzZXQgXCYjMzQ7dXRmOFwmIzM0OyBoZXJlIC0gc2VsZWN0IHRoZSBuZXh0IG9wdGlvblxuIDEwMDpcdFx0ICBpbnN0ZWFkIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBVVEYtOCBlbmNvZGVkIGZpbGUgbmFtZXMgYnkgZGVmYXVsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBhbmQgZnVuY3Rpb25zLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd24gdGhvdWdodHMsIGdpdmVuIG15IGRlZXAgZGl2ZSBpbnRvIHRoaXMgYXJlYToKCioqRGlnZ2luZyBpbnRvIHRoZSBGQVQgRmlsZSBTeXN0ZW0qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBGaWxlIEFsbG9jYXRpb24gVGFibGUgKEZBVCkgZmlsZSBzeXN0ZW0gc3R1ZmYuIFNwZWNpZmljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zIG1lbnRpb25lZCBhcmUgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgLiBTdHJhaWdodCBhd2F5LCB0aG9zZSB0ZWxsIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIGJyb2FkIGNvbXBhdGliaWxpdHkuIGBNU0RPU19GU2AgaXMgdGhlIGNsYXNzaWMsIHRoZSBncmFuZGRhZGR5IG9mIEZBVCwgd2hpbGUgYFZGQVRfRlNgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGxvbmcgZmlsZW5hbWVzIGV4dGVuc2lvbiwgcHJvYmFibHkgV2luZG93cy1yZWxhdGVkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBkaWZmZXJlbmNlcyBpbiBtZXRhZGF0YSBhbmQgbGltaXRhdGlvbnMgYmV0d2VlbiB0aGVtLgoKTm93LCBvbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucy4gV2UmIzM5O3ZlIGdvdCBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBGQVQgbWFuaXB1bGF0aW9uLiBgZmF0X2VudF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgRkFUIGl0c2VsZuKAlHdyaXRpbmcgdGhlIGNsdXN0ZXIgbnVtYmVycyB0aGF0IGRlZmluZSBmaWxlIGFsbG9jYXRpb24uIEl04oCZcyB0aGUgaGVhcnQgb2YgaG93IHdlIGxpbmsgZGF0YSBzZWN0b3JzLiBgZmF0X2ZyZWVgLCBubyBzdXJwcmlzZXMgdGhlcmUsIGxpa2VseSBtYXJrcyBhIGNsdXN0ZXIgYXMgYXZhaWxhYmxlIGZvciByZXVzZSwgYW5kLCBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCAqbXVzdCogaGFuZGxlIGVkZ2UgY2FzZXMgY2FyZWZ1bGx54oCUd2hhdCBpZiBpdCYjMzk7cyB0aGUgbGFzdCBjbHVzdGVyIGluIGEgZmlsZT8gSXMgdGhlcmUgYW55IHdyaXRlLWJhY2s/IFRoZSB0aGlyZCwgYGZhdF9jaGFpbl9hZGRgLCB3ZWxsLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiB0aGF0IGV4dGVuZHMgYW4gZXhpc3RpbmcgZmlsZSBvciBjcmVhdGVzIGEgbmV3IG9uZSBieSBhZGRpbmcgY2x1c3RlcnMgdG8gaXRzIGNoYWluLiBUaGlzIG9uZSBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZpbGVzIGdyb3cuIEkmIzM5O2QgbmVlZCB0byBleGFtaW5lIHRoaXMgZm9yIGZyYWdtZW50YXRpb24gaXNzdWVzLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gSSYjMzk7dmUgZ290IHRvIGNoZWNrLiBJcyBgZmF0X2VudF93cml0ZWAgZXhwb3J0ZWQ/IFRoYXQgd291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IHRlbGxzIG1lIGl0JiMzOTtzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tICpvdXRzaWRlKiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gVGhhdCBjb3VsZCBtZWFuIGl0JiMzOTtzIGEgY3JpdGljYWwgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgZGVwZW5kIG9uLiBTbywgaXMgaXQ/IEJldHRlciBtYWtlIHN1cmUgSSBjYW4gdHJhY2sgZG93biBpdHMgdXNlIGFuZCBiZWhhdmlvciB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipmYXRfZW50X3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBDcm9zcy1GaWxlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGhpbmcgaXNuJiMzOTt0IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNyb3NzLWZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHVzZWQgKmludGVybmFsbHkqIHdpdGhpbiB0aGUgcHJvamVjdCBzY29wZSwgYnV0IG5vdCBtYWRlIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aG9zZSBmdW5jdGlvbnMsIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCwgYXJlIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCByZWxpZXMgb24gdGhlbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZmFjdCB0aGF0IGl0IGlzbiYjMzk7dCBleHBvcnRlZCBjb3VsZCBzdWdnZXN0IGEgZmV3IHRoaW5nczogaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaXQmIzM5O3MgcGFydCBvZiBhIG1vZHVsZSB3aXRoIGEgZGVmaW5lZCBwdWJsaWMgaW50ZXJmYWNlLCBvciB0aGVyZSYjMzk7cyBhIGRlc2lnbiBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqIHdpdGggdGhvc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZhdF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvZmF0ZW50LmM9NTc0PWludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcilcbi0tXG5mcy9mYXQvZmF0ZW50LmMtNjU0LX1cbmZzL2ZhdC9mYXRlbnQuYzo2NTU6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X2ZyZWVfY2x1c3RlcnMpO1xuZnMvZmF0L2ZhdGVudC5jLTY1Ni1cbi0tXG5mcy9mYXQvaW5vZGUuYz0xOTg2PXZvaWQgZmF0X2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2ZhdC9pbm9kZS5jLTE5OTMtfVxuZnMvZmF0L2lub2RlLmM6MTk5NDpFWFBPUlRfU1lNQk9MX0dQTChmYXRfZnJlZV9mYyk7XG5mcy9mYXQvaW5vZGUuYy0xOTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBGQVQgRmlsZXN5c3RlbSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIHRoZSBGQVQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGZpbGUgb3BlcmF0aW9ucy4gSSBzZWUgYGZhdF9mcmVlYCAtIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYGZpbGUuY2Agc291cmNlIGZpbGUgaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlbHkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgaW50ZXJuYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluLCB3ZWxsLCBmcmVlaW5nIHNvbWUgc29ydCBvZiByZXNvdXJjZS4gQ291bGQgYmUgY2x1c3RlcnMsIGZpbGUgbWV0YWRhdGEuLi4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8ga25vdyBmb3Igc3VyZSwgYnV0IHRoZSBuYW1lIGdpdmVzIGEgcHJldHR5IHN0cm9uZyBoaW50LgoKVGhlbiB0aGVyZSYjMzk7cyBgZmF0X2NoYWluX2FkZGAuIFRoYXQmIzM5O3MgaW4gYG1pc2MuY2AsIGFnYWluLCB3aXRoaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gVGhlICYjMzQ7Y2hhaW4mIzM0OyBwYXJ0IG9mIHRoZSBuYW1lIGlzIGltcG9ydGFudCBpbiBGQVQgYmVjYXVzZSB0aGUgZmlsZXN5c3RlbSB1c2VzIGEgbGlua2VkIGxpc3Qgb2YgY2x1c3RlciBudW1iZXJzIHRvIHJlcHJlc2VudCBhIGZpbGUmIzM5O3MgZGF0YS4gQWRkaW5nIHRvIGEgJiMzNDtjaGFpbiYjMzQ7IHByb2JhYmx5IG1lYW5zIGFwcGVuZGluZyBhIG5ldyBjbHVzdGVyIChvciBhIHNlcmllcyBvZiBjbHVzdGVycykgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZpbGUuIFNpbmNlIGl0JiMzOTtzIGluIGBtaXNjLmNgLCBJJiMzOTtkIGd1ZXNzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcm92aWRpbmcgYSBnZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSB0byB0aGUgZmlsZXN5c3RlbSBjb2RlLgoKU28sIGluIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcuLi4gYGZhdF9mcmVlYCBsaWtlbHkgaGFuZGxlcyBmcmVlaW5nIHVwIGNsdXN0ZXIgY2hhaW5zIG9yIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIGEgZmlsZSBlbnRyeSwgd2hpbGUgYGZhdF9jaGFpbl9hZGRgIHByb2JhYmx5IGFwcGVuZHMgYmxvY2tzIChjbHVzdGVycykgb2YgZGF0YSB0byBhIGZpbGUuIE9uZSBmcmVlcywgdGhlIG90aGVyIGFkZHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgY2VydGFpbiwgYnV0IHRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZmF0X2NoYWluX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGZhdF9jaGFpbl9hZGRgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBpcyB0aGlzIGBmYXRfY2hhaW5fYWRkYCBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lwaGVyIGhvdyBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZS4gSSBhbnRpY2lwYXRlIHRoZSB1c2FnZSBwYXR0ZXJuIHdpbGwgZGljdGF0ZSB3aGF0IGtpbmQgb2YgYW5hbHlzaXMgSSYjMzk7bGwgbmVlZC4gSWYgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gYSBoZWF2aWx5IHVzZWQgcGF0aCwgSSYjMzk7bGwgcGF5IGNsb3NlciBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9jaGFpbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9kaXIuYz0xMzIxPWludCBmYXRfYWRkX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHZvaWQgKnNsb3RzLCBpbnQgbnJfc2xvdHMsXG4tLVxuZnMvZmF0L2Rpci5jLTE0MzQtXHRcdH1cbmZzL2ZhdC9kaXIuYzoxNDM1Olx0XHRlcnIgPSBmYXRfY2hhaW5fYWRkKGRpciwgY2x1c3RlciwgbnJfY2x1c3Rlcik7XG5mcy9mYXQvZGlyLmMtMTQzNi1cdFx0aWYgKGVycikge1xuLS1cbmZzL2ZhdC9mYXQuaD00NjY9ZXh0ZXJuIGludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9mYXQvZmF0Lmg6NDY3OmV4dGVybiBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcik7XG5mcy9mYXQvZmF0LmgtNDY4LWV4dGVybiB2b2lkIGZhdF90aW1lX2ZhdDJ1bml4KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5mcy9mYXQvaW5vZGUuYz0xMDQ9aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2ZhdC9pbm9kZS5jLTExMi1cdCAqIGNsdXN0ZXIgaXMgd3JpdGVkICovXG5mcy9mYXQvaW5vZGUuYzoxMTM6XHRlcnIgPSBmYXRfY2hhaW5fYWRkKGlub2RlLCBjbHVzdGVyLCAxKTtcbmZzL2ZhdC9pbm9kZS5jLTExNC1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L21pc2MuYz02OD1pbnQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZmF0L21pc2MuYy0xMDMtLypcbmZzL2ZhdC9taXNjLmM6MTA0OiAqIGZhdF9jaGFpbl9hZGQoKSBhZGRzIGEgbmV3IGNsdXN0ZXIgdG8gdGhlIGNoYWluIG9mIGNsdXN0ZXJzIHJlcHJlc2VudGVkXG5mcy9mYXQvbWlzYy5jLTEwNS0gKiBieSBpbm9kZS5cbmZzL2ZhdC9taXNjLmMtMTA2LSAqL1xuZnMvZmF0L21pc2MuYzoxMDc6aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG5mcy9mYXQvbWlzYy5jLTEwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRkFUIENsdXN0ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBGQVQgZmlsZXN5c3RlbSBoYW5kbGVzIGNsdXN0ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIGFuZCBmcmVlaW5nIG9mIHRoZW0uIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYm90aCByZWx5IG9uIGBmYXRfY2hhaW5fYWRkYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0IHBvaW50cyB0byBhIGNvbW1vbiBjb3JlIGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgZmlsZSBzcGFjZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnJlZWluZyBwcm9jZXNzLCBiZWNhdXNlIHRoYXQmIzM5O3MganVzdCBhcyBpbXBvcnRhbnQgZm9yIG1haW50YWluaW5nIGZpbGUgc3lzdGVtIGludGVncml0eS4gSXQgbG9va3MgbGlrZSBgZmF0X2ZyZWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBhc3BlY3QuIEkgc2hvdWxkIGNoZWNrIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIHdpbGwgemVybyBpbiBvbiBgZnMvZmF0L2ZpbGUuY2AgdG8gc2VlIHdoZXJlIHRoZSBgZmF0X2ZyZWVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGNhbGxzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBmaWxlcyBhcmUgZGVsZXRlZCBvciB0cnVuY2F0ZWQsIGFuZCBob3cgdGhlIEZBVCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9maWxlLmM9MjYzPXN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxuLS1cbmZzL2ZhdC9maWxlLmMtMzEyLS8qIEZyZWUgYWxsIGNsdXN0ZXJzIGFmdGVyIHRoZSBza2lwJiMzOTt0aCBjbHVzdGVyLiAqL1xuZnMvZmF0L2ZpbGUuYzozMTM6c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbmZzL2ZhdC9maWxlLmMtMzE0LXtcbi0tXG5mcy9mYXQvZmlsZS5jLTM3OS1cdC8qIEZyZWVpbmcgdGhlIHJlbWFpbmVkIGNsdXN0ZXIgY2hhaW4gKi9cbmZzL2ZhdC9maWxlLmM6MzgwOlx0cmV0dXJuIGZhdF9mcmVlX2NsdXN0ZXJzKGlub2RlLCBmcmVlX3N0YXJ0KTtcbmZzL2ZhdC9maWxlLmMtMzgxLX1cbi0tXG5mcy9mYXQvZmlsZS5jPTM4Mz12b2lkIGZhdF90cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldClcbi0tXG5mcy9mYXQvZmlsZS5jLTM5Ny1cbmZzL2ZhdC9maWxlLmM6Mzk4Olx0ZmF0X2ZyZWUoaW5vZGUsIG5yX2NsdXN0ZXJzKTtcbmZzL2ZhdC9maWxlLmMtMzk5LVx0ZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgRkFUIEZpbGVzeXN0ZW0gQmxvY2sgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZmF0X3RydW5jYXRlX2Jsb2Nrc2AgbGV2ZXJhZ2VzIGBmYXRfZnJlZWAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCAtIHRydW5jYXRpb24gcmVsaWVzIG9uIGZyZWVpbmcgdXAgYmxvY2tzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byBgZmF0X2VudF93cml0ZWAuIFRoaXMgc2VlbXMgY3J1Y2lhbCwgYXBwZWFyaW5nIGluIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIElzIGBmYXRfZW50X3dyaXRlYCB0cnVseSB1c2VkIHdpdGhpbiBgZmF0X2ZyZWVgPyBBbmQsIGlzIGl0IGFsc28gYmVpbmcgdXNlZCB3aXRoaW4gYGZhdF9jaGFpbl9hZGRgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYD8gVGhpcyByZXF1aXJlcyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgRkFUIChGaWxlIEFsbG9jYXRpb24gVGFibGUpIGVudHJpZXMgdGhlbXNlbHZlcywgYW5kIGFyZSwgdGhlcmVmb3JlLCBjYWxsZWQgZHVyaW5nIHNldmVyYWwgZGlmZmVyZW50IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3Nlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VzIGFuZCBrZWVwcyB0cmFjayBvZiBhbGxvY2F0ZWQgYW5kIGZyZWUgY2x1c3RlcnMgb24gYSBGQVQgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZhdC5oPTM5Mj1leHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0LmgtMzkzLVx0XHRcdGludCBlbnRyeSk7XG5mcy9mYXQvZmF0Lmg6Mzk0OmV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0LmgtMzk1LVx0XHRcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XG4tLVxuZnMvZmF0L2ZhdGVudC5jPTM4MD1zdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcbi0tXG5mcy9mYXQvZmF0ZW50LmMtNDE0LVxuZnMvZmF0L2ZhdGVudC5jOjQxNTppbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG5mcy9mYXQvZmF0ZW50LmMtNDE2LVx0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuLS1cbmZzL2ZhdC9maWxlLmM9MzEzPXN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4tLVxuZnMvZmF0L2ZpbGUuYy0zNjUtXHRcdH0gZWxzZSBpZiAocmV0IFx1MDAzZSAwKSB7XG5mcy9mYXQvZmlsZS5jOjM2NjpcdFx0XHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXG5mcy9mYXQvZmlsZS5jLTM2Ny1cdFx0XHRcdFx0ICAgIHdhaXQpO1xuLS1cbmZzL2ZhdC9taXNjLmM9MTA3PWludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuLS1cbmZzL2ZhdC9taXNjLmMtMTM2LVxuZnMvZmF0L21pc2MuYzoxMzc6XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbmZzL2ZhdC9taXNjLmMtMTM4LVx0XHRcdFx0XHQgICAgd2FpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBmYXRfZW50X3dyaXRlYCBhbmQgaXQgc2VlbXMgbGlrZSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIGluY29tcGxldGUuIFRoaXMgcm91dGluZSBzZWVtcyB0byBiZSBwcmltYXJpbHkgdXRpbGl6ZWQgaW4gYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLCBidXQgSSYjMzk7bSBjZXJ0YWluIGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLgoKV2hhdCBhYm91dCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBhbmQgYGZhdF9mcmVlX2NsdXN0ZXJzYD8gU3VyZWx5IHRoZXkmIzM5O3JlIGludm9sdmVkIGluIG1vZGlmeWluZyBGQVQgZW50cmllcy4gVGhpcyByZXF1aXJlcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdmVybGFwIGluIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGZhdF9hbGxvY19jbHVzdGVyc2Agbm93LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy9mYXQvZmF0ZW50LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIGdpdmVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB3cml0ZSBGQVQgZW50cmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2FsbG9jX2NsdXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvZGlyLmM9MTE3Mz1pbnQgZmF0X2FsbG9jX25ld19kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5mcy9mYXQvZGlyLmMtMTE4My1cbmZzL2ZhdC9kaXIuYzoxMTg0Olx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGRpciwgXHUwMDI2Y2x1c3RlciwgMSk7XG5mcy9mYXQvZGlyLmMtMTE4NS1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxuLS1cbmZzL2ZhdC9kaXIuYy0xMjU3LVxuZnMvZmF0L2Rpci5jOjEyNTg6XHRlcnIgPSBmYXRfYWxsb2NfY2x1c3RlcnMoZGlyLCBjbHVzdGVyLCAqbnJfY2x1c3Rlcik7XG5mcy9mYXQvZGlyLmMtMTI1OS1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2ZhdC5oPTM5ND1leHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuZnMvZmF0L2ZhdC5oLTM5NS1cdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuZnMvZmF0L2ZhdC5oOjM5NjpleHRlcm4gaW50IGZhdF9hbGxvY19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmNsdXN0ZXIsXG5mcy9mYXQvZmF0LmgtMzk3LVx0XHRcdCAgICAgIGludCBucl9jbHVzdGVyKTtcbi0tXG5mcy9mYXQvZmF0ZW50LmM9NDY4PXN0YXRpYyB2b2lkIGZhdF9jb2xsZWN0X2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCAqbnJfYmhzLFxuLS1cbmZzL2ZhdC9mYXRlbnQuYy00ODUtXG5mcy9mYXQvZmF0ZW50LmM6NDg2OmludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcbmZzL2ZhdC9mYXRlbnQuYy00ODcte1xuLS1cbmZzL2ZhdC9pbm9kZS5jPTEwND1pbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZmF0L2lub2RlLmMtMTA3LVxuZnMvZmF0L2lub2RlLmM6MTA4Olx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGlub2RlLCBcdTAwMjZjbHVzdGVyLCAxKTtcbmZzL2ZhdC9pbm9kZS5jLTEwOS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGluIGBmcy9mYXQvZmF0ZW50LmNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmYXRfYWxsb2NfY2x1c3RlcnNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNsdXN0ZXIgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRkFUIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGZhdF9hbGxvY19jbHVzdGVyc2AgZnVuY3Rpb24gbG9jYXRlZCBpbiBgZnMvZmF0L2ZhdGVudC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGludHJpY2FjaWVzIG9mIGZpbmRpbmcgZnJlZSBjbHVzdGVycyBvbiB0aGUgZGlzaywgbWFya2luZyB0aGVtIGFzIGFsbG9jYXRlZCBpbiB0aGUgRkFULCBwb3RlbnRpYWxseSBleHRlbmRpbmcgdGhlIGZpbGUgc2l6ZSwgYW5kIG1hbmFnaW5nIGFueSBjaGFpbiBvZiBjbHVzdGVycy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGZyYWdtZW50YXRpb24gb3IgdGhlIHNwZWVkIG9mIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIFRpbWUgdG8gZ2V0IGNvZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mYXQvZmF0ZW50LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODY6XHRpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlciwgaW50IG5yX2NsdXN0ZXIpXG4gNDg3Olx0e1xuIDQ4ODpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gNDg5Olx0XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuIDQ5MDpcdFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBzYmktXHUwMDNlZmF0ZW50X29wcztcbiA0OTE6XHRcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50LCBwcmV2X2VudDtcbiA0OTI6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xuIDQ5MzpcdFx0aW50IGksIGNvdW50LCBlcnIsIG5yX2JocywgaWR4X2NsdXM7XG4gNDk0Olx0XG4gNDk1Olx0XHRCVUdfT04obnJfY2x1c3RlciBcdTAwM2UgKE1BWF9CVUZfUEVSX1BBR0UgLyAyKSk7XHQvKiBmaXhlZCBsaW1pdCAqL1xuIDQ5NjpcdFxuIDQ5NzpcdFx0bG9ja19mYXQoc2JpKTtcbiA0OTg6XHRcdGlmIChzYmktXHUwMDNlZnJlZV9jbHVzdGVycyAhPSAtMSBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZWZyZWVfY2x1c192YWxpZCBcdTAwMjZcdTAwMjZcbiA0OTk6XHRcdCAgICBzYmktXHUwMDNlZnJlZV9jbHVzdGVycyBcdTAwM2MgbnJfY2x1c3Rlcikge1xuIDUwMDpcdFx0XHR1bmxvY2tfZmF0KHNiaSk7XG4gNTAxOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuIDUwMjpcdFx0fVxuIDUwMzpcdFxuIDUwNDpcdFx0ZXJyID0gbnJfYmhzID0gaWR4X2NsdXMgPSAwO1xuIDUwNTpcdFx0Y291bnQgPSBGQVRfU1RBUlRfRU5UO1xuIDUwNjpcdFx0ZmF0ZW50X2luaXQoXHUwMDI2cHJldl9lbnQpO1xuIDUwNzpcdFx0ZmF0ZW50X2luaXQoXHUwMDI2ZmF0ZW50KTtcbiA1MDg6XHRcdGZhdGVudF9zZXRfZW50cnkoXHUwMDI2ZmF0ZW50LCBzYmktXHUwMDNlcHJldl9mcmVlICYjNDM7IDEpO1xuIDUwOTpcdFx0d2hpbGUgKGNvdW50IFx1MDAzYyBzYmktXHUwMDNlbWF4X2NsdXN0ZXIpIHtcbiA1MTA6XHRcdFx0aWYgKGZhdGVudC5lbnRyeSBcdTAwM2U9IHNiaS1cdTAwM2VtYXhfY2x1c3RlcilcbiA1MTE6XHRcdFx0XHRmYXRlbnQuZW50cnkgPSBGQVRfU1RBUlRfRU5UO1xuIDUxMjpcdFx0XHRmYXRlbnRfc2V0X2VudHJ5KFx1MDAyNmZhdGVudCwgZmF0ZW50LmVudHJ5KTtcbiA1MTM6XHRcdFx0ZXJyID0gZmF0X2VudF9yZWFkX2Jsb2NrKHNiLCBcdTAwMjZmYXRlbnQpO1xuIDUxNDpcdFx0XHRpZiAoZXJyKVxuIDUxNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDUxNjpcdFxuIDUxNzpcdFx0XHQvKiBGaW5kIHRoZSBmcmVlIGVudHJpZXMgaW4gYSBibG9jayAqL1xuIDUxODpcdFx0XHRkbyB7XG4gNTE5Olx0XHRcdFx0aWYgKG9wcy1cdTAwM2VlbnRfZ2V0KFx1MDAyNmZhdGVudCkgPT0gRkFUX0VOVF9GUkVFKSB7XG4gNTIwOlx0XHRcdFx0XHRpbnQgZW50cnkgPSBmYXRlbnQuZW50cnk7XG4gNTIxOlx0XG4gNTIyOlx0XHRcdFx0XHQvKiBtYWtlIHRoZSBjbHVzdGVyIGNoYWluICovXG4gNTIzOlx0XHRcdFx0XHRvcHMtXHUwMDNlZW50X3B1dChcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GKTtcbiA1MjQ6XHRcdFx0XHRcdGlmIChwcmV2X2VudC5ucl9iaHMpXG4gNTI1Olx0XHRcdFx0XHRcdG9wcy1cdTAwM2VlbnRfcHV0KFx1MDAyNnByZXZfZW50LCBlbnRyeSk7XG4gNTI2Olx0XG4gNTI3Olx0XHRcdFx0XHRmYXRfY29sbGVjdF9iaHMoYmhzLCBcdTAwMjZucl9iaHMsIFx1MDAyNmZhdGVudCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRcdFx0XHRzYmktXHUwMDNlcHJldl9mcmVlID0gZW50cnk7XG4gNTMwOlx0XHRcdFx0XHRpZiAoc2JpLVx1MDAzZWZyZWVfY2x1c3RlcnMgIT0gLTEpXG4gNTMxOlx0XHRcdFx0XHRcdHNiaS1cdTAwM2VmcmVlX2NsdXN0ZXJzLS07XG4gNTMyOlx0XG4gNTMzOlx0XHRcdFx0XHRjbHVzdGVyW2lkeF9jbHVzXSA9IGVudHJ5O1xuIDUzNDpcdFx0XHRcdFx0aWR4X2NsdXMmIzQzOyYjNDM7O1xuIDUzNTpcdFx0XHRcdFx0aWYgKGlkeF9jbHVzID09IG5yX2NsdXN0ZXIpXG4gNTM2Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDUzNzpcdFxuIDUzODpcdFx0XHRcdFx0LypcbiA1Mzk6XHRcdFx0XHRcdCAqIGZhdF9jb2xsZWN0X2JocygpIGdldHMgcmVmLWNvdW50IG9mIGJocyxcbiA1NDA6XHRcdFx0XHRcdCAqIHNvIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHByZXZfZW50LlxuIDU0MTpcdFx0XHRcdFx0ICovXG4gNTQyOlx0XHRcdFx0XHRwcmV2X2VudCA9IGZhdGVudDtcbiA1NDM6XHRcdFx0XHR9XG4gNTQ0Olx0XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuIDU0NTpcdFx0XHRcdGlmIChjb3VudCA9PSBzYmktXHUwMDNlbWF4X2NsdXN0ZXIpXG4gNTQ2Olx0XHRcdFx0XHRicmVhaztcbiA1NDc6XHRcdFx0fSB3aGlsZSAoZmF0X2VudF9uZXh0KHNiaSwgXHUwMDI2ZmF0ZW50KSk7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHQvKiBDb3VsZG4mIzM5O3QgYWxsb2NhdGUgdGhlIGZyZWUgZW50cmllcyAqL1xuIDU1MTpcdFx0c2JpLVx1MDAzZWZyZWVfY2x1c3RlcnMgPSAwO1xuIDU1MjpcdFx0c2JpLVx1MDAzZWZyZWVfY2x1c192YWxpZCA9IDE7XG4gNTUzOlx0XHRlcnIgPSAtRU5PU1BDO1xuIDU1NDpcdFxuIDU1NTpcdG91dDpcbiA1NTY6XHRcdHVubG9ja19mYXQoc2JpKTtcbiA1NTc6XHRcdG1hcmtfZnNpbmZvX2RpcnR5KHNiKTtcbiA1NTg6XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiA1NTk6XHRcdGlmICghZXJyKSB7XG4gNTYwOlx0XHRcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcbiA1NjE6XHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBucl9iaHMpO1xuIDU2MjpcdFx0XHRpZiAoIWVycilcbiA1NjM6XHRcdFx0XHRlcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgYmhzLCBucl9iaHMpO1xuIDU2NDpcdFx0fVxuIDU2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYmhzOyBpJiM0MzsmIzQzOylcbiA1NjY6XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gNTY3Olx0XG4gNTY4Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpZHhfY2x1cylcbiA1Njk6XHRcdFx0ZmF0X2ZyZWVfY2x1c3RlcnMoaW5vZGUsIGNsdXN0ZXJbMF0pO1xuIDU3MDpcdFxuIDU3MTpcdFx0cmV0dXJuIGVycjtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0aW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKVxuIDU3NTpcdHtcbiA1NzY6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIDU3NzpcdFx0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTtcbiA1Nzg6XHRcdGNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gc2JpLVx1MDAzZWZhdGVudF9vcHM7XG4gNTc5Olx0XHRzdHJ1Y3QgZmF0X2VudHJ5IGZhdGVudDtcbiA1ODA6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xuIDU4MTpcdFx0aW50IGksIGVyciwgbnJfYmhzO1xuIDU4MjpcdFx0aW50IGZpcnN0X2NsID0gY2x1c3RlciwgZGlydHlfZnNpbmZvID0gMDtcbiA1ODM6XHRcbiA1ODQ6XHRcdG5yX2JocyA9IDA7XG4gNTg1Olx0XHRmYXRlbnRfaW5pdChcdTAwMjZmYXRlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uOiBpdCBjaGFuZ2VzIGhvdyBlcnJvciBoYW5kbGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGZhdF9taXJyb3JfYmhzYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uIGhhcyBhIHNpbWlsYXIgcGF0dGVybiwgY2FsbGluZyBgZmF0X21pcnJvcl9iaHNgIGJ1dCBpdCAqZG9lc24mIzM5O3QqIHJldmVydCBjaGFuZ2VzIG9uIGZhaWx1cmUuIEl0IGp1c3QgZnJlZXMgdGhlIGFsbG9jYXRlZCBjbHVzdGVycyBhdCB0aGUgZW5kIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yLgoKVGhlIGNoYW5nZSB0byBgZmF0X2VudF93cml0ZWAgaXMgdGhlIGtleS4gTm93LCAqaWYqIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHRoZSBwYXRjaCBhdHRlbXB0cyB0byByZXZlcnQgdGhlIGNoYW5nZSBieSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBgZW50X3B1dGAgZnVuY3Rpb24sIGFuZCBzeW5jcyB0aGUgYnVmZmVycy4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgY2hhbmdlIGluIGhvdyBlcnJvcnMgYXJlIG1hbmFnZWQsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgZnV6emluZy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIHJlbWFpbnMgY29uc2lzdGVudCBldmVuIHdoZW4gbWlycm9yaW5nIGZhaWxzLgoKTm93LCB3aGVyZSBkb2VzIHRoaXMgbmV3IGJlaGF2aW9yIG1hbmlmZXN0PyBgZmF0X2VudF93cml0ZWAgaXRzZWxmIGlzbiYjMzk7dCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSBieSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIGBmYXRfZnJlZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgZmF0X3RydW5jYXRlX2Jsb2Nrc2AgYW5kIGBmYXRfZmFsbG9jYXRlYC4gYGZhdF9jaGFpbl9hZGRgIGlzIHVzZWQgYnkgYGZhdF9hZGRfY2x1c3RlcmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgLiBUaG9zZSBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zLi4uIGxpa2UgYGZhdF9nZXRfYmxvY2tgLCBgdmZhdF9hZGRfZW50cnlgLCBhbmQgYG1zZG9zX2FkZF9lbnRyeWAuCgpTbyB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIGBmYXRfZmFsbG9jYXRlYCwgYGZhdF90cnVuY2F0ZV9ibG9ja3NgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfZXZpY3RfaW5vZGVgKSwgYW5kIGBmYXRfYWRkX2NsdXN0ZXJgICh2aWEgYGZhdF9nZXRfYmxvY2tgKS4gRmluYWxseSwgYGZhdF9hZGRfZW50cmllc2AgaXMgYWxzbyBhIHRhcmdldCwgYW5kIGl0IGlzIHVzZWQgYnkgYm90aCBgdmZhdF9hZGRfZW50cnlgIGFuZCBgbXNkb3NfYWRkX2VudHJ5YC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBmYXRfZmFsbG9jYXRlYCBhbmQgYGZhdF9zZXRhdHRyYCDigJMgbWFrZSBzdXJlIHdlIGhpdCB0aG9zZSBxdWlja2x5LiBUaGVuLCBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgdXAgc29tZSB0ZXN0IGNhc2VzIHRoYXQgaW50ZW50aW9uYWxseSB0cmlnZ2VyIG1pcnJvciBmYWlsdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X2ZhbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZpbGUuYy0yMi1cbmZzL2ZhdC9maWxlLmM6MjM6c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG5mcy9mYXQvZmlsZS5jLTI0LVx0XHRcdCAgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XG4tLVxuZnMvZmF0L2ZpbGUuYz0yMDU9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZhdC9maWxlLmMtMjE1LVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZnMvZmF0L2ZpbGUuYzoyMTY6XHQuZmFsbG9jYXRlXHQ9IGZhdF9mYWxsb2NhdGUsXG5mcy9mYXQvZmlsZS5jLTIxNy1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL2ZhdC9maWxlLmM9MjIwPXN0YXRpYyBpbnQgZmF0X2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuLS1cbmZzL2ZhdC9maWxlLmMtMjYyLSAqL1xuZnMvZmF0L2ZpbGUuYzoyNjM6c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG5mcy9mYXQvZmlsZS5jLTI2NC1cdFx0XHQgIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgU3ltYm9sIENvbnNpZGVyYXRpb24qKgoKUmlnaHQsIGBmYXRfZmFsbG9jYXRlYC4uLiB0aGF0JiMzOTtzIGEgcHJldHR5IHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBnb3QgY2xlYXIgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGZpbGUgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGZvciBtYW5pcHVsYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IGZpZWxkIC0gdGhlIHVzZXIgY2FuIHByb3ZpZGUgdGhlaXIgZmllbGQgaGVyZV0uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZXMsIGFuZCBnZW5lcmFsbHkgbWFuYWdpbmcgZGlzayBzcGFjZS4gSXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmYXRfY3JlYXRlYC4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYGZhdF9zZXRhdHRyYD8gV2hpbGUgYGZhdF9mYWxsb2NhdGVgIGRlYWxzIHdpdGggYWxsb2NhdGlvbiBpdHNlbGYsIGBmYXRfc2V0YXR0cmAgaXMgcG90ZW50aWFsbHkganVzdCBhcyBpbnRlcmVzdGluZyBvciBtYXliZSBtb3JlIHNvLiBJdCBoYW5kbGVzIGF0dHJpYnV0ZSBzZXR0aW5nIG9uIGZpbGVzLCBhbmQgdGhhdCBjb3VsZCBvcGVuIHVwIGEgbmV3IGF2ZW51ZSBvZiBhdHRhY2sgaW4gc29tZSBzY2VuYXJpb3MuIEl0IGNvdWxkIGJlIHRpZWQgdG8gcGVybWlzc2lvbiBlc2NhbGF0aW9uIG9yIG1hbGljaW91cyBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGFuZCBkYXRhIGhpZGluZy4gSSBuZWVkIHRvIGtlZXAgYm90aCBvZiB0aGVzZSBpbiBtaW5kIGFzIEkgY29udGludWUgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZhdC9mYXQuaD00MDY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9mYXQvZmF0Lmg6NDA3OmV4dGVybiBpbnQgZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL2ZhdC9mYXQuaC00MDgtXHRcdCAgICAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuLS1cbmZzL2ZhdC9maWxlLmM9Mzc9c3RhdGljIGludCBmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcbi0tXG5mcy9mYXQvZmlsZS5jLTEwMC1cdC8qIFRoaXMgTVVTVCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpcnJldmVyc2libGUuLi4gKi9cbmZzL2ZhdC9maWxlLmM6MTAxOlx0ZXJyID0gZmF0X3NldGF0dHIoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSwgXHUwMDI2aWEpO1xuZnMvZmF0L2ZpbGUuYy0xMDItXHRpZiAoZXJyKVxuLS1cbmZzL2ZhdC9maWxlLmM9NDk3PXN0YXRpYyBpbnQgZmF0X2FsbG93X3NldF90aW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2ZhdC9maWxlLmMtNTE3LVxuZnMvZmF0L2ZpbGUuYzo1MTg6aW50IGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9mYXQvZmlsZS5jLTUxOS1cdFx0c3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2ZhdC9maWxlLmMtNjA3LX1cbmZzL2ZhdC9maWxlLmM6NjA4OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zZXRhdHRyKTtcbmZzL2ZhdC9maWxlLmMtNjA5LVxuZnMvZmF0L2ZpbGUuYz02MTA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmF0X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2ZhdC9maWxlLmM6NjExOlx0LnNldGF0dHJcdD0gZmF0X3NldGF0dHIsXG5mcy9mYXQvZmlsZS5jLTYxMi1cdC5nZXRhdHRyXHQ9IGZhdF9nZXRhdHRyLFxuLS1cbmZzL2ZhdC9uYW1laV9tc2Rvcy5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbXNkb3NfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ2LVx0LnJlbmFtZVx0XHQ9IG1zZG9zX3JlbmFtZSxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jOjY0NzpcdC5zZXRhdHRyXHQ9IGZhdF9zZXRhdHRyLFxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ4LVx0LmdldGF0dHJcdD0gZmF0X2dldGF0dHIsXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz0xMTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2ZmF0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4NS1cdC5yZW5hbWVcdFx0PSB2ZmF0X3JlbmFtZTIsXG5mcy9mYXQvbmFtZWlfdmZhdC5jOjExODY6XHQuc2V0YXR0clx0PSBmYXRfc2V0YXR0cixcbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4Ny1cdC5nZXRhdHRyXHQ9IGZhdF9nZXRhdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkNvbnNpZGVyaW5nIEZBVCBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYGZhdF9zZXRhdHRyYCBpcyBjbGVhcmx5IGV4cG9zZWQgYXMgYW4gaW5vZGUgb3BlcmF0aW9uIOKAkyB0aGF0IG1ha2VzIHNlbnNlIGZvciBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3b25kZXJpbmcgYWJvdXQgYW5vdGhlciBrZXkgZnVuY3Rpb246IGBmYXRfYWRkX2NsdXN0ZXJgLiBXaGVyZSBkb2VzIHRoYXQgZml0IGluIHRoZSBpbm9kZSBvcGVyYXRpb25zIHNjaGVtZT8gSXMgaXQgYWxzbyBkaXJlY3RseSB1c2VkIGluIHRoYXQgY2FwYWNpdHksIG9yIGlzIGl0IGhhbmRsZWQgZGlmZmVyZW50bHkgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSYjMzk7cyBpbnRlcm5hbHM/IEkgbmVlZCB0byBjbGFyaWZ5IGl0cyByb2xlIGluIHRoZSBjb250ZXh0IG9mIGlub2RlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9hZGRfY2x1c3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2ZhdC5oPTQzOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmF0X2Rpcl9oYXNoKGludCBsb2dzdGFydClcbi0tXG5mcy9mYXQvZmF0LmgtNDQyLX1cbmZzL2ZhdC9mYXQuaDo0NDM6ZXh0ZXJuIGludCBmYXRfYWRkX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9mYXQvZmF0LmgtNDQ0LVxuLS1cbmZzL2ZhdC9maWxlLmM9MjYzPXN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxuLS1cbmZzL2ZhdC9maWxlLmMtMjk0LVx0XHR3aGlsZSAobnJfY2x1c3Rlci0tIFx1MDAzZSAwKSB7XG5mcy9mYXQvZmlsZS5jOjI5NTpcdFx0XHRlcnIgPSBmYXRfYWRkX2NsdXN0ZXIoaW5vZGUpO1xuZnMvZmF0L2ZpbGUuYy0yOTYtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9mYXQvaW5vZGUuYz02Nz1zdGF0aWMgc3RydWN0IGZhdF9mbG9wcHlfZGVmYXVsdHMge1xuLS1cbmZzL2ZhdC9pbm9kZS5jLTEwMy1cbmZzL2ZhdC9pbm9kZS5jOjEwNDppbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9mYXQvaW5vZGUuYy0xMDUte1xuLS1cbmZzL2ZhdC9pbm9kZS5jPTExOT1zdGF0aWMgaW5saW5lIGludCBfX2ZhdF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL2ZhdC9pbm9kZS5jLTE1NC1cdFx0LyogVE9ETzogbXVsdGlwbGUgY2x1c3RlciBhbGxvY2F0aW9uIHdvdWxkIGJlIGRlc2lyYWJsZS4gKi9cbmZzL2ZhdC9pbm9kZS5jOjE1NTpcdFx0ZXJyID0gZmF0X2FkZF9jbHVzdGVyKGlub2RlKTtcbmZzL2ZhdC9pbm9kZS5jLTE1Ni1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IEZBVCBCbG9jayBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBjb2RlLCBmb2N1c2luZyBvbiBibG9jayBhbGxvY2F0aW9uLiBJIHNlZSB0aGF0IGBmYXRfYWRkX2NsdXN0ZXJgIGlzIGEga2V5IGZ1bmN0aW9uOyBpdCYjMzk7cyB1dGlsaXplZCBpbiBib3RoIGBmYXRfZmFsbG9jYXRlYCAoZm9yIHByZS1hbGxvY2F0aW5nIHNwYWNlLCB3aGljaCBJIHVuZGVyc3RhbmQgd2VsbCkgYW5kLCBpbnRlcmVzdGluZ2x5LCBgX19mYXRfZ2V0X2Jsb2NrYC4gTm93LCBgX19mYXRfZ2V0X2Jsb2NrYCBpcyB0aGUgY29yZSBvZiByZXRyaWV2aW5nIGJsb2NrIGluZm9ybWF0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBtb3JlIGZhbWlsaWFyIGBmYXRfZ2V0X2Jsb2NrYCBhbmQgYGZhdF9nZXRfYmxvY2tfYm1hcGAgY2FsbHMuCgpgZmF0X2dldF9ibG9ja2AsIGluIHR1cm4sIGlzIHByZXR0eSBwZXJ2YXNpdmUuIEl0JiMzOTtzIGNhbGxlZCBleHRlbnNpdmVseSwgcG9wdWxhdGluZyB0aGUgZGF0YSBibG9ja3MgZHVyaW5nIHJlYWRzIGFuZCB3cml0ZXMsIGZyb20gbG93LWxldmVsIGZvbGlvIG9wZXJhdGlvbnMgbGlrZSBgZmF0X3JlYWRfZm9saW9gLCB0aHJvdWdoIHdyaXRlIG9wZXJhdGlvbnMgbGlrZSBgZmF0X3dyaXRlX2JlZ2luYCBhbmQgYGZhdF93cml0ZXBhZ2VzYC4KCk5vdywgdGhhdCBicmluZ3MgdG8gbWluZCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBkb2VzIGBmYXRfYWRkX2VudHJpZXNgIGZpdCBpbnRvIHRoaXMgc2NoZW1lPyBUaGlzIGZ1bmN0aW9uIGFkZHMgZGlyZWN0b3J5IGVudHJpZXMgdG8gdGhlIGZpbGUsIGFuZCB0aGF0JiMzOTtzIG9mdGVuIGEgY3J1Y2lhbCBwb2ludCB3aGVuIGFsbG9jYXRpbmcgYmxvY2tzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYF9fZmF0X2dldF9ibG9ja2AuIElzIGl0IHVzZWQgKmluKiB0aGVzZSBmdW5jdGlvbnMsIG9yIGlzIGl0IGEgc2VwYXJhdGUgcHJvY2Vzcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBleHBsb3JlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdF9hZGRfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxuLS1cbmZzL2ZhdC9kaXIuYy0xMzIwLVxuZnMvZmF0L2Rpci5jOjEzMjE6aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcbmZzL2ZhdC9kaXIuYy0xMzIyLVx0XHQgICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuLS1cbmZzL2ZhdC9kaXIuYy0xNDY2LX1cbmZzL2ZhdC9kaXIuYzoxNDY3OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9hZGRfZW50cmllcyk7XG4tLVxuZnMvZmF0L2ZhdC5oPTM0Mj1leHRlcm4gaW50IGZhdF9hbGxvY19uZXdfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuZnMvZmF0L2ZhdC5oOjM0MzpleHRlcm4gaW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcbmZzL2ZhdC9mYXQuaC0zNDQtXHRcdFx0ICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKTtcbi0tXG5mcy9mYXQvbmFtZWlfbXNkb3MuYz0yMzA9c3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4tLVxuZnMvZmF0L25hbWVpX21zZG9zLmMtMjUyLVxuZnMvZmF0L25hbWVpX21zZG9zLmM6MjUzOlx0ZXJyID0gZmF0X2FkZF9lbnRyaWVzKGRpciwgXHUwMDI2ZGUsIDEsIHNpbmZvKTtcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jLTI1NC1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz02NTQ9c3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxuLS1cbmZzL2ZhdC9uYW1laV92ZmF0LmMtNjc0LVxuZnMvZmF0L25hbWVpX3ZmYXQuYzo2NzU6XHRlcnIgPSBmYXRfYWRkX2VudHJpZXMoZGlyLCBzbG90cywgbnJfc2xvdHMsIHNpbmZvKTtcbmZzL2ZhdC9uYW1laV92ZmF0LmMtNjc2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gS2V5IEZBVCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRkFUIGZpbGVzeXN0ZW0gY29kZS4gSSB0aGluayBgZmF0X2FkZF9lbnRyaWVzYCBpcyBhIHBhcnRpY3VsYXJseSBnb29kIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgdXNlZCBpbiB0aGUgYG1zZG9zX2FkZF9lbnRyeWAgYW5kIGB2ZmF0X2FkZF9lbnRyeWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgdGhlIHdvcmtob3JzZXMgd2hlbiBuZXcgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQsIHJpZ2h0PyBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqY3JpdGljYWwqIHBvaW50IGluIHRoZSBwcm9jZXNzLgoKR2l2ZW4gdGhhdCwgaGVyZSBhcmUgc29tZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBhcyB3b3J0aHkgb2YgY2xvc2VyIGluc3BlY3Rpb24sIGFuZCBtYXkgc2VydmUgYXMgZXF1YWxseSBjb21wZWxsaW5nIHN5bWJvbHM6CgoqICAgYGZhdF9mYWxsb2NhdGVgCiogICBgZmF0X3NldGF0dHJgCiogICBgZmF0X2FkZF9lbnRyaWVzYCAod2UgYWxyZWFkeSBrbm93IHRoaXMgb25lLCBidXQgSSYjMzk7bSBpbmNsdWRpbmcgaXQgZm9yIGNvbXBsZXRlbmVzcykKKiAgIGBmYXRfYWRkX2NsdXN0ZXJgCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBgZmF0X2FkZF9jbHVzdGVyYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGVzdGFibGlzaCBpdHMgdmlzaWJpbGl0eSB0byBkZXRlcm1pbmUgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB0byBvdGhlciBlbGVtZW50cyBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSB3aGVyZSBpdCBzaXRzLCBpbiB0ZXJtcyBvZiBicm9hZGVyIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZmF0X2FkZF9jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGQVQgRmlsZXN5c3RlbSBBUEkgRW50cnlwb2ludHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gbGlzdCwgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9yaWdpbmFsIGNvZGUgbW9kaWZpY2F0aW9uIHdhcyBpbiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL2ZhdC9pbm9kZS5jYCwgYnV0IHRoYXQgaXNuJiMzOTt0IGV4cG9ydGVkLiBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmYXRfZmFsbG9jYXRlYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBzdGF0aWMgaW4gYGZzL2ZhdC9maWxlLmNgLCB3aGljaCBtYWtlcyBpdCBhIGhlbHBlci4gSG93ZXZlciwgYGZhdF9maWxlX29wZXJhdGlvbnNgIHVzZXMgaXQgd2hpY2ggbWVhbnMgaXQgbmVlZHMgdG8gZXhpc3QgYXMgYSBkaXNjcmV0ZSBzeW1ib2wgYW5kIG5vdCBiZSBpbmxpbmVkLiBTbyBtYXliZSB0aGF0JiMzOTtzIGEgZ29vZCBvbmUgdG8gaW5jbHVkZT8KCkhvbGQgb24sIEkgc2VlIGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGFyZSBleHBvcnRlZCwgd2hpY2ggbWFrZXMgdGhlbSBBUEkgZW50cnlwb2ludHMuICBgZmF0X2FkZF9jbHVzdGVyYCBhbmQgYGZhdF9hbGxvY19jbHVzdGVyc2AgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4KCkxldCBtZSByZXZpc2l0IGBmYXRfZW50X3dyaXRlYC4gSXQmIzM5O3MgYWxzbyBub24tc3RhdGljLiBTaW5jZSB0aGF0IHdhcyBtb2RpZmllZCwgYW5kIGl0IGlzIGEgbm9uLXN0YXRpYyBoZWxwZXIuCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGZhdF9lbnRfd3JpdGVgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyBhIGhlbHBlci4gYGZhdF9mYWxsb2NhdGVgIGlzIHN0YXRpYywgYnV0IGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBmYXRfZmlsZV9vcGVyYXRpb25zYCwgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgaXQgaXMgdXNlZCBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGFyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gYGZhdF9mcmVlX2NsdXN0ZXJzYCBpcyBleHBvcnRlZCB0b28uCgpJIHRoaW5rIHRoZSBiZXN0IGxpc3QsIGNvbnNpZGVyaW5nIGFsbCB0aGUgbnVhbmNlcywgc2hvdWxkIGJlOgoKKiAgIGBmYXRfZW50X3dyaXRlYAoqICAgYGZhdF9mYWxsb2NhdGVgIChjb25zaWRlcmluZyB0aGUgbm9uLWlubGluaW5nIGR1ZSB0byBmdW5jdGlvbiBwb2ludGVyIHVzYWdlIGluIGBmYXRfZmlsZV9vcGVyYXRpb25zYCkKKiAgIGBmYXRfc2V0YXR0cmAKKiAgIGBmYXRfYWRkX2VudHJpZXNgCiogICBgZmF0X2FkZF9jbHVzdGVyYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZhdC9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNTpcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiAyMDY6XHRcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIDIwNzpcdFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIDIwODpcdFx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4gMjA5Olx0XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gMjEwOlx0XHQucmVsZWFzZVx0PSBmYXRfZmlsZV9yZWxlYXNlLFxuIDIxMTpcdFx0LnVubG9ja2VkX2lvY3RsXHQ9IGZhdF9nZW5lcmljX2lvY3RsLFxuIDIxMjpcdFx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuIDIxMzpcdFx0LmZzeW5jXHRcdD0gZmF0X2ZpbGVfZnN5bmMsXG4gMjE0Olx0XHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiAyMTU6XHRcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiAyMTY6XHRcdC5mYWxsb2NhdGVcdD0gZmF0X2ZhbGxvY2F0ZSxcbiAyMTc6XHRcdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuIDIxODpcdH07XG4gMjE5Olx0XG4gMjIwOlx0c3RhdGljIGludCBmYXRfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4gMjIzOlx0XHRsb2ZmX3Qgc3RhcnQgPSBpbm9kZS1cdTAwM2VpX3NpemUsIGNvdW50ID0gc2l6ZSAtIGlub2RlLVx1MDAzZWlfc2l6ZTtcbiAyMjQ6XHRcdGludCBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZBVCBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIGBmYXRfZmFsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gV2UgY2FuJiMzOTt0IHJlbHkgb24gaW5saW5pbmcgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuCgpSaWdodCwgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGFuZCBgVkZBVF9GU2AuIEkmIzM5O2xsIGluY2x1ZGUgYWxsIHRocmVlLiBNYWtlcyBzZW5zZTsgdGhlc2UgYXJlIHRoZSBjb3JlIEZBVCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIGJlaGluZCB0aGlzLiBBaCwgeWVzLCB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBmYXRfZW50X3dyaXRlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCByZXZlcnRpbmcgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHRoZXJlJiMzOTtzIGEgZmFpbHVyZSB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFULiBUaGlzIGlzIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2U6IGl0JiMzOTtzIGFuIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50IHRoYXQgaW1wYWN0cyBob3cgdGhlIGZpbGVzeXN0ZW0gYmVoYXZlcyBkdXJpbmcgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgYW5kIGFkZGluZyBkaXJlY3RvcnkgZW50cmllcy4gTWFrZXMgc2Vuc2UuCgpBcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IE5vLCBJIHRoaW5rIHRob3NlIHRocmVlIGFyZSB0aGUgbWFpbiBvbmVzIHRoYXQgd2lsbCBhZmZlY3QgdGhpcy4KCkFscmlnaHQsIGxldCYjMzk7cyBwdXQgdGhpcyB0b2dldGhlci4KCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGNoYW5nZSBpcyBlcnJvciBoYW5kbGluZywgYW5kIHRoZXJlZm9yZSwgYW4gYXJlYSBmb3IgZnV6emluZy4KYEZvY3VzU3ltYm9sc2AgLSB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgb3IgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY2hhbmdlLgpJIGtub3cgYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBjb3JlIGNoYW5nZS4KLSBgZmF0X2VudF93cml0ZWAKLSBgZmF0X2ZhbGxvY2F0ZWAgLSBpcyByZWxldmFudCBnaXZlbiBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIuCi0gYGZhdF9zZXRhdHRyYCAtIGNvdWxkIGJlIHJlbGV2YW50IGFzIHdlbGwuCi0gYGZhdF9hZGRfZW50cmllc2AKLSBgZmF0X2NoYWluX2FkZGAgLSBJIG5lZWQgdG8gaW5jbHVkZSB0aGlzLCBhcyBpdCBhbmQgYGZhdF9mcmVlYCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIHRoZSBgb2xkYCBwYXJhbWV0ZXIuIGBmYXRfZnJlZWAgaXMgc3RhdGljLCBzbyBJIHRoaW5rIGBmYXRfY2hhaW5fYWRkYCBpcyB0aGUgb25lIHRvIGluY2x1ZGUuClRoZW4gSSBzaG91bGQgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgOgotIGBGQVRfRlNgCi0gYE1TRE9TX0ZTYAotIGBWRkFUX0ZTYAoKT2theSwgYW5kIG5vdywgdG8gdHJpcGxlLWNoZWNrLCBJIHdpbGwgYWxzbyBpbnNwZWN0IGBmYXRfY2hhaW5fYWRkYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuIEl0JiMzOTtzIGluIGBmcy9mYXQvbWlzYy5jYC4KCkxvb2tzIGdvb2QuIFRoaXMgY292ZXJzIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZmF0L21pc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA3Olx0aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gMTA4Olx0e1xuIDEwOTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gMTEwOlx0XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuIDExMTpcdFx0aW50IHJldCwgbmV3X2ZjbHVzLCBsYXN0O1xuIDExMjpcdFxuIDExMzpcdFx0LypcbiAxMTQ6XHRcdCAqIFdlIG11c3QgbG9jYXRlIHRoZSBsYXN0IGNsdXN0ZXIgb2YgdGhlIGZpbGUgdG8gYWRkIHRoaXMgbmV3XG4gMTE1Olx0XHQgKiBvbmUgKG5ld19kY2x1cykgdG8gdGhlIGVuZCBvZiB0aGUgbGluayBsaXN0ICh0aGUgRkFUKS5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0bGFzdCA9IG5ld19mY2x1cyA9IDA7XG4gMTE4Olx0XHRpZiAoTVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCkge1xuIDExOTpcdFx0XHRpbnQgZmNsdXMsIGRjbHVzO1xuIDEyMDpcdFxuIDEyMTpcdFx0XHRyZXQgPSBmYXRfZ2V0X2NsdXN0ZXIoaW5vZGUsIEZBVF9FTlRfRU9GLCBcdTAwMjZmY2x1cywgXHUwMDI2ZGNsdXMpO1xuIDEyMjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEyMzpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTI0Olx0XHRcdG5ld19mY2x1cyA9IGZjbHVzICYjNDM7IDE7XG4gMTI1Olx0XHRcdGxhc3QgPSBkY2x1cztcbiAxMjY6XHRcdH1cbiAxMjc6XHRcbiAxMjg6XHRcdC8qIGFkZCBuZXcgb25lIHRvIHRoZSBsYXN0IG9mIHRoZSBjbHVzdGVyIGNoYWluICovXG4gMTI5Olx0XHRpZiAobGFzdCkge1xuIDEzMDpcdFx0XHRzdHJ1Y3QgZmF0X2VudHJ5IGZhdGVudDtcbiAxMzE6XHRcbiAxMzI6XHRcdFx0ZmF0ZW50X2luaXQoXHUwMDI2ZmF0ZW50KTtcbiAxMzM6XHRcdFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcdTAwMjZmYXRlbnQsIGxhc3QpO1xuIDEzNDpcdFx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIDEzNTpcdFx0XHRcdGludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7XG4gMTM2Olx0XG4gMTM3Olx0XHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbiAxMzg6XHRcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIDEzOTpcdFx0XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiAxNDA6XHRcdFx0fVxuIDE0MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQzOlx0XHRcdC8qXG4gMTQ0Olx0XHRcdCAqIEZJWE1FOkFsdGhvdWdoIHdlIGNhbiBhZGQgdGhpcyBjYWNoZSwgZmF0X2NhY2hlX2FkZCgpIGlzXG4gMTQ1Olx0XHRcdCAqIGFzc3VtaW5nIHRvIGJlIGNhbGxlZCBhZnRlciBsaW5lYXIgc2VhcmNoIHdpdGggZmF0X2NhY2hlX2lkLlxuIDE0NjpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDQKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZmF0X2NoYWluX2FkZGAsIHNwZWNpZmljYWxseSwgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gYWx0ZXJlZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQuCgpCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24sIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmc6IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaWYgbWlycm9yIEZBVCB3cml0ZSBmYWlscy4gVGhlIG1haW4gY2hhbmdlcyBjZW50ZXIgYXJvdW5kIGBmYXRfZW50X3dyaXRlYC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgcmVzcG9uc2libGUgZm9yIHJldmVydGluZyB0aGUgRkFUIGVudHJ5IHRvIGl0cyBwcmlvciBzdGF0ZSBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHdyaXRpbmcgdGhlIG1pcnJvcmVkIEZBVC4gVGhlIHBhdGNoIGFsc28gcHJvcGFnYXRlcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZSB0byBib3RoIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYC4gVGhlIGZ1bmN0aW9ucyBsaXN0ZWQ6IGBmYXRfZW50X3dyaXRlYCwgYGZhdF9jaGFpbl9hZGRgLCBgZmF0X2ZhbGxvY2F0ZWAsIGBmYXRfc2V0YXR0cmAsIGFuZCBgZmF0X2FkZF9lbnRyaWVzYCBhbmQgY29uZmlndXJhdGlvbiBjb25zdGFudHMsIHN1Y2ggYXMgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGFuZCBgVkZBVF9GU2AsIGFyZSBhbGwgZXNzZW50aWFsIGZvciBzdXBwb3J0aW5nIHRoZSBjaGFuZ2VzLgoKSW4gZXNzZW5jZSwgdGhpcyBtZWFucyB0aGF0IGZpbGUgYWxsb2NhdGlvbiwgZmlsZSB0cnVuY2F0aW9uLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGNhbiBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGNydWNpYWwgYW5kIGNvdWxkIHJldmVhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBub3QgYmUgb2J2aW91cyBvdGhlcndpc2UuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQgYXMgaXQgaXMgcmVhY2hhYmxlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZhdF9lbnRfd3JpdGUmIzM0OywKICAgICYjMzQ7ZmF0X2NoYWluX2FkZCYjMzQ7LAogICAgJiMzNDtmYXRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2ZhdF9zZXRhdHRyJiMzNDssCiAgICAmIzM0O2ZhdF9hZGRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmF0X2VudF93cml0ZSYjMzQ7LAogICAgJiMzNDtmYXRfY2hhaW5fYWRkJiMzNDssCiAgICAmIzM0O2ZhdF9mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7ZmF0X3NldGF0dHImIzM0OywKICAgICYjMzQ7ZmF0X2FkZF9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBmYXRfZW50X3dyaXRlYCB0byByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMgKGBmYXRfbWlycm9yX2Joc2ApLiBJdCBhbHNvIHVwZGF0ZXMgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgIHRvIHBhc3MgdGhlIG9sZCBGQVQgZW50cnkgdmFsdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBmb3IgRkFUIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBkdXJpbmcgZmlsZSBhbGxvY2F0aW9uLCB0cnVuY2F0aW9uLCBvciBkaXJlY3RvcnkgZW50cnkgYWRkaXRpb24uIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYmIyYmY0ZjkyOWUxOWFkZDlhMDlhMWUxOGIyNzVjMGQzN2U5NjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0MDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaAppbmRleCA2MTMzODQxM2Q5ZjNlLi5mYmQyMDdjNTU4NTllIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oCkBAIC0zOTIsNyAmIzQzOzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsCiAJCQlpbnQgZW50cnkpOwogZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKLQkJCSBpbnQgbmV3LCBpbnQgd2FpdCk7CiYjNDM7CQkJIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KTsKIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlciwKIAkJCSAgICAgIGludCBucl9jbHVzdGVyKTsKIGV4dGVybiBpbnQgZmF0X2ZyZWVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNsdXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jCmluZGV4IGYwODAxZDk5ZGQ2MmEuLmRmMjNmYzg1ZjMxMzAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXRlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0ZW50LmMKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgc3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsCiB9CiAKIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKLQkJICBpbnQgbmV3LCBpbnQgd2FpdCkKJiM0MzsJCSAgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwogCWNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gTVNET1NfU0Ioc2IpLSZndDtmYXRlbnRfb3BzOwpAQCAtNDIyLDEwICYjNDM7NDIyLDI1IEBAIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCwKIAlvcHMtJmd0O2VudF9wdXQoZmF0ZW50LCBuZXcpOwogCWlmICh3YWl0KSB7CiAJCWVyciA9IGZhdF9zeW5jX2JocyhmYXRlbnQtJmd0O2JocywgZmF0ZW50LSZndDtucl9iaHMpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogYmhzIGFyZSBub3QgdXB0b2RhdGUgYWZ0ZXIgSS9PIGVycm9yLiBTbyB3ZQomIzQzOwkJCSAqIGNhbiYjMzk7dCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXQKJiM0MzsJCQkgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL08KJiM0MzsJCQkgKiBlcnJvci4KJiM0MzsJCQkgKi8KIAkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJfQotCXJldHVybiBmYXRfbWlycm9yX2JocyhzYiwgZmF0ZW50LSZndDtiaHMsIGZhdGVudC0mZ3Q7bnJfYmhzKTsKJiM0MzsKJiM0MzsJZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCS8qIFRyeSB0byByZXZlcnQgaWYgZ290IHRoZSBlcnJvciBvbiBtaXJyb3IgRkFUICovCiYjNDM7CQlvcHMtJmd0O2VudF9wdXQoZmF0ZW50LCBvbGQpOwomIzQzOwkJaWYgKHdhaXQpCiYjNDM7CQkJZmF0X3N5bmNfYmhzKGZhdGVudC0mZ3Q7YmhzLCBmYXRlbnQtJmd0O25yX2Jocyk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmF0X2VudF9uZXh0KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksCmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCAxYzgzNWNhNWYyMWE1Li42YzQ3NWM1MzMzNGM2IDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTM2Myw3ICYjNDM7MzYzLDggQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcCkKIAkJCQkgICAgIF9fZnVuY19fLCBNU0RPU19JKGlub2RlKS0mZ3Q7aV9wb3MpOwogCQkJcmV0ID0gLUVJTzsKIAkJfSBlbHNlIGlmIChyZXQgJmd0OyAwKSB7Ci0JCQllcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCAmYW1wO2ZhdGVudCwgRkFUX0VOVF9FT0YsIHdhaXQpOwomIzQzOwkJCWVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LAomIzQzOwkJCQkJICAgIHdhaXQpOwogCQkJaWYgKGVycikKIAkJCQlyZXQgPSBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IGU3OTc2MmNmMTk3NTQuLmM0NDI5Njc1NmVhZTYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuYwpAQCAtMTMzLDExICYjNDM7MTMzLDkgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpCiAJCXJldCA9IGZhdF9lbnRfcmVhZChpbm9kZSwgJmFtcDtmYXRlbnQsIGxhc3QpOwogCQlpZiAocmV0ICZndDs9IDApIHsKIAkJCWludCB3YWl0ID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSk7Ci0JCQlpbnQgb2xkID0gcmV0OwogCi0JCQlyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCAmYW1wO2ZhdGVudCwgbmV3X2RjbHVzLCB3YWl0KTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBvbGQsIHdhaXQpOwomIzQzOwkJCXJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsICZhbXA7ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCwKJiM0MzsJCQkJCSAgICB3YWl0KTsKIAkJCWZhdGVudF9icmVsc2UoJmFtcDtmYXRlbnQpOwogCQl9CiAJCWlmIChyZXQgJmx0OyAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA4MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgRW5oYW5jZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEZBVCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiB3cml0aW5nIHRvIHRoZSBGQVQgZW50cmllcy4KClRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gdGhlIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiBpbiBgZnMvZmF0L2ZhdGVudC5jYC4gVGhpcyBpc24mIzM5O3QgYSByYWRpY2FsIGNoYW5nZTsgaXQgYWxsb3dzIHVzIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyAqcHJldmlvdXMqIHZhbHVlIGlmIGEgbWlycm9yaW5nIG9wZXJhdGlvbiAoYGZhdF9taXJyb3JfYmhzYCkgZmFpbHMuIFRoZSBwcmV2aW91cyBsb2dpYyB3YXMgbGVhdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gdGhlIGNhbGxlci4gVGhpcyBmZWVscyBjbGVhbmVyIGFuZCBtb3JlIHJvYnVzdCB0byBtZS4gVGhlIGNhbGxlcnMsIG5hbWVseSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgaW4gYGZzL2ZhdC9maWxlLmNgIGFuZCBgZnMvZmF0L21pc2MuY2AgcmVzcGVjdGl2ZWx5LCBhcmUgbm93IHBhc3NpbmcgdGhlIG9sZCB2YWx1ZSB0byB0aGUgbW9kaWZpZWQgYGZhdF9lbnRfd3JpdGVgLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzIHdpdGhpbiBgZmF0X2VudF93cml0ZWAsIHRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQuICBJZiBgZmF0X21pcnJvcl9iaHNgIHJldHVybnMgYW4gZXJyb3IsIGl0IG5vdyBhdHRlbXB0cyB0byByZXZlcnQgdGhlIHdyaXRlIGJ5IHVzaW5nIHRoZSBgb2xkYCB2YWx1ZSwgZW5zdXJpbmcgY29uc2lzdGVuY3kuIFRoZSBhZGRpdGlvbmFsIGNoZWNrIG9uIHRoZSBgYmhzYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgdXAgdG8gZGF0ZSBpcyBjcnVjaWFsIHRvIHRoZSBlcnJvciBoYW5kbGluZy4KClRoZSBpbnRlcmVzdGluZyBwYXJ0LCBmb3IgbWUsIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGRpZCBhIGNhcmVmdWwgZG91YmxlLWNoZWNrIG9uIHRoaXMuIEkgbG9va2VkIGF0IHdoZXJlIGBvbGRgIGNvbWVzIGZyb20uIEkgY29uZmlybWVkIHRoYXQgdGhlIGBvbGRgIHBhcmFtZXRlciBpcyBpbmRlZWQgcG9wdWxhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgZmF0X2VudF9yZWFkYCwgaW4gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVnZXIsIHNvIHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlIGFyZSBzYWZlLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgd2hlcmUgS01TQU4gbWlnaHQgYmUgbmVlZGVkLiBTbyBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJiMzOTtzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjEwLjQxODE3MDM2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM1OTU4ODUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmF0X2VudF93cml0ZVwiLFxuICAgIFwiZmF0X2NoYWluX2FkZFwiLFxuICAgIFwiZmF0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZmF0X3NldGF0dHJcIixcbiAgICBcImZhdF9hZGRfZW50cmllc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDoxMC40MTgxNzU2ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA3NjA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZhdC5oXFxuKysrIGIvZnMvZmF0L2ZhdC5oXFxuQEAgLTM5Miw3ICszOTIsNyBAQCBleHRlcm4gdm9pZCBmYXRfZW50X2FjY2Vzc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBleHRlcm4gaW50IGZhdF9lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuIFxcdFxcdFxcdGludCBlbnRyeSk7XFxuIGV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuLVxcdFxcdFxcdCBpbnQgbmV3LCBpbnQgd2FpdCk7XFxuK1xcdFxcdFxcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XFxuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcXG4gXFx0XFx0XFx0ICAgICAgaW50IG5yX2NsdXN0ZXIpO1xcbiBleHRlcm4gaW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXFxuaW5kZXggZjA4MDFkOTlkZDYyYS4uZGYyM2ZjODVmMzEzMCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0ZW50LmNcXG4rKysgYi9mcy9mYXQvZmF0ZW50LmNcXG5AQCAtNDEzLDcgKzQxMyw3IEBAIHN0YXRpYyBpbnQgZmF0X21pcnJvcl9iaHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLFxcbiB9XFxuIFxcbiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuLVxcdFxcdCAgaW50IG5ldywgaW50IHdhaXQpXFxuK1xcdFxcdCAgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IE1TRE9TX1NCKHNiKS1cXHUwMDNlZmF0ZW50X29wcztcXG5AQCAtNDIyLDEwICs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbiBcXHRvcHMtXFx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xcbiBcXHRpZiAod2FpdCkge1xcbiBcXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoZmF0ZW50LVxcdTAwM2ViaHMsIGZhdGVudC1cXHUwMDNlbnJfYmhzKTtcXG4tXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXFxuK1xcdFxcdFxcdCAqIGNhbid0IHNpbXBseSByZS1kaXJ0eSB0byByZXZlcnQuIEFuZCBpdFxcbitcXHRcXHRcXHQgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL09cXG4rXFx0XFx0XFx0ICogZXJyb3IuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXFx1MDAzZWJocywgZmF0ZW50LVxcdTAwM2Vucl9iaHMpO1xcbitcXG4rXFx0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cXHUwMDNlYmhzLCBmYXRlbnQtXFx1MDAzZW5yX2Jocyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0LyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi9cXG4rXFx0XFx0b3BzLVxcdTAwM2VlbnRfcHV0KGZhdGVudCwgb2xkKTtcXG4rXFx0XFx0aWYgKHdhaXQpXFxuK1xcdFxcdFxcdGZhdF9zeW5jX2JocyhmYXRlbnQtXFx1MDAzZWJocywgZmF0ZW50LVxcdTAwM2Vucl9iaHMpO1xcbitcXHR9XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZhdF9lbnRfbmV4dChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xcbmluZGV4IDFjODM1Y2E1ZjIxYTUuLjZjNDc1YzUzMzM0YzYgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMzYzLDcgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3Bvcyk7XFxuIFxcdFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdH0gZWxzZSBpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7XFxuK1xcdFxcdFxcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB3YWl0KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbWlzYy5jXFxuKysrIGIvZnMvZmF0L21pc2MuY1xcbkBAIC0xMzMsMTEgKzEzMyw5IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbiBcXHRcXHRyZXQgPSBmYXRfZW50X3JlYWQoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIGxhc3QpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0XFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcXG4tXFx0XFx0XFx0aW50IG9sZCA9IHJldDtcXG4gXFxuLVxcdFxcdFxcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIG5ld19kY2x1cywgd2FpdCk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBvbGQsIHdhaXQpO1xcbitcXHRcXHRcXHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcbiBcXHRcXHRcXHRmYXRlbnRfYnJlbHNlKFxcdTAwMjZmYXRlbnQpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDoxMS44Mjk1OTM4NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTc1NTE5MDM2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkFUX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZhdF9lbnRfd3JpdGVcIixcbiAgICBcImZhdF9jaGFpbl9hZGRcIixcbiAgICBcImZhdF9mYWxsb2NhdGVcIixcbiAgICBcImZhdF9zZXRhdHRyXCIsXG4gICAgXCJmYXRfYWRkX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmF0X2VudF93cml0ZWAgdG8gcmV2ZXJ0IHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFUIGZhaWxzIChgZmF0X21pcnJvcl9iaHNgKS4gSXQgYWxzbyB1cGRhdGVzIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCB0byBwYXNzIHRoZSBvbGQgRkFUIGVudHJ5IHZhbHVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgZm9yIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGZpbGUgYWxsb2NhdGlvbiwgdHJ1bmNhdGlvbiwgb3IgZGlyZWN0b3J5IGVudHJ5IGFkZGl0aW9uLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYmIyYmY0ZjkyOWUxOWFkZDlhMDlhMWUxOGIyNzVjMGQzN2U5NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0MDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxuaW5kZXggNjEzMzg0MTNkOWYzZS4uZmJkMjA3YzU1ODU5ZSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuKysrIGIvZnMvZmF0L2ZhdC5oXG5AQCAtMzkyLDcgKzM5Miw3IEBAIGV4dGVybiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0XHRcdGludCBlbnRyeSk7XG4gZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0XHQgaW50IG5ldywgaW50IHdhaXQpO1xuK1x0XHRcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XG4gZXh0ZXJuIGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLFxuIFx0XHRcdCAgICAgIGludCBucl9jbHVzdGVyKTtcbiBleHRlcm4gaW50IGZhdF9mcmVlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjbHVzdGVyKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0ZW50LmMgYi9mcy9mYXQvZmF0ZW50LmNcbmluZGV4IGYwODAxZDk5ZGQ2MmEuLmRmMjNmYzg1ZjMxMzAgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmF0ZW50LmNcbisrKyBiL2ZzL2ZhdC9mYXRlbnQuY1xuQEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcbiB9XG4gXG4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuLVx0XHQgIGludCBuZXcsIGludCB3YWl0KVxuK1x0XHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0Y29uc3Qgc3RydWN0IGZhdGVudF9vcGVyYXRpb25zICpvcHMgPSBNU0RPU19TQihzYiktXHUwMDNlZmF0ZW50X29wcztcbkBAIC00MjIsMTAgKzQyMiwyNSBAQCBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4gXHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG5ldyk7XG4gXHRpZiAod2FpdCkge1xuIFx0XHRlcnIgPSBmYXRfc3luY19iaHMoZmF0ZW50LVx1MDAzZWJocywgZmF0ZW50LVx1MDAzZW5yX2Jocyk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGJocyBhcmUgbm90IHVwdG9kYXRlIGFmdGVyIEkvTyBlcnJvci4gU28gd2VcbitcdFx0XHQgKiBjYW4ndCBzaW1wbHkgcmUtZGlydHkgdG8gcmV2ZXJ0LiBBbmQgaXRcbitcdFx0XHQgKiB3b3VsZCBub3QgaGF2ZSB2YWx1ZSB0byB3cml0ZSBhZ2FpbiBvbiBJL09cbitcdFx0XHQgKiBlcnJvci5cbitcdFx0XHQgKi9cbiBcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuK1xuK1x0ZXJyID0gZmF0X21pcnJvcl9iaHMoc2IsIGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHQvKiBUcnkgdG8gcmV2ZXJ0IGlmIGdvdCB0aGUgZXJyb3Igb24gbWlycm9yIEZBVCAqL1xuK1x0XHRvcHMtXHUwMDNlZW50X3B1dChmYXRlbnQsIG9sZCk7XG4rXHRcdGlmICh3YWl0KVxuK1x0XHRcdGZhdF9zeW5jX2JocyhmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGZhdF9lbnRfbmV4dChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jXG5pbmRleCAxYzgzNWNhNWYyMWE1Li42YzQ3NWM1MzMzNGM2IDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuKysrIGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTM2Myw3ICszNjMsOCBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuIFx0XHRcdFx0ICAgICBfX2Z1bmNfXywgTVNET1NfSShpbm9kZSktXHUwMDNlaV9wb3MpO1xuIFx0XHRcdHJldCA9IC1FSU87XG4gXHRcdH0gZWxzZSBpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgd2FpdCk7XG4rXHRcdFx0ZXJyID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgd2FpdCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldCA9IGVycjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCBlNzk3NjJjZjE5NzU0Li5jNDQyOTY3NTZlYWU2IDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuKysrIGIvZnMvZmF0L21pc2MuY1xuQEAgLTEzMywxMSArMTMzLDkgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHRcdHJldCA9IGZhdF9lbnRfcmVhZChpbm9kZSwgXHUwMDI2ZmF0ZW50LCBsYXN0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiBcdFx0XHRpbnQgd2FpdCA9IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpO1xuLVx0XHRcdGludCBvbGQgPSByZXQ7XG4gXG4tXHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHdhaXQpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRmYXRfZW50X3dyaXRlKGlub2RlLCBcdTAwMjZmYXRlbnQsIG9sZCwgd2FpdCk7XG4rXHRcdFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcbitcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGZhdGVudF9icmVsc2UoXHUwMDI2ZmF0ZW50KTtcbiBcdFx0fVxuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6MTEuODI5NTk1MzgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5OTk5OTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGQVQgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW1wcm92aW5nIHRoZSByZXNpbGllbmNlIG9mIHRoZSBGQVQgZmlsZXN5c3RlbS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IGFkZGluZyBhbiBgb2xkYCBwYXJhbWV0ZXIgdG8gYGZhdF9lbnRfd3JpdGVgIGluIGBmcy9mYXQvZmF0ZW50LmNgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHJldmVydCB0byB0aGUgcHJldmlvdXMgRkFUIGVudHJ5IHZhbHVlIGlmIGBmYXRfbWlycm9yX2Joc2AgZmFpbHMsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkYXRhIGludGVncml0eS4gVGhlIGBvbGRgIHBhcmFtZXRlciBpcyBhbHNvIGJlaW5nIHBhc3NlZCB0byBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAsIHN1Z2dlc3RpbmcgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIHBvdGVudGlhbGx5IGxldmVyYWdlIHRoZSBvbGQgdmFsdWUgdG9vLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBzY29wZSwgSSBzaG91bGQgZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlc2UgZnVuY3Rpb25zOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIEkga25vdyB0aGlzIGlzIHJlbGF0ZWQgdG8gRkFULCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hpY2ggRkFUIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTVNET1NfRlNgLCBhbmQgYENPTkZJR19WRkFUX0ZTYCBzZWVtIHJlbGV2YW50LiBMZXQncyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgZmF0X2VudF93cml0ZWAgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjE3LjkyOTU5NjkwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzOTY0NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2VudF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD0zOTI9ZXh0ZXJuIGludCBmYXRfZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXQuaC0zOTMtXFx0XFx0XFx0aW50IGVudHJ5KTtcXG5mcy9mYXQvZmF0Lmg6Mzk0OmV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuZnMvZmF0L2ZhdC5oLTM5NS1cXHRcXHRcXHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xcbi0tXFxuZnMvZmF0L2ZhdGVudC5jPTM4MD1zdGF0aWMgaW50IGZhdF9taXJyb3JfYmhzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocyxcXG4tLVxcbmZzL2ZhdC9mYXRlbnQuYy00MTQtXFxuZnMvZmF0L2ZhdGVudC5jOjQxNTppbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXFxuZnMvZmF0L2ZhdGVudC5jLTQxNi1cXHRcXHQgIGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz0zMTM9c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzY1LVxcdFxcdH0gZWxzZSBpZiAocmV0IFxcdTAwM2UgMCkge1xcbmZzL2ZhdC9maWxlLmM6MzY2OlxcdFxcdFxcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFxcdTAwMjZmYXRlbnQsIEZBVF9FTlRfRU9GLCByZXQsXFxuZnMvZmF0L2ZpbGUuYy0zNjctXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcbi0tXFxuZnMvZmF0L21pc2MuYz0xMDc9aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuLS1cXG5mcy9mYXQvbWlzYy5jLTEzNi1cXG5mcy9mYXQvbWlzYy5jOjEzNzpcXHRcXHRcXHRyZXQgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBuZXdfZGNsdXMsIHJldCxcXG5mcy9mYXQvbWlzYy5jLTEzOC1cXHRcXHRcXHRcXHRcXHQgICAgd2FpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjE4LjM4Nzk5OTU5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjcxNzE4MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXkncmUgYWxsIG5lc3RsZWQgY29tZm9ydGFibHkgd2l0aGluIHRoZSBgZnMvZmF0L2AgZGlyZWN0b3J5LCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gRkFUIGZpbGVzeXN0ZW0gbWV0YWRhdGEgbWFuaXB1bGF0aW9uLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiB0YWJsZSB1cGRhdGVzIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIG9yIGV4dGVuZGluZyBkYXRhIGNsdXN0ZXJzIG9uIHRoZSBkaXNrLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBGQVQgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBrZXJuZWwgYnVpbGQuIFRoaW5ncyBsaWtlIHdoZXRoZXIgbG9uZyBmaWxlbmFtZXMgYXJlIGVuYWJsZWQsIHRoZSBGQVQgdmVyc2lvbiBiZWluZyB1c2VkIChGQVQxMiwgRkFUMTYsIEZBVDMyKSwgYW5kIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIGVuYWJsZWQgd291bGQgYmUgcmVhbGx5IHVzZWZ1bCB0byBrbm93LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aWxsIGdpdmUgbWUgYSBnb29kIGNvbnRleHQgZm9yIGFuYWx5emluZyB0aGVpciB1c2UgYW5kIGltcGxlbWVudGF0aW9uLiBDaGVja2luZyB0aGUgY29uZmlncyBmaXJzdCBnaXZlcyBhIHVzZWZ1bCwgaGlnaC1sZXZlbCB2aWV3IHRoYXQgSSBjYW4gdXNlIHRvIGhlbHAgZ3VpZGUgbXkgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDozNS4wNTk3MjAwNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NjQ5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZBVF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZmF0L0tjb25maWc6Mjpjb25maWcgRkFUX0ZTXFxuZnMvZmF0L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDozNS4xMjgzODgxNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODIzODk2NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRkFUIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgemVybyBpbiBvbiBgZnMvZmF0L0tjb25maWdgLlwiIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuIEknbSBkZWFsaW5nIHdpdGggdGhlIEZBVCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBzdHJ1Y3R1cmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgRkFUIHdpdGhpbiB0aGlzIHN5c3RlbSwgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gaW5mbHVlbmNlIHRoZSBrZXJuZWwncyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgZGVzaWduIHRvIG1ha2UgYW55IGFkanVzdG1lbnRzIGVmZmVjdGl2ZWx5LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6NTMuMzY3MzU4NDgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZmF0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRkFUX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNjpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zICh0aGUgTVMtRE9TIGFuZFxcbiAgIDk6XFx0XFx0ICBWRkFUIChXaW5kb3dzIDk1KSBmaWxlIHN5c3RlbXMpLCB0aGVuIHlvdSBtdXN0IHNheSBZIG9yIE0gaGVyZVxcbiAgMTA6XFx0XFx0ICB0byBpbmNsdWRlIEZBVCBzdXBwb3J0LiBZb3Ugd2lsbCB0aGVuIGJlIGFibGUgdG8gbW91bnQgcGFydGl0aW9ucyBvclxcbiAgMTE6XFx0XFx0ICBkaXNrZXR0ZXMgd2l0aCBGQVQtYmFzZWQgZmlsZSBzeXN0ZW1zIGFuZCB0cmFuc3BhcmVudGx5IGFjY2VzcyB0aGVcXG4gIDEyOlxcdFxcdCAgZmlsZXMgb24gdGhlbSwgaS5lLiBNU0RPUyBmaWxlcyB3aWxsIGxvb2sgYW5kIGJlaGF2ZSBqdXN0IGxpa2UgYWxsXFxuICAxMzpcXHRcXHQgIG90aGVyIFVuaXggZmlsZXMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgVGhpcyBGQVQgc3VwcG9ydCBpcyBub3QgYSBmaWxlIHN5c3RlbSBpbiBpdHNlbGYsIGl0IG9ubHkgcHJvdmlkZXNcXG4gIDE2OlxcdFxcdCAgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBvdGhlciBmaWxlIHN5c3RlbXMuIFlvdSB3aWxsIGhhdmUgdG8gc2F5IFkgb3JcXG4gIDE3OlxcdFxcdCAgTSB0byBhdCBsZWFzdCBvbmUgb2YgXFxcIk1TRE9TIGZzIHN1cHBvcnRcXFwiIG9yIFxcXCJWRkFUIGZzIHN1cHBvcnRcXFwiIGluXFxuICAxODpcXHRcXHQgIG9yZGVyIHRvIG1ha2UgdXNlIG9mIGl0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEFub3RoZXIgd2F5IHRvIHJlYWQgYW5kIHdyaXRlIE1TRE9TIGZsb3BwaWVzIGFuZCBoYXJkIGRyaXZlXFxuICAyMTpcXHRcXHQgIHBhcnRpdGlvbnMgZnJvbSB3aXRoaW4gTGludXggKGJ1dCBub3QgdHJhbnNwYXJlbnRseSkgaXMgd2l0aCB0aGVcXG4gIDIyOlxcdFxcdCAgbXRvb2xzIChcXFwibWFuIG10b29sc1xcXCIpIHByb2dyYW0gc3VpdGUuIFlvdSBkb24ndCBuZWVkIHRvIHNheSBZIGhlcmUgaW5cXG4gIDIzOlxcdFxcdCAgb3JkZXIgdG8gZG8gdGhhdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBJZiB5b3UgbmVlZCB0byBtb3ZlIGxhcmdlIGZpbGVzIG9uIGZsb3BwaWVzIGJldHdlZW4gYSBET1MgYW5kIGFcXG4gIDI2OlxcdFxcdCAgTGludXggYm94LCBzYXkgWSBoZXJlLCBtb3VudCB0aGUgZmxvcHB5IHVuZGVyIExpbnV4IHdpdGggYW4gTVNET1NcXG4gIDI3OlxcdFxcdCAgZmlsZSBzeXN0ZW0gYW5kIHVzZSBHTlUgdGFyJ3MgTSBvcHRpb24uIEdOVSB0YXIgaXMgYSBwcm9ncmFtXFxuICAyODpcXHRcXHQgIGF2YWlsYWJsZSBmb3IgVW5peCBhbmQgRE9TIChcXFwibWFuIHRhclxcXCIgb3IgXFxcImluZm8gdGFyXFxcIikuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhlIEZBVCBzdXBwb3J0IHdpbGwgZW5sYXJnZSB5b3VyIGtlcm5lbCBieSBhYm91dCAzNyBLQi4gSWYgdW5zdXJlLFxcbiAgMzE6XFx0XFx0ICBzYXkgWS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDM0OlxcdFxcdCAgZmF0LiAgTm90ZSB0aGF0IGlmIHlvdSBjb21waWxlIHRoZSBGQVQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgeW91XFxuICAzNTpcXHRcXHQgIGNhbm5vdCBjb21waWxlIGFueSBvZiB0aGUgRkFULWJhc2VkIGZpbGUgc3lzdGVtcyBpbnRvIHRoZSBrZXJuZWxcXG4gIDM2OlxcdFxcdCAgLS0gdGhleSB3aWxsIGhhdmUgdG8gYmUgbW9kdWxlcyBhcyB3ZWxsLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTVNET1NfRlNcXG4gIDM5OlxcdFxcdHRyaXN0YXRlIFxcXCJNU0RPUyBmcyBzdXBwb3J0XFxcIlxcbiAgNDA6XFx0XFx0c2VsZWN0IEZBVF9GU1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgTVNET1MgcGFydGl0aW9ucyBvZiB5b3VyIGhhcmQgZHJpdmUgKHVubGVzc1xcbiAgNDM6XFx0XFx0ICB0aGV5IGFyZSBjb21wcmVzc2VkOyB0byBhY2Nlc3MgY29tcHJlc3NlZCBNU0RPUyBwYXJ0aXRpb25zIHVuZGVyXFxuICA0NDpcXHRcXHQgIExpbnV4LCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIERPUyBlbXVsYXRvciBET1NFTVUsIGRlc2NyaWJlZCBpbiB0aGVcXG4gIDQ1OlxcdFxcdCAgRE9TRU1VLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAgNDY6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZSwgb3IgdHJ5IGRtc2Rvc2ZzIGluXFxuICA0NzpcXHRcXHQgIFxcdTAwM2NmdHA6Ly9pYmlibGlvLm9yZy9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2Rvc2ZzL1xcdTAwM2UuIElmIHlvdVxcbiAgNDg6XFx0XFx0ICBpbnRlbmQgdG8gdXNlIGRvc2VtdSB3aXRoIGEgbm9uLWNvbXByZXNzZWQgTVNET1MgcGFydGl0aW9uLCBzYXkgWVxcbiAgNDk6XFx0XFx0ICBoZXJlKSBhbmQgTVNET1MgZmxvcHBpZXMuIFRoaXMgbWVhbnMgdGhhdCBmaWxlIGFjY2VzcyBiZWNvbWVzXFxuICA1MDpcXHRcXHQgIHRyYW5zcGFyZW50LCBpLmUuIHRoZSBNU0RPUyBmaWxlcyBsb29rIGFuZCBiZWhhdmUganVzdCBsaWtlIGFsbFxcbiAgNTE6XFx0XFx0ICBvdGhlciBVbml4IGZpbGVzLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIElmIHlvdSBoYXZlIFdpbmRvd3MgOTUgb3IgV2luZG93cyBOVCBpbnN0YWxsZWQgb24geW91ciBNU0RPU1xcbiAgNTQ6XFx0XFx0ICBwYXJ0aXRpb25zLCB5b3Ugc2hvdWxkIHVzZSB0aGUgVkZBVCBmaWxlIHN5c3RlbSAoc2F5IFkgdG8gXFxcIlZGQVQgZnNcXG4gIDU1OlxcdFxcdCAgc3VwcG9ydFxcXCIgYmVsb3cpLCBvciB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzZWUgdGhlIGxvbmcgZmlsZW5hbWVzXFxuICA1NjpcXHRcXHQgIGdlbmVyYXRlZCBieSBXaW5kb3dzIDk1IC8gV2luZG93cyBOVC5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwgYnkgYWJvdXQgNyBLQi4gSWYgdW5zdXJlLFxcbiAgNTk6XFx0XFx0ICBhbnN3ZXIgWS4gVGhpcyB3aWxsIG9ubHkgd29yayBpZiB5b3Ugc2FpZCBZIHRvIFxcXCJET1MgRkFUIGZzIHN1cHBvcnRcXFwiXFxuICA2MDpcXHRcXHQgIGFzIHdlbGwuIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA2MTpcXHRcXHQgIGJlIGNhbGxlZCBtc2Rvcy5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIFZGQVRfRlNcXG4gIDY0OlxcdFxcdHRyaXN0YXRlIFxcXCJWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XFxcIlxcbiAgNjU6XFx0XFx0c2VsZWN0IEZBVF9GU1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBub3JtYWwgV2luZG93cyBmaWxlIHN5c3RlbXMgd2l0aFxcbiAgNjg6XFx0XFx0ICBsb25nIGZpbGVuYW1lcy4gIFRoYXQgaW5jbHVkZXMgbm9uLWNvbXByZXNzZWQgRkFULWJhc2VkIGZpbGUgc3lzdGVtc1xcbiAgNjk6XFx0XFx0ICB1c2VkIGJ5IFdpbmRvd3MgOTUsIFdpbmRvd3MgOTgsIFdpbmRvd3MgTlQgNC4wLCBhbmQgdGhlIFVuaXhcXG4gIDcwOlxcdFxcdCAgcHJvZ3JhbXMgZnJvbSB0aGUgbXRvb2xzIHBhY2thZ2UuXFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCAgVGhlIFZGQVQgc3VwcG9ydCBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxMCBLQiBhbmQgaXQgb25seVxcbiAgNzM6XFx0XFx0ICB3b3JrcyBpZiB5b3Ugc2FpZCBZIHRvIHRoZSBcXFwiRE9TIEZBVCBmcyBzdXBwb3J0XFxcIiBhYm92ZS4gIFBsZWFzZSByZWFkXFxuICA3NDpcXHRcXHQgIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLiAgSWZcXG4gIDc1OlxcdFxcdCAgdW5zdXJlLCBzYXkgWS5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDc4OlxcdFxcdCAgdmZhdC5cXG4gIDc5OlxcdFxcbiAgODA6XFx0Y29uZmlnIEZBVF9ERUZBVUxUX0NPREVQQUdFXFxuICA4MTpcXHRcXHRpbnQgXFxcIkRlZmF1bHQgY29kZXBhZ2UgZm9yIEZBVFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gRkFUX0ZTXFxuICA4MzpcXHRcXHRkZWZhdWx0IDQzN1xcbiAgODQ6XFx0XFx0aGVscFxcbiAgODU6XFx0XFx0ICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZSBjb2RlcGFnZSBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDg2OlxcdFxcdCAgSXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgXFxcImNvZGVwYWdlXFxcIiBtb3VudCBvcHRpb24uXFxuICA4NzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDg4OlxcdFxcbiAgODk6XFx0Y29uZmlnIEZBVF9ERUZBVUxUX0lPQ0hBUlNFVFxcbiAgOTA6XFx0XFx0c3RyaW5nIFxcXCJEZWZhdWx0IGlvY2hhcnNldCBmb3IgRkFUXFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBWRkFUX0ZTXFxuICA5MjpcXHRcXHRkZWZhdWx0IFxcXCJpc284ODU5LTFcXFwiXFxuICA5MzpcXHRcXHRoZWxwXFxuICA5NDpcXHRcXHQgIFNldCB0aGlzIHRvIHRoZSBkZWZhdWx0IGlucHV0L291dHB1dCBjaGFyYWN0ZXIgc2V0IHlvdSdkXFxuICA5NTpcXHRcXHQgIGxpa2UgRkFUIHRvIHVzZS4gSXQgc2hvdWxkIHByb2JhYmx5IG1hdGNoIHRoZSBjaGFyYWN0ZXIgc2V0XFxuICA5NjpcXHRcXHQgIHRoYXQgbW9zdCBvZiB5b3VyIEZBVCBmaWxlc3lzdGVtcyB1c2UsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlblxcbiAgOTc6XFx0XFx0ICB3aXRoIHRoZSBcXFwiaW9jaGFyc2V0XFxcIiBtb3VudCBvcHRpb24gZm9yIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDk4OlxcdFxcdCAgTm90ZSB0aGF0IFxcXCJ1dGY4XFxcIiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIEZBVCBmaWxlc3lzdGVtcy5cXG4gIDk5OlxcdFxcdCAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkbid0IHNldCBcXFwidXRmOFxcXCIgaGVyZSAtIHNlbGVjdCB0aGUgbmV4dCBvcHRpb25cXG4gMTAwOlxcdFxcdCAgaW5zdGVhZCBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgVVRGLTggZW5jb2RlZCBmaWxlIG5hbWVzIGJ5IGRlZmF1bHQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQwOjUzLjM2NzQzNzMxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDI1ODI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCBmdW5jdGlvbnMsIGFzIGlmIHRoZXkncmUgbXkgb3duIHRob3VnaHRzLCBnaXZlbiBteSBkZWVwIGRpdmUgaW50byB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBGQVQgRmlsZSBTeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgRmlsZSBBbGxvY2F0aW9uIFRhYmxlIChGQVQpIGZpbGUgc3lzdGVtIHN0dWZmLiBTcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9ucyBtZW50aW9uZWQgYXJlIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYC4gU3RyYWlnaHQgYXdheSwgdGhvc2UgdGVsbCBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIGJyb2FkIGNvbXBhdGliaWxpdHkuIGBNU0RPU19GU2AgaXMgdGhlIGNsYXNzaWMsIHRoZSBncmFuZGRhZGR5IG9mIEZBVCwgd2hpbGUgYFZGQVRfRlNgIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbG9uZyBmaWxlbmFtZXMgZXh0ZW5zaW9uLCBwcm9iYWJseSBXaW5kb3dzLXJlbGF0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGRpZmZlcmVuY2VzIGluIG1ldGFkYXRhIGFuZCBsaW1pdGF0aW9ucyBiZXR3ZWVuIHRoZW0uXG5cbk5vdywgb250byB0aGUgY29yZSBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCBgZmF0X2VudF93cml0ZWAsIGBmYXRfZnJlZWAsIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBGQVQgbWFuaXB1bGF0aW9uLiBgZmF0X2VudF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgRkFUIGl0c2VsZuKAlHdyaXRpbmcgdGhlIGNsdXN0ZXIgbnVtYmVycyB0aGF0IGRlZmluZSBmaWxlIGFsbG9jYXRpb24uIEl04oCZcyB0aGUgaGVhcnQgb2YgaG93IHdlIGxpbmsgZGF0YSBzZWN0b3JzLiBgZmF0X2ZyZWVgLCBubyBzdXJwcmlzZXMgdGhlcmUsIGxpa2VseSBtYXJrcyBhIGNsdXN0ZXIgYXMgYXZhaWxhYmxlIGZvciByZXVzZSwgYW5kLCBpZiB0aGF0J3MgdGhlIGNhc2UsIGl0ICptdXN0KiBoYW5kbGUgZWRnZSBjYXNlcyBjYXJlZnVsbHnigJR3aGF0IGlmIGl0J3MgdGhlIGxhc3QgY2x1c3RlciBpbiBhIGZpbGU/IElzIHRoZXJlIGFueSB3cml0ZS1iYWNrPyBUaGUgdGhpcmQsIGBmYXRfY2hhaW5fYWRkYCwgd2VsbCwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiB0aGF0IGV4dGVuZHMgYW4gZXhpc3RpbmcgZmlsZSBvciBjcmVhdGVzIGEgbmV3IG9uZSBieSBhZGRpbmcgY2x1c3RlcnMgdG8gaXRzIGNoYWluLiBUaGlzIG9uZSBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZpbGVzIGdyb3cuIEknZCBuZWVkIHRvIGV4YW1pbmUgdGhpcyBmb3IgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5Ib2xkIG9uLCBJIHNlZSBzb21ldGhpbmcuIEkndmUgZ290IHRvIGNoZWNrLiBJcyBgZmF0X2VudF93cml0ZWAgZXhwb3J0ZWQ/IFRoYXQgd291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0J3MgZXhwb3J0ZWQsIHRoYXQgdGVsbHMgbWUgaXQncyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSAqb3V0c2lkZSogdGhlIGZpbGUgc3lzdGVtIGNvZGUuIFRoYXQgY291bGQgbWVhbiBpdCdzIGEgY3JpdGljYWwgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgZGVwZW5kIG9uLiBTbywgaXMgaXQ/IEJldHRlciBtYWtlIHN1cmUgSSBjYW4gdHJhY2sgZG93biBpdHMgdXNlIGFuZCBiZWhhdmlvciB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDA6NTkuNzEwMDIxODQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY0NzExMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZmF0X2VudF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MDo1OS43NTM2NzQ2NzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMjg4NzY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIENyb3NzLUZpbGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRoaW5nIGlzbid0IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNyb3NzLWZpbGUgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGl0J3MgdXNlZCAqaW50ZXJuYWxseSogd2l0aGluIHRoZSBwcm9qZWN0IHNjb3BlLCBidXQgbm90IG1hZGUgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucywgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLCBhcmUgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHJlbGllcyBvbiB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIHBhdHRlcm5zIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJ3QgZXhwb3J0ZWQgY291bGQgc3VnZ2VzdCBhIGZldyB0aGluZ3M6IGl0J3MgaW50ZW5kZWQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaXQncyBwYXJ0IG9mIGEgbW9kdWxlIHdpdGggYSBkZWZpbmVkIHB1YmxpYyBpbnRlcmZhY2UsIG9yIHRoZXJlJ3MgYSBkZXNpZ24gcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqIHdpdGggdGhvc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTowOS43ODI1NTI5OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTU5NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZhdF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2ZhdGVudC5jPTU3ND1pbnQgZmF0X2ZyZWVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNsdXN0ZXIpXFxuLS1cXG5mcy9mYXQvZmF0ZW50LmMtNjU0LX1cXG5mcy9mYXQvZmF0ZW50LmM6NjU1OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9mcmVlX2NsdXN0ZXJzKTtcXG5mcy9mYXQvZmF0ZW50LmMtNjU2LVxcbi0tXFxuZnMvZmF0L2lub2RlLmM9MTk4Nj12b2lkIGZhdF9mcmVlX2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTE5OTMtfVxcbmZzL2ZhdC9pbm9kZS5jOjE5OTQ6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X2ZyZWVfZmMpO1xcbmZzL2ZhdC9pbm9kZS5jLTE5OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjA5LjgyNDcxNDE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM0MDUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgRkFUIEZpbGVzeXN0ZW0gU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gdGhlIEZBVCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZmlsZSBvcGVyYXRpb25zLiBJIHNlZSBgZmF0X2ZyZWVgIC0gdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYGZpbGUuY2Agc291cmNlIGZpbGUgaW4gdGhlIGBmcy9mYXRgIGRpcmVjdG9yeS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlbHkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgaW50ZXJuYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4sIHdlbGwsIGZyZWVpbmcgc29tZSBzb3J0IG9mIHJlc291cmNlLiBDb3VsZCBiZSBjbHVzdGVycywgZmlsZSBtZXRhZGF0YS4uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIGtub3cgZm9yIHN1cmUsIGJ1dCB0aGUgbmFtZSBnaXZlcyBhIHByZXR0eSBzdHJvbmcgaGludC5cblxuVGhlbiB0aGVyZSdzIGBmYXRfY2hhaW5fYWRkYC4gVGhhdCdzIGluIGBtaXNjLmNgLCBhZ2Fpbiwgd2l0aGluIHRoZSBgZnMvZmF0YCBkaXJlY3RvcnkuIFRoZSBcImNoYWluXCIgcGFydCBvZiB0aGUgbmFtZSBpcyBpbXBvcnRhbnQgaW4gRkFUIGJlY2F1c2UgdGhlIGZpbGVzeXN0ZW0gdXNlcyBhIGxpbmtlZCBsaXN0IG9mIGNsdXN0ZXIgbnVtYmVycyB0byByZXByZXNlbnQgYSBmaWxlJ3MgZGF0YS4gQWRkaW5nIHRvIGEgXCJjaGFpblwiIHByb2JhYmx5IG1lYW5zIGFwcGVuZGluZyBhIG5ldyBjbHVzdGVyIChvciBhIHNlcmllcyBvZiBjbHVzdGVycykgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZpbGUuIFNpbmNlIGl0J3MgaW4gYG1pc2MuY2AsIEknZCBndWVzcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkaW5nIGEgZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgdG8gdGhlIGZpbGVzeXN0ZW0gY29kZS5cblxuU28sIGluIG15IGhlYWQsIEknbSB0aGlua2luZy4uLiBgZmF0X2ZyZWVgIGxpa2VseSBoYW5kbGVzIGZyZWVpbmcgdXAgY2x1c3RlciBjaGFpbnMgb3Igc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gYSBmaWxlIGVudHJ5LCB3aGlsZSBgZmF0X2NoYWluX2FkZGAgcHJvYmFibHkgYXBwZW5kcyBibG9ja3MgKGNsdXN0ZXJzKSBvZiBkYXRhIHRvIGEgZmlsZS4gT25lIGZyZWVzLCB0aGUgb3RoZXIgYWRkcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlaXIgaW1wbGVtZW50YXRpb25zIHRvIGJlIGNlcnRhaW4sIGJ1dCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgcHJldHR5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MTQuNzg4MTIxNjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0ODI0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZmF0X2NoYWluX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToxNC44MzU0NzUzODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDE4ODk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGZhdF9jaGFpbl9hZGRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgaXMgdGhpcyBgZmF0X2NoYWluX2FkZGAgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSB0cnlpbmcgdG8gZGVjaXBoZXIgaG93IGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGl0cyB1c2UuIEkgYW50aWNpcGF0ZSB0aGUgdXNhZ2UgcGF0dGVybiB3aWxsIGRpY3RhdGUgd2hhdCBraW5kIG9mIGFuYWx5c2lzIEknbGwgbmVlZC4gSWYgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBhIGhlYXZpbHkgdXNlZCBwYXRoLCBJJ2xsIHBheSBjbG9zZXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MjAuNTI5NjY2MzQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEzMjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfY2hhaW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2Rpci5jPTEzMjE9aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG4tLVxcbmZzL2ZhdC9kaXIuYy0xNDM0LVxcdFxcdH1cXG5mcy9mYXQvZGlyLmM6MTQzNTpcXHRcXHRlcnIgPSBmYXRfY2hhaW5fYWRkKGRpciwgY2x1c3RlciwgbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2Rpci5jLTE0MzYtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvZmF0L2ZhdC5oPTQ2Nj1leHRlcm4gaW50IGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9mYXQvZmF0Lmg6NDY3OmV4dGVybiBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2ZhdC5oLTQ2OC1leHRlcm4gdm9pZCBmYXRfdGltZV9mYXQydW5peChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuLS1cXG5mcy9mYXQvaW5vZGUuYz0xMDQ9aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZmF0L2lub2RlLmMtMTEyLVxcdCAqIGNsdXN0ZXIgaXMgd3JpdGVkICovXFxuZnMvZmF0L2lub2RlLmM6MTEzOlxcdGVyciA9IGZhdF9jaGFpbl9hZGQoaW5vZGUsIGNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9pbm9kZS5jLTExNC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L21pc2MuYz02OD1pbnQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9mYXQvbWlzYy5jLTEwMy0vKlxcbmZzL2ZhdC9taXNjLmM6MTA0OiAqIGZhdF9jaGFpbl9hZGQoKSBhZGRzIGEgbmV3IGNsdXN0ZXIgdG8gdGhlIGNoYWluIG9mIGNsdXN0ZXJzIHJlcHJlc2VudGVkXFxuZnMvZmF0L21pc2MuYy0xMDUtICogYnkgaW5vZGUuXFxuZnMvZmF0L21pc2MuYy0xMDYtICovXFxuZnMvZmF0L21pc2MuYzoxMDc6aW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuZnMvZmF0L21pc2MuYy0xMDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyMC41NzI4MDE3NDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0MDcwMTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRkFUIENsdXN0ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgRkFUIGZpbGVzeXN0ZW0gaGFuZGxlcyBjbHVzdGVycywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBhbmQgZnJlZWluZyBvZiB0aGVtLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGZhdF9hZGRfY2x1c3RlcmAgYW5kIGBmYXRfYWRkX2VudHJpZXNgIGJvdGggcmVseSBvbiBgZmF0X2NoYWluX2FkZGAuIFRoYXQncyBnb29kIHRvIGtub3c7IGl0IHBvaW50cyB0byBhIGNvbW1vbiBjb3JlIGZ1bmN0aW9uIGZvciBleHBhbmRpbmcgZmlsZSBzcGFjZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnJlZWluZyBwcm9jZXNzLCBiZWNhdXNlIHRoYXQncyBqdXN0IGFzIGltcG9ydGFudCBmb3IgbWFpbnRhaW5pbmcgZmlsZSBzeXN0ZW0gaW50ZWdyaXR5LiBJdCBsb29rcyBsaWtlIGBmYXRfZnJlZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGF0IGFzcGVjdC4gSSBzaG91bGQgY2hlY2sgaG93IGl0J3MgYmVpbmcgdXNlZC4gSSB3aWxsIHplcm8gaW4gb24gYGZzL2ZhdC9maWxlLmNgIHRvIHNlZSB3aGVyZSB0aGUgYGZhdF9mcmVlYCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGNhbGxzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBmaWxlcyBhcmUgZGVsZXRlZCBvciB0cnVuY2F0ZWQsIGFuZCBob3cgdGhlIEZBVCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjI0LjcxMzUwNTU2NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MTU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzEyLS8qIEZyZWUgYWxsIGNsdXN0ZXJzIGFmdGVyIHRoZSBza2lwJ3RoIGNsdXN0ZXIuICovXFxuZnMvZmF0L2ZpbGUuYzozMTM6c3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcXG5mcy9mYXQvZmlsZS5jLTMxNC17XFxuLS1cXG5mcy9mYXQvZmlsZS5jLTM3OS1cXHQvKiBGcmVlaW5nIHRoZSByZW1haW5lZCBjbHVzdGVyIGNoYWluICovXFxuZnMvZmF0L2ZpbGUuYzozODA6XFx0cmV0dXJuIGZhdF9mcmVlX2NsdXN0ZXJzKGlub2RlLCBmcmVlX3N0YXJ0KTtcXG5mcy9mYXQvZmlsZS5jLTM4MS19XFxuLS1cXG5mcy9mYXQvZmlsZS5jPTM4Mz12b2lkIGZhdF90cnVuY2F0ZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldClcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMzk3LVxcbmZzL2ZhdC9maWxlLmM6Mzk4OlxcdGZhdF9mcmVlKGlub2RlLCBucl9jbHVzdGVycyk7XFxuZnMvZmF0L2ZpbGUuYy0zOTktXFx0ZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyNC43NjkxMjYwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNzgyNDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIEJsb2NrIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBmYXRfdHJ1bmNhdGVfYmxvY2tzYCBsZXZlcmFnZXMgYGZhdF9mcmVlYC4gU28sIHRoYXQncyBzdHJhaWdodGZvcndhcmQgLSB0cnVuY2F0aW9uIHJlbGllcyBvbiBmcmVlaW5nIHVwIGJsb2Nrcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBsZXQncyBkaWcgaW50byBgZmF0X2VudF93cml0ZWAuIFRoaXMgc2VlbXMgY3J1Y2lhbCwgYXBwZWFyaW5nIGluIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIElzIGBmYXRfZW50X3dyaXRlYCB0cnVseSB1c2VkIHdpdGhpbiBgZmF0X2ZyZWVgPyBBbmQsIGlzIGl0IGFsc28gYmVpbmcgdXNlZCB3aXRoaW4gYGZhdF9jaGFpbl9hZGRgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYD8gVGhpcyByZXF1aXJlcyBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSBkZXRhaWxzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgRkFUIChGaWxlIEFsbG9jYXRpb24gVGFibGUpIGVudHJpZXMgdGhlbXNlbHZlcywgYW5kIGFyZSwgdGhlcmVmb3JlLCBjYWxsZWQgZHVyaW5nIHNldmVyYWwgZGlmZmVyZW50IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3Nlcy4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZSBmaWxlc3lzdGVtIG1hbmFnZXMgYW5kIGtlZXBzIHRyYWNrIG9mIGFsbG9jYXRlZCBhbmQgZnJlZSBjbHVzdGVycyBvbiBhIEZBVCBmaWxlc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6MjkuNTc2OTUzMzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDY5ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9lbnRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvZmF0Lmg9MzkyPWV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcXG5mcy9mYXQvZmF0LmgtMzkzLVxcdFxcdFxcdGludCBlbnRyeSk7XFxuZnMvZmF0L2ZhdC5oOjM5NDpleHRlcm4gaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXQuaC0zOTUtXFx0XFx0XFx0IGludCBuZXcsIGludCBvbGQsIGludCB3YWl0KTtcXG4tLVxcbmZzL2ZhdC9mYXRlbnQuYz0zODA9c3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXFxuLS1cXG5mcy9mYXQvZmF0ZW50LmMtNDE0LVxcbmZzL2ZhdC9mYXRlbnQuYzo0MTU6aW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxcbmZzL2ZhdC9mYXRlbnQuYy00MTYtXFx0XFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcXG4tLVxcbmZzL2ZhdC9maWxlLmM9MzEzPXN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTM2NS1cXHRcXHR9IGVsc2UgaWYgKHJldCBcXHUwMDNlIDApIHtcXG5mcy9mYXQvZmlsZS5jOjM2NjpcXHRcXHRcXHRlcnIgPSBmYXRfZW50X3dyaXRlKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBGQVRfRU5UX0VPRiwgcmV0LFxcbmZzL2ZhdC9maWxlLmMtMzY3LVxcdFxcdFxcdFxcdFxcdCAgICB3YWl0KTtcXG4tLVxcbmZzL2ZhdC9taXNjLmM9MTA3PWludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbi0tXFxuZnMvZmF0L21pc2MuYy0xMzYtXFxuZnMvZmF0L21pc2MuYzoxMzc6XFx0XFx0XFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXFxuZnMvZmF0L21pc2MuYy0xMzgtXFx0XFx0XFx0XFx0XFx0ICAgIHdhaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MToyOS42NTQ0MjgzMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzI4NjI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgZmF0X2VudF93cml0ZWAgYW5kIGl0IHNlZW1zIGxpa2UgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyBpbmNvbXBsZXRlLiBUaGlzIHJvdXRpbmUgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IHV0aWxpemVkIGluIGBmYXRfZnJlZWAgYW5kIGBmYXRfY2hhaW5fYWRkYCwgYnV0IEknbSBjZXJ0YWluIGl0J3MgdXNlZCBlbHNld2hlcmUuXG5cbldoYXQgYWJvdXQgYGZhdF9hbGxvY19jbHVzdGVyc2AgYW5kIGBmYXRfZnJlZV9jbHVzdGVyc2A/IFN1cmVseSB0aGV5J3JlIGludm9sdmVkIGluIG1vZGlmeWluZyBGQVQgZW50cmllcy4gVGhpcyByZXF1aXJlcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdmVybGFwIGluIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBmYXRfYWxsb2NfY2x1c3RlcnNgIG5vdywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvZmF0L2ZhdGVudC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlcyBnaXZlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gd3JpdGUgRkFUIGVudHJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozMy4zMjE3MTY5NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzU1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9hbGxvY19jbHVzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9kaXIuYz0xMTczPWludCBmYXRfYWxsb2NfbmV3X2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbi0tXFxuZnMvZmF0L2Rpci5jLTExODMtXFxuZnMvZmF0L2Rpci5jOjExODQ6XFx0ZXJyID0gZmF0X2FsbG9jX2NsdXN0ZXJzKGRpciwgXFx1MDAyNmNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9kaXIuYy0xMTg1LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mYXQvZGlyLmM9MTIzOD1zdGF0aWMgaW50IGZhdF9hZGRfbmV3X2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHZvaWQgKnNsb3RzLCBpbnQgbnJfc2xvdHMsXFxuLS1cXG5mcy9mYXQvZGlyLmMtMTI1Ny1cXG5mcy9mYXQvZGlyLmM6MTI1ODpcXHRlcnIgPSBmYXRfYWxsb2NfY2x1c3RlcnMoZGlyLCBjbHVzdGVyLCAqbnJfY2x1c3Rlcik7XFxuZnMvZmF0L2Rpci5jLTEyNTktXFx0aWYgKGVycilcXG4tLVxcbmZzL2ZhdC9mYXQuaD0zOTQ9ZXh0ZXJuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcXG5mcy9mYXQvZmF0LmgtMzk1LVxcdFxcdFxcdCBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdCk7XFxuZnMvZmF0L2ZhdC5oOjM5NjpleHRlcm4gaW50IGZhdF9hbGxvY19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmNsdXN0ZXIsXFxuZnMvZmF0L2ZhdC5oLTM5Ny1cXHRcXHRcXHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XFxuLS1cXG5mcy9mYXQvZmF0ZW50LmM9NDY4PXN0YXRpYyB2b2lkIGZhdF9jb2xsZWN0X2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCAqbnJfYmhzLFxcbi0tXFxuZnMvZmF0L2ZhdGVudC5jLTQ4NS1cXG5mcy9mYXQvZmF0ZW50LmM6NDg2OmludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcXG5mcy9mYXQvZmF0ZW50LmMtNDg3LXtcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jPTEwND1pbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mYXQvaW5vZGUuYy0xMDctXFxuZnMvZmF0L2lub2RlLmM6MTA4OlxcdGVyciA9IGZhdF9hbGxvY19jbHVzdGVycyhpbm9kZSwgXFx1MDAyNmNsdXN0ZXIsIDEpO1xcbmZzL2ZhdC9pbm9kZS5jLTEwOS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozMy4zNjQ0NzUzNDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzY4NTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGluIGBmcy9mYXQvZmF0ZW50LmNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGZhdF9hbGxvY19jbHVzdGVyc2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgY2x1c3RlciBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBmYXRfYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYGZzL2ZhdC9mYXRlbnQuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRyaWNhY2llcyBvZiBmaW5kaW5nIGZyZWUgY2x1c3RlcnMgb24gdGhlIGRpc2ssIG1hcmtpbmcgdGhlbSBhcyBhbGxvY2F0ZWQgaW4gdGhlIEZBVCwgcG90ZW50aWFsbHkgZXh0ZW5kaW5nIHRoZSBmaWxlIHNpemUsIGFuZCBtYW5hZ2luZyBhbnkgY2hhaW4gb2YgY2x1c3RlcnMuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGVzcGVjaWFsbHkgY29uY2VybmluZyBmcmFnbWVudGF0aW9uIG9yIHRoZSBzcGVlZCBvZiBhbGxvY2F0aW9uIGZvciBsYXJnZSBmaWxlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIFRpbWUgdG8gZ2V0IGNvZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozNy40NzgxNjM5NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZhdC9mYXRlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg2OlxcdGludCBmYXRfYWxsb2NfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjbHVzdGVyLCBpbnQgbnJfY2x1c3RlcilcXG4gNDg3OlxcdHtcXG4gNDg4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gNDg5OlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDQ5MDpcXHRcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IHNiaS1cXHUwMDNlZmF0ZW50X29wcztcXG4gNDkxOlxcdFxcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50LCBwcmV2X2VudDtcXG4gNDkyOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW01BWF9CVUZfUEVSX1BBR0VdO1xcbiA0OTM6XFx0XFx0aW50IGksIGNvdW50LCBlcnIsIG5yX2JocywgaWR4X2NsdXM7XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdFxcdEJVR19PTihucl9jbHVzdGVyIFxcdTAwM2UgKE1BWF9CVUZfUEVSX1BBR0UgLyAyKSk7XFx0LyogZml4ZWQgbGltaXQgKi9cXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0bG9ja19mYXQoc2JpKTtcXG4gNDk4OlxcdFxcdGlmIChzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc2JpLVxcdTAwM2VmcmVlX2NsdXNfdmFsaWQgXFx1MDAyNlxcdTAwMjZcXG4gNDk5OlxcdFxcdCAgICBzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgXFx1MDAzYyBucl9jbHVzdGVyKSB7XFxuIDUwMDpcXHRcXHRcXHR1bmxvY2tfZmF0KHNiaSk7XFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gNTAyOlxcdFxcdH1cXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0ZXJyID0gbnJfYmhzID0gaWR4X2NsdXMgPSAwO1xcbiA1MDU6XFx0XFx0Y291bnQgPSBGQVRfU1RBUlRfRU5UO1xcbiA1MDY6XFx0XFx0ZmF0ZW50X2luaXQoXFx1MDAyNnByZXZfZW50KTtcXG4gNTA3OlxcdFxcdGZhdGVudF9pbml0KFxcdTAwMjZmYXRlbnQpO1xcbiA1MDg6XFx0XFx0ZmF0ZW50X3NldF9lbnRyeShcXHUwMDI2ZmF0ZW50LCBzYmktXFx1MDAzZXByZXZfZnJlZSArIDEpO1xcbiA1MDk6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2Mgc2JpLVxcdTAwM2VtYXhfY2x1c3Rlcikge1xcbiA1MTA6XFx0XFx0XFx0aWYgKGZhdGVudC5lbnRyeSBcXHUwMDNlPSBzYmktXFx1MDAzZW1heF9jbHVzdGVyKVxcbiA1MTE6XFx0XFx0XFx0XFx0ZmF0ZW50LmVudHJ5ID0gRkFUX1NUQVJUX0VOVDtcXG4gNTEyOlxcdFxcdFxcdGZhdGVudF9zZXRfZW50cnkoXFx1MDAyNmZhdGVudCwgZmF0ZW50LmVudHJ5KTtcXG4gNTEzOlxcdFxcdFxcdGVyciA9IGZhdF9lbnRfcmVhZF9ibG9jayhzYiwgXFx1MDAyNmZhdGVudCk7XFxuIDUxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA1MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdFxcdC8qIEZpbmQgdGhlIGZyZWUgZW50cmllcyBpbiBhIGJsb2NrICovXFxuIDUxODpcXHRcXHRcXHRkbyB7XFxuIDUxOTpcXHRcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VlbnRfZ2V0KFxcdTAwMjZmYXRlbnQpID09IEZBVF9FTlRfRlJFRSkge1xcbiA1MjA6XFx0XFx0XFx0XFx0XFx0aW50IGVudHJ5ID0gZmF0ZW50LmVudHJ5O1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRcXHRcXHRcXHQvKiBtYWtlIHRoZSBjbHVzdGVyIGNoYWluICovXFxuIDUyMzpcXHRcXHRcXHRcXHRcXHRvcHMtXFx1MDAzZWVudF9wdXQoXFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YpO1xcbiA1MjQ6XFx0XFx0XFx0XFx0XFx0aWYgKHByZXZfZW50Lm5yX2JocylcXG4gNTI1OlxcdFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlZW50X3B1dChcXHUwMDI2cHJldl9lbnQsIGVudHJ5KTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0XFx0XFx0XFx0ZmF0X2NvbGxlY3RfYmhzKGJocywgXFx1MDAyNm5yX2JocywgXFx1MDAyNmZhdGVudCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdFxcdFxcdFxcdHNiaS1cXHUwMDNlcHJldl9mcmVlID0gZW50cnk7XFxuIDUzMDpcXHRcXHRcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VmcmVlX2NsdXN0ZXJzICE9IC0xKVxcbiA1MzE6XFx0XFx0XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VmcmVlX2NsdXN0ZXJzLS07XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdFxcdFxcdFxcdGNsdXN0ZXJbaWR4X2NsdXNdID0gZW50cnk7XFxuIDUzNDpcXHRcXHRcXHRcXHRcXHRpZHhfY2x1cysrO1xcbiA1MzU6XFx0XFx0XFx0XFx0XFx0aWYgKGlkeF9jbHVzID09IG5yX2NsdXN0ZXIpXFxuIDUzNjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0XFx0XFx0XFx0LypcXG4gNTM5OlxcdFxcdFxcdFxcdFxcdCAqIGZhdF9jb2xsZWN0X2JocygpIGdldHMgcmVmLWNvdW50IG9mIGJocyxcXG4gNTQwOlxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHByZXZfZW50LlxcbiA1NDE6XFx0XFx0XFx0XFx0XFx0ICovXFxuIDU0MjpcXHRcXHRcXHRcXHRcXHRwcmV2X2VudCA9IGZhdGVudDtcXG4gNTQzOlxcdFxcdFxcdFxcdH1cXG4gNTQ0OlxcdFxcdFxcdFxcdGNvdW50Kys7XFxuIDU0NTpcXHRcXHRcXHRcXHRpZiAoY291bnQgPT0gc2JpLVxcdTAwM2VtYXhfY2x1c3RlcilcXG4gNTQ2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NDc6XFx0XFx0XFx0fSB3aGlsZSAoZmF0X2VudF9uZXh0KHNiaSwgXFx1MDAyNmZhdGVudCkpO1xcbiA1NDg6XFx0XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHQvKiBDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgZnJlZSBlbnRyaWVzICovXFxuIDU1MTpcXHRcXHRzYmktXFx1MDAzZWZyZWVfY2x1c3RlcnMgPSAwO1xcbiA1NTI6XFx0XFx0c2JpLVxcdTAwM2VmcmVlX2NsdXNfdmFsaWQgPSAxO1xcbiA1NTM6XFx0XFx0ZXJyID0gLUVOT1NQQztcXG4gNTU0OlxcdFxcbiA1NTU6XFx0b3V0OlxcbiA1NTY6XFx0XFx0dW5sb2NrX2ZhdChzYmkpO1xcbiA1NTc6XFx0XFx0bWFya19mc2luZm9fZGlydHkoc2IpO1xcbiA1NTg6XFx0XFx0ZmF0ZW50X2JyZWxzZShcXHUwMDI2ZmF0ZW50KTtcXG4gNTU5OlxcdFxcdGlmICghZXJyKSB7XFxuIDU2MDpcXHRcXHRcXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpXFxuIDU2MTpcXHRcXHRcXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBucl9iaHMpO1xcbiA1NjI6XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDU2MzpcXHRcXHRcXHRcXHRlcnIgPSBmYXRfbWlycm9yX2JocyhzYiwgYmhzLCBucl9iaHMpO1xcbiA1NjQ6XFx0XFx0fVxcbiA1NjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2JoczsgaSsrKVxcbiA1NjY6XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIDU2NzpcXHRcXG4gNTY4OlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaWR4X2NsdXMpXFxuIDU2OTpcXHRcXHRcXHRmYXRfZnJlZV9jbHVzdGVycyhpbm9kZSwgY2x1c3RlclswXSk7XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdHJldHVybiBlcnI7XFxuIDU3MjpcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3RlcilcXG4gNTc1OlxcdHtcXG4gNTc2OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gNTc3OlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDU3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZmF0ZW50X29wZXJhdGlvbnMgKm9wcyA9IHNiaS1cXHUwMDNlZmF0ZW50X29wcztcXG4gNTc5OlxcdFxcdHN0cnVjdCBmYXRfZW50cnkgZmF0ZW50O1xcbiA1ODA6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbTUFYX0JVRl9QRVJfUEFHRV07XFxuIDU4MTpcXHRcXHRpbnQgaSwgZXJyLCBucl9iaHM7XFxuIDU4MjpcXHRcXHRpbnQgZmlyc3RfY2wgPSBjbHVzdGVyLCBkaXJ0eV9mc2luZm8gPSAwO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRucl9iaHMgPSAwO1xcbiA1ODU6XFx0XFx0ZmF0ZW50X2luaXQoXFx1MDAyNmZhdGVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjM3LjQ3ODI2NzAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUyNjg5MzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRkFUIEZpbGVzeXN0ZW0gRXJyb3IgSGFuZGxpbmcgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbjogaXQgY2hhbmdlcyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBmYXRfbWlycm9yX2Joc2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBmdW5jdGlvbiBoYXMgYSBzaW1pbGFyIHBhdHRlcm4sIGNhbGxpbmcgYGZhdF9taXJyb3JfYmhzYCBidXQgaXQgKmRvZXNuJ3QqIHJldmVydCBjaGFuZ2VzIG9uIGZhaWx1cmUuIEl0IGp1c3QgZnJlZXMgdGhlIGFsbG9jYXRlZCBjbHVzdGVycyBhdCB0aGUgZW5kIGlmIHRoZXJlJ3MgYW4gZXJyb3IuXG5cblRoZSBjaGFuZ2UgdG8gYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBrZXkuIE5vdywgKmlmKiBgZmF0X21pcnJvcl9iaHNgIGZhaWxzLCB0aGUgcGF0Y2ggYXR0ZW1wdHMgdG8gcmV2ZXJ0IHRoZSBjaGFuZ2UgYnkgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgYGVudF9wdXRgIGZ1bmN0aW9uLCBhbmQgc3luY3MgdGhlIGJ1ZmZlcnMuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNoYW5nZSBpbiBob3cgZXJyb3JzIGFyZSBtYW5hZ2VkLCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN5c3RlbSByZW1haW5zIGNvbnNpc3RlbnQgZXZlbiB3aGVuIG1pcnJvcmluZyBmYWlscy5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgbmV3IGJlaGF2aW9yIG1hbmlmZXN0PyBgZmF0X2VudF93cml0ZWAgaXRzZWxmIGlzbid0IGV4cG9ydGVkLCBidXQgaXQncyB1c2VkIGludGVybmFsbHkgYnkgYGZhdF9mcmVlYCBhbmQgYGZhdF9jaGFpbl9hZGRgLiBgZmF0X2ZyZWVgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGZhdF90cnVuY2F0ZV9ibG9ja3NgIGFuZCBgZmF0X2ZhbGxvY2F0ZWAuIGBmYXRfY2hhaW5fYWRkYCBpcyB1c2VkIGJ5IGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgZmF0X2FkZF9lbnRyaWVzYC4gVGhvc2UgYXJlIHRoZW4gY2FsbGVkIGJ5IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucy4uLiBsaWtlIGBmYXRfZ2V0X2Jsb2NrYCwgYHZmYXRfYWRkX2VudHJ5YCwgYW5kIGBtc2Rvc19hZGRfZW50cnlgLlxuXG5TbyB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIGBmYXRfZmFsbG9jYXRlYCwgYGZhdF90cnVuY2F0ZV9ibG9ja3NgICh3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmYXRfc2V0YXR0cmAgYW5kIGBmYXRfZXZpY3RfaW5vZGVgKSwgYW5kIGBmYXRfYWRkX2NsdXN0ZXJgICh2aWEgYGZhdF9nZXRfYmxvY2tgKS4gRmluYWxseSwgYGZhdF9hZGRfZW50cmllc2AgaXMgYWxzbyBhIHRhcmdldCwgYW5kIGl0IGlzIHVzZWQgYnkgYm90aCBgdmZhdF9hZGRfZW50cnlgIGFuZCBgbXNkb3NfYWRkX2VudHJ5YC5cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyBgZmF0X2ZhbGxvY2F0ZWAgYW5kIGBmYXRfc2V0YXR0cmAg4oCTIG1ha2Ugc3VyZSB3ZSBoaXQgdGhvc2UgcXVpY2tseS4gVGhlbiwgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIHVwIHNvbWUgdGVzdCBjYXNlcyB0aGF0IGludGVudGlvbmFsbHkgdHJpZ2dlciBtaXJyb3IgZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTIuMDA1MTYyODY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDUzMjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfZmFsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2ZpbGUuYy0yMi1cXG5mcy9mYXQvZmlsZS5jOjIzOnN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbmZzL2ZhdC9maWxlLmMtMjQtXFx0XFx0XFx0ICBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKTtcXG4tLVxcbmZzL2ZhdC9maWxlLmM9MjA1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjE1LVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuZnMvZmF0L2ZpbGUuYzoyMTY6XFx0LmZhbGxvY2F0ZVxcdD0gZmF0X2ZhbGxvY2F0ZSxcXG5mcy9mYXQvZmlsZS5jLTIxNy1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTIyMD1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjYyLSAqL1xcbmZzL2ZhdC9maWxlLmM6MjYzOnN0YXRpYyBsb25nIGZhdF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbmZzL2ZhdC9maWxlLmMtMjY0LVxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTIuMDc5Njk3NDA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNDg3MzA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIFN5bWJvbCBDb25zaWRlcmF0aW9uKipcblxuUmlnaHQsIGBmYXRfZmFsbG9jYXRlYC4uLiB0aGF0J3MgYSBwcmV0dHkgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgZ290IGNsZWFyIGltcGxpY2F0aW9ucyBpbiB0ZXJtcyBvZiBmaWxlIGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBmb3IgbWFuaXB1bGF0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IGZpZWxkIC0gdGhlIHVzZXIgY2FuIHByb3ZpZGUgdGhlaXIgZmllbGQgaGVyZV0uIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlc3lzdGVtIGhhbmRsZXMgcHJlLWFsbG9jYXRpb24sIHNwYXJzZSBmaWxlcywgYW5kIGdlbmVyYWxseSBtYW5hZ2luZyBkaXNrIHNwYWNlLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGZhdF9jcmVhdGVgLlxuXG5Ob3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGBmYXRfc2V0YXR0cmA/IFdoaWxlIGBmYXRfZmFsbG9jYXRlYCBkZWFscyB3aXRoIGFsbG9jYXRpb24gaXRzZWxmLCBgZmF0X3NldGF0dHJgIGlzIHBvdGVudGlhbGx5IGp1c3QgYXMgaW50ZXJlc3Rpbmcgb3IgbWF5YmUgbW9yZSBzby4gSXQgaGFuZGxlcyBhdHRyaWJ1dGUgc2V0dGluZyBvbiBmaWxlcywgYW5kIHRoYXQgY291bGQgb3BlbiB1cCBhIG5ldyBhdmVudWUgb2YgYXR0YWNrIGluIHNvbWUgc2NlbmFyaW9zLiBJdCBjb3VsZCBiZSB0aWVkIHRvIHBlcm1pc3Npb24gZXNjYWxhdGlvbiBvciBtYWxpY2lvdXMgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBhbmQgZGF0YSBoaWRpbmcuIEkgbmVlZCB0byBrZWVwIGJvdGggb2YgdGhlc2UgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MDEuMjI4NDMwMjgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkxNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXRfc2V0YXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD00MDY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvZmF0L2ZhdC5oOjQwNzpleHRlcm4gaW50IGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZmF0L2ZhdC5oLTQwOC1cXHRcXHQgICAgICAgc3RydWN0IGlhdHRyICphdHRyKTtcXG4tLVxcbmZzL2ZhdC9maWxlLmM9Mzc9c3RhdGljIGludCBmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMTAwLVxcdC8qIFRoaXMgTVVTVCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpcnJldmVyc2libGUuLi4gKi9cXG5mcy9mYXQvZmlsZS5jOjEwMTpcXHRlcnIgPSBmYXRfc2V0YXR0cihmaWxlX21udF9pZG1hcChmaWxlKSwgZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeSwgXFx1MDAyNmlhKTtcXG5mcy9mYXQvZmlsZS5jLTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz00OTc9c3RhdGljIGludCBmYXRfYWxsb3dfc2V0X3RpbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTUxNy1cXG5mcy9mYXQvZmlsZS5jOjUxODppbnQgZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9mYXQvZmlsZS5jLTUxOS1cXHRcXHRzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTYwNy19XFxuZnMvZmF0L2ZpbGUuYzo2MDg6RVhQT1JUX1NZTUJPTF9HUEwoZmF0X3NldGF0dHIpO1xcbmZzL2ZhdC9maWxlLmMtNjA5LVxcbmZzL2ZhdC9maWxlLmM9NjEwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZhdF9maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvZmF0L2ZpbGUuYzo2MTE6XFx0LnNldGF0dHJcXHQ9IGZhdF9zZXRhdHRyLFxcbmZzL2ZhdC9maWxlLmMtNjEyLVxcdC5nZXRhdHRyXFx0PSBmYXRfZ2V0YXR0cixcXG4tLVxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbXNkb3NfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYy02NDYtXFx0LnJlbmFtZVxcdFxcdD0gbXNkb3NfcmVuYW1lLFxcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jOjY0NzpcXHQuc2V0YXR0clxcdD0gZmF0X3NldGF0dHIsXFxuZnMvZmF0L25hbWVpX21zZG9zLmMtNjQ4LVxcdC5nZXRhdHRyXFx0PSBmYXRfZ2V0YXR0cixcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM9MTE3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmZhdF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmMtMTE4NS1cXHQucmVuYW1lXFx0XFx0PSB2ZmF0X3JlbmFtZTIsXFxuZnMvZmF0L25hbWVpX3ZmYXQuYzoxMTg2OlxcdC5zZXRhdHRyXFx0PSBmYXRfc2V0YXR0cixcXG5mcy9mYXQvbmFtZWlfdmZhdC5jLTExODctXFx0LmdldGF0dHJcXHQ9IGZhdF9nZXRhdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS4yNzEzNDkwODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTU5ODQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgRkFUIEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBmYXRfc2V0YXR0cmAgaXMgY2xlYXJseSBleHBvc2VkIGFzIGFuIGlub2RlIG9wZXJhdGlvbiDigJMgdGhhdCBtYWtlcyBzZW5zZSBmb3IgYXR0cmlidXRlIG1vZGlmaWNhdGlvbi4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3b25kZXJpbmcgYWJvdXQgYW5vdGhlciBrZXkgZnVuY3Rpb246IGBmYXRfYWRkX2NsdXN0ZXJgLiBXaGVyZSBkb2VzIHRoYXQgZml0IGluIHRoZSBpbm9kZSBvcGVyYXRpb25zIHNjaGVtZT8gSXMgaXQgYWxzbyBkaXJlY3RseSB1c2VkIGluIHRoYXQgY2FwYWNpdHksIG9yIGlzIGl0IGhhbmRsZWQgZGlmZmVyZW50bHkgd2l0aGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGludGVybmFscz8gSSBuZWVkIHRvIGNsYXJpZnkgaXRzIHJvbGUgaW4gdGhlIGNvbnRleHQgb2YgaW5vZGUgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNC40MTA5NTAwNzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdF9hZGRfY2x1c3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZhdC9mYXQuaD00Mzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZhdF9kaXJfaGFzaChpbnQgbG9nc3RhcnQpXFxuLS1cXG5mcy9mYXQvZmF0LmgtNDQyLX1cXG5mcy9mYXQvZmF0Lmg6NDQzOmV4dGVybiBpbnQgZmF0X2FkZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ZhdC9mYXQuaC00NDQtXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjk0LVxcdFxcdHdoaWxlIChucl9jbHVzdGVyLS0gXFx1MDAzZSAwKSB7XFxuZnMvZmF0L2ZpbGUuYzoyOTU6XFx0XFx0XFx0ZXJyID0gZmF0X2FkZF9jbHVzdGVyKGlub2RlKTtcXG5mcy9mYXQvZmlsZS5jLTI5Ni1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L2lub2RlLmM9Njc9c3RhdGljIHN0cnVjdCBmYXRfZmxvcHB5X2RlZmF1bHRzIHtcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTEwMy1cXG5mcy9mYXQvaW5vZGUuYzoxMDQ6aW50IGZhdF9hZGRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2ZhdC9pbm9kZS5jLTEwNS17XFxuLS1cXG5mcy9mYXQvaW5vZGUuYz0xMTk9c3RhdGljIGlubGluZSBpbnQgX19mYXRfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTE1NC1cXHRcXHQvKiBUT0RPOiBtdWx0aXBsZSBjbHVzdGVyIGFsbG9jYXRpb24gd291bGQgYmUgZGVzaXJhYmxlLiAqL1xcbmZzL2ZhdC9pbm9kZS5jOjE1NTpcXHRcXHRlcnIgPSBmYXRfYWRkX2NsdXN0ZXIoaW5vZGUpO1xcbmZzL2ZhdC9pbm9kZS5jLTE1Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNC40NTQ4NzU5NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2Mzk1NDg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBGQVQgQmxvY2sgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIGNvZGUsIGZvY3VzaW5nIG9uIGJsb2NrIGFsbG9jYXRpb24uIEkgc2VlIHRoYXQgYGZhdF9hZGRfY2x1c3RlcmAgaXMgYSBrZXkgZnVuY3Rpb247IGl0J3MgdXRpbGl6ZWQgaW4gYm90aCBgZmF0X2ZhbGxvY2F0ZWAgKGZvciBwcmUtYWxsb2NhdGluZyBzcGFjZSwgd2hpY2ggSSB1bmRlcnN0YW5kIHdlbGwpIGFuZCwgaW50ZXJlc3RpbmdseSwgYF9fZmF0X2dldF9ibG9ja2AuIE5vdywgYF9fZmF0X2dldF9ibG9ja2AgaXMgdGhlIGNvcmUgb2YgcmV0cmlldmluZyBibG9jayBpbmZvcm1hdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGJ5IHRoZSBtb3JlIGZhbWlsaWFyIGBmYXRfZ2V0X2Jsb2NrYCBhbmQgYGZhdF9nZXRfYmxvY2tfYm1hcGAgY2FsbHMuXG5cbmBmYXRfZ2V0X2Jsb2NrYCwgaW4gdHVybiwgaXMgcHJldHR5IHBlcnZhc2l2ZS4gSXQncyBjYWxsZWQgZXh0ZW5zaXZlbHksIHBvcHVsYXRpbmcgdGhlIGRhdGEgYmxvY2tzIGR1cmluZyByZWFkcyBhbmQgd3JpdGVzLCBmcm9tIGxvdy1sZXZlbCBmb2xpbyBvcGVyYXRpb25zIGxpa2UgYGZhdF9yZWFkX2ZvbGlvYCwgdGhyb3VnaCB3cml0ZSBvcGVyYXRpb25zIGxpa2UgYGZhdF93cml0ZV9iZWdpbmAgYW5kIGBmYXRfd3JpdGVwYWdlc2AuXG5cbk5vdywgdGhhdCBicmluZ3MgdG8gbWluZCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBkb2VzIGBmYXRfYWRkX2VudHJpZXNgIGZpdCBpbnRvIHRoaXMgc2NoZW1lPyBUaGlzIGZ1bmN0aW9uIGFkZHMgZGlyZWN0b3J5IGVudHJpZXMgdG8gdGhlIGZpbGUsIGFuZCB0aGF0J3Mgb2Z0ZW4gYSBjcnVjaWFsIHBvaW50IHdoZW4gYWxsb2NhdGluZyBibG9ja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgX19mYXRfZ2V0X2Jsb2NrYC4gSXMgaXQgdXNlZCAqaW4qIHRoZXNlIGZ1bmN0aW9ucywgb3IgaXMgaXQgYSBzZXBhcmF0ZSBwcm9jZXNzPyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gZXhwbG9yZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjE3LjA5NDQyNzY3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MTEzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF0X2FkZF9lbnRyaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZhdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L2Rpci5jPTEyMzg9c3RhdGljIGludCBmYXRfYWRkX25ld19lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCB2b2lkICpzbG90cywgaW50IG5yX3Nsb3RzLFxcbi0tXFxuZnMvZmF0L2Rpci5jLTEzMjAtXFxuZnMvZmF0L2Rpci5jOjEzMjE6aW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG5mcy9mYXQvZGlyLmMtMTMyMi1cXHRcXHQgICAgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbi0tXFxuZnMvZmF0L2Rpci5jLTE0NjYtfVxcbmZzL2ZhdC9kaXIuYzoxNDY3OkVYUE9SVF9TWU1CT0xfR1BMKGZhdF9hZGRfZW50cmllcyk7XFxuLS1cXG5mcy9mYXQvZmF0Lmg9MzQyPWV4dGVybiBpbnQgZmF0X2FsbG9jX25ld19kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuZnMvZmF0L2ZhdC5oOjM0MzpleHRlcm4gaW50IGZhdF9hZGRfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdm9pZCAqc2xvdHMsIGludCBucl9zbG90cyxcXG5mcy9mYXQvZmF0LmgtMzQ0LVxcdFxcdFxcdCAgIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbyk7XFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYz0yMzA9c3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9mYXQvbmFtZWlfbXNkb3MuYy0yNTItXFxuZnMvZmF0L25hbWVpX21zZG9zLmM6MjUzOlxcdGVyciA9IGZhdF9hZGRfZW50cmllcyhkaXIsIFxcdTAwMjZkZSwgMSwgc2luZm8pO1xcbmZzL2ZhdC9uYW1laV9tc2Rvcy5jLTI1NC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYz02NTQ9c3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYy02NzQtXFxuZnMvZmF0L25hbWVpX3ZmYXQuYzo2NzU6XFx0ZXJyID0gZmF0X2FkZF9lbnRyaWVzKGRpciwgc2xvdHMsIG5yX3Nsb3RzLCBzaW5mbyk7XFxuZnMvZmF0L25hbWVpX3ZmYXQuYy02NzYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MTcuMTM4ODQxNDY4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODUzNTQxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gS2V5IEZBVCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIGNvZGUuIEkgdGhpbmsgYGZhdF9hZGRfZW50cmllc2AgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBmb2N1cyBzeW1ib2wuIEl0J3MgdXNlZCBpbiB0aGUgYG1zZG9zX2FkZF9lbnRyeWAgYW5kIGB2ZmF0X2FkZF9lbnRyeWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgdGhlIHdvcmtob3JzZXMgd2hlbiBuZXcgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQsIHJpZ2h0PyBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqY3JpdGljYWwqIHBvaW50IGluIHRoZSBwcm9jZXNzLlxuXG5HaXZlbiB0aGF0LCBoZXJlIGFyZSBzb21lIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFzIHdvcnRoeSBvZiBjbG9zZXIgaW5zcGVjdGlvbiwgYW5kIG1heSBzZXJ2ZSBhcyBlcXVhbGx5IGNvbXBlbGxpbmcgc3ltYm9sczpcblxuKiAgIGBmYXRfZmFsbG9jYXRlYFxuKiAgIGBmYXRfc2V0YXR0cmBcbiogICBgZmF0X2FkZF9lbnRyaWVzYCAod2UgYWxyZWFkeSBrbm93IHRoaXMgb25lLCBidXQgSSdtIGluY2x1ZGluZyBpdCBmb3IgY29tcGxldGVuZXNzKVxuKiAgIGBmYXRfYWRkX2NsdXN0ZXJgXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYGZhdF9hZGRfY2x1c3RlcmAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggaXRzIHZpc2liaWxpdHkgdG8gZGV0ZXJtaW5lIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgdG8gb3RoZXIgZWxlbWVudHMgb2YgdGhlIGNvZGUuIFRoYXQgd2lsbCBpbmZsdWVuY2Ugd2hlcmUgaXQgc2l0cywgaW4gdGVybXMgb2YgYnJvYWRlciBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjoyMi44MjQxOTc4MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzM5MjYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmYXRfYWRkX2NsdXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MjIuODY5NTQyNTcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjA2MDI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZBVCBGaWxlc3lzdGVtIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gbGlzdCwgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9yaWdpbmFsIGNvZGUgbW9kaWZpY2F0aW9uIHdhcyBpbiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL2ZhdC9pbm9kZS5jYCwgYnV0IHRoYXQgaXNuJ3QgZXhwb3J0ZWQuIExldCdzIHNlZS4uLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgYGZhdF9mYWxsb2NhdGVgLiBJdCdzIGRlZmluZWQgYXMgc3RhdGljIGluIGBmcy9mYXQvZmlsZS5jYCwgd2hpY2ggbWFrZXMgaXQgYSBoZWxwZXIuIEhvd2V2ZXIsIGBmYXRfZmlsZV9vcGVyYXRpb25zYCB1c2VzIGl0IHdoaWNoIG1lYW5zIGl0IG5lZWRzIHRvIGV4aXN0IGFzIGEgZGlzY3JldGUgc3ltYm9sIGFuZCBub3QgYmUgaW5saW5lZC4gU28gbWF5YmUgdGhhdCdzIGEgZ29vZCBvbmUgdG8gaW5jbHVkZT9cblxuSG9sZCBvbiwgSSBzZWUgYGZhdF9zZXRhdHRyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYXJlIGV4cG9ydGVkLCB3aGljaCBtYWtlcyB0aGVtIEFQSSBlbnRyeXBvaW50cy4gIGBmYXRfYWRkX2NsdXN0ZXJgIGFuZCBgZmF0X2FsbG9jX2NsdXN0ZXJzYCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLlxuXG5MZXQgbWUgcmV2aXNpdCBgZmF0X2VudF93cml0ZWAuIEl0J3MgYWxzbyBub24tc3RhdGljLiBTaW5jZSB0aGF0IHdhcyBtb2RpZmllZCwgYW5kIGl0IGlzIGEgbm9uLXN0YXRpYyBoZWxwZXIuXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgZmF0X2VudF93cml0ZWAgaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzIGEgaGVscGVyLiBgZmF0X2ZhbGxvY2F0ZWAgaXMgc3RhdGljLCBidXQgaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYGZhdF9maWxlX29wZXJhdGlvbnNgLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIGFuZCBpdCBpcyB1c2VkIGFzIGFuIEFQSSBlbnRyeXBvaW50LiBBbmQgYGZhdF9zZXRhdHRyYCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBgZmF0X2ZyZWVfY2x1c3RlcnNgIGlzIGV4cG9ydGVkIHRvby5cblxuSSB0aGluayB0aGUgYmVzdCBsaXN0LCBjb25zaWRlcmluZyBhbGwgdGhlIG51YW5jZXMsIHNob3VsZCBiZTpcblxuKiAgIGBmYXRfZW50X3dyaXRlYFxuKiAgIGBmYXRfZmFsbG9jYXRlYCAoY29uc2lkZXJpbmcgdGhlIG5vbi1pbmxpbmluZyBkdWUgdG8gZnVuY3Rpb24gcG9pbnRlciB1c2FnZSBpbiBgZmF0X2ZpbGVfb3BlcmF0aW9uc2ApXG4qICAgYGZhdF9zZXRhdHRyYFxuKiAgIGBmYXRfYWRkX2VudHJpZXNgXG4qICAgYGZhdF9hZGRfY2x1c3RlcmBcblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MzIuNzMwMTQ3Mzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZhdC9maWxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA1OlxcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gMjA2OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIDIwNzpcXHRcXHQucmVhZF9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiAyMDg6XFx0XFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbiAyMDk6XFx0XFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gMjEwOlxcdFxcdC5yZWxlYXNlXFx0PSBmYXRfZmlsZV9yZWxlYXNlLFxcbiAyMTE6XFx0XFx0LnVubG9ja2VkX2lvY3RsXFx0PSBmYXRfZ2VuZXJpY19pb2N0bCxcXG4gMjEyOlxcdFxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuIDIxMzpcXHRcXHQuZnN5bmNcXHRcXHQ9IGZhdF9maWxlX2ZzeW5jLFxcbiAyMTQ6XFx0XFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiAyMTU6XFx0XFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gMjE2OlxcdFxcdC5mYWxsb2NhdGVcXHQ9IGZhdF9mYWxsb2NhdGUsXFxuIDIxNzpcXHRcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIDIxODpcXHR9O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRzdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4gMjIxOlxcdHtcXG4gMjIyOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4gMjIzOlxcdFxcdGxvZmZfdCBzdGFydCA9IGlub2RlLVxcdTAwM2VpX3NpemUsIGNvdW50ID0gc2l6ZSAtIGlub2RlLVxcdTAwM2VpX3NpemU7XFxuIDIyNDpcXHRcXHRpbnQgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjozMi43MzAyMjcwNDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAxODMxNDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGQVQgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIGBmYXRfZmFsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQncyAqbm90KiBpbmxpbmVkLiBXZSBjYW4ndCByZWx5IG9uIGlubGluaW5nIGhlcmUuIExldCdzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuXG5cblJpZ2h0LCBgRkFUX0ZTYCwgYE1TRE9TX0ZTYCwgYW5kIGBWRkFUX0ZTYC4gSSdsbCBpbmNsdWRlIGFsbCB0aHJlZS4gTWFrZXMgc2Vuc2U7IHRoZXNlIGFyZSB0aGUgY29yZSBGQVQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9ucy5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgbG9naWMgYmVoaW5kIHRoaXMuIEFoLCB5ZXMsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGZhdF9lbnRfd3JpdGVgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgcmV2ZXJ0aW5nIHRoZSBGQVQgZW50cnkgdG8gaXRzIG9sZCB2YWx1ZSBpZiB0aGVyZSdzIGEgZmFpbHVyZSB3cml0aW5nIHRvIHRoZSBtaXJyb3IgRkFULiBUaGlzIGlzIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2U6IGl0J3MgYW4gZXJyb3IgaGFuZGxpbmcgaW1wcm92ZW1lbnQgdGhhdCBpbXBhY3RzIGhvdyB0aGUgZmlsZXN5c3RlbSBiZWhhdmVzIGR1cmluZyBhbGxvY2F0aW9uLCB0cnVuY2F0aW9uLCBhbmQgYWRkaW5nIGRpcmVjdG9yeSBlbnRyaWVzLiBNYWtlcyBzZW5zZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBObywgSSB0aGluayB0aG9zZSB0aHJlZSBhcmUgdGhlIG1haW4gb25lcyB0aGF0IHdpbGwgYWZmZWN0IHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIHB1dCB0aGlzIHRvZ2V0aGVyLlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2UgdGhpcyBjaGFuZ2UgaXMgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGVyZWZvcmUsIGFuIGFyZWEgZm9yIGZ1enppbmcuXG5gRm9jdXNTeW1ib2xzYCAtIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBtb2RpZmllZCBvciBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjaGFuZ2UuXG5JIGtub3cgYGZhdF9lbnRfd3JpdGVgIGlzIHRoZSBjb3JlIGNoYW5nZS5cbi0gYGZhdF9lbnRfd3JpdGVgXG4tIGBmYXRfZmFsbG9jYXRlYCAtIGlzIHJlbGV2YW50IGdpdmVuIGl0J3MgYSBmdW5jdGlvbiBwb2ludGVyLlxuLSBgZmF0X3NldGF0dHJgIC0gY291bGQgYmUgcmVsZXZhbnQgYXMgd2VsbC5cbi0gYGZhdF9hZGRfZW50cmllc2Bcbi0gYGZhdF9jaGFpbl9hZGRgIC0gSSBuZWVkIHRvIGluY2x1ZGUgdGhpcywgYXMgaXQgYW5kIGBmYXRfZnJlZWAgYXJlIGFsc28gbW9kaWZpZWQgdG8gcGFzcyB0aGUgYG9sZGAgcGFyYW1ldGVyLiBgZmF0X2ZyZWVgIGlzIHN0YXRpYywgc28gSSB0aGluayBgZmF0X2NoYWluX2FkZGAgaXMgdGhlIG9uZSB0byBpbmNsdWRlLlxuVGhlbiBJIHNob3VsZCBoYXZlIHRoZSBgRW5hYmxlQ29uZmlnc2A6XG4tIGBGQVRfRlNgXG4tIGBNU0RPU19GU2Bcbi0gYFZGQVRfRlNgXG5cbk9rYXksIGFuZCBub3csIHRvIHRyaXBsZS1jaGVjaywgSSB3aWxsIGFsc28gaW5zcGVjdCBgZmF0X2NoYWluX2FkZGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhdCBwbGF5LiBJdCdzIGluIGBmcy9mYXQvbWlzYy5jYC5cblxuTG9va3MgZ29vZC4gVGhpcyBjb3ZlcnMgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0MS43NDg1NDQ2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mYXQvbWlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNzpcXHRpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcilcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gMTEwOlxcdFxcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XFxuIDExMTpcXHRcXHRpbnQgcmV0LCBuZXdfZmNsdXMsIGxhc3Q7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdC8qXFxuIDExNDpcXHRcXHQgKiBXZSBtdXN0IGxvY2F0ZSB0aGUgbGFzdCBjbHVzdGVyIG9mIHRoZSBmaWxlIHRvIGFkZCB0aGlzIG5ld1xcbiAxMTU6XFx0XFx0ICogb25lIChuZXdfZGNsdXMpIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmsgbGlzdCAodGhlIEZBVCkuXFxuIDExNjpcXHRcXHQgKi9cXG4gMTE3OlxcdFxcdGxhc3QgPSBuZXdfZmNsdXMgPSAwO1xcbiAxMTg6XFx0XFx0aWYgKE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3N0YXJ0KSB7XFxuIDExOTpcXHRcXHRcXHRpbnQgZmNsdXMsIGRjbHVzO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRcXHRyZXQgPSBmYXRfZ2V0X2NsdXN0ZXIoaW5vZGUsIEZBVF9FTlRfRU9GLCBcXHUwMDI2ZmNsdXMsIFxcdTAwMjZkY2x1cyk7XFxuIDEyMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTIzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyNDpcXHRcXHRcXHRuZXdfZmNsdXMgPSBmY2x1cyArIDE7XFxuIDEyNTpcXHRcXHRcXHRsYXN0ID0gZGNsdXM7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGFkZCBuZXcgb25lIHRvIHRoZSBsYXN0IG9mIHRoZSBjbHVzdGVyIGNoYWluICovXFxuIDEyOTpcXHRcXHRpZiAobGFzdCkge1xcbiAxMzA6XFx0XFx0XFx0c3RydWN0IGZhdF9lbnRyeSBmYXRlbnQ7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdFxcdGZhdGVudF9pbml0KFxcdTAwMjZmYXRlbnQpO1xcbiAxMzM6XFx0XFx0XFx0cmV0ID0gZmF0X2VudF9yZWFkKGlub2RlLCBcXHUwMDI2ZmF0ZW50LCBsYXN0KTtcXG4gMTM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0XFx0cmV0ID0gZmF0X2VudF93cml0ZShpbm9kZSwgXFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXFxuIDEzODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgd2FpdCk7XFxuIDEzOTpcXHRcXHRcXHRcXHRmYXRlbnRfYnJlbHNlKFxcdTAwMjZmYXRlbnQpO1xcbiAxNDA6XFx0XFx0XFx0fVxcbiAxNDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDM6XFx0XFx0XFx0LypcXG4gMTQ0OlxcdFxcdFxcdCAqIEZJWE1FOkFsdGhvdWdoIHdlIGNhbiBhZGQgdGhpcyBjYWNoZSwgZmF0X2NhY2hlX2FkZCgpIGlzXFxuIDE0NTpcXHRcXHRcXHQgKiBhc3N1bWluZyB0byBiZSBjYWxsZWQgYWZ0ZXIgbGluZWFyIHNlYXJjaCB3aXRoIGZhdF9jYWNoZV9pZC5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0MS43NDg2MjM0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTUwOTUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmYXRfY2hhaW5fYWRkYCwgc3BlY2lmaWNhbGx5LCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBhbHRlcmVkLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIGlzIGltcG9ydGFudC5cblxuQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZzogdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIEZBVCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBtaXJyb3IgRkFUIHdyaXRlIGZhaWxzLiBUaGUgbWFpbiBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGZhdF9lbnRfd3JpdGVgLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgcmV2ZXJ0aW5nIHRoZSBGQVQgZW50cnkgdG8gaXRzIHByaW9yIHN0YXRlIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB3cml0aW5nIHRoZSBtaXJyb3JlZCBGQVQuIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIG9sZCBGQVQgZW50cnkgdmFsdWUgdG8gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoZSBmdW5jdGlvbnMgbGlzdGVkOiBgZmF0X2VudF93cml0ZWAsIGBmYXRfY2hhaW5fYWRkYCwgYGZhdF9mYWxsb2NhdGVgLCBgZmF0X3NldGF0dHJgLCBhbmQgYGZhdF9hZGRfZW50cmllc2AgYW5kIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLCBzdWNoIGFzIGBGQVRfRlNgLCBgTVNET1NfRlNgLCBhbmQgYFZGQVRfRlNgLCBhcmUgYWxsIGVzc2VudGlhbCBmb3Igc3VwcG9ydGluZyB0aGUgY2hhbmdlcy5cblxuSW4gZXNzZW5jZSwgdGhpcyBtZWFucyB0aGF0IGZpbGUgYWxsb2NhdGlvbiwgZmlsZSB0cnVuY2F0aW9uLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGNhbiBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBhbmQgY291bGQgcmV2ZWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IG5vdCBiZSBvYnZpb3VzIG90aGVyd2lzZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZCBhcyBpdCBpcyByZWFjaGFibGUuXG5cbkknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDQsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6NDkuMjk5NTc2NDU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MTc4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZBVF9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYXRfZW50X3dyaXRlXCIsXG4gICAgXCJmYXRfY2hhaW5fYWRkXCIsXG4gICAgXCJmYXRfZmFsbG9jYXRlXCIsXG4gICAgXCJmYXRfc2V0YXR0clwiLFxuICAgIFwiZmF0X2FkZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZBVF9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYXRfZW50X3dyaXRlXCIsXG4gICAgXCJmYXRfY2hhaW5fYWRkXCIsXG4gICAgXCJmYXRfZmFsbG9jYXRlXCIsXG4gICAgXCJmYXRfc2V0YXR0clwiLFxuICAgIFwiZmF0X2FkZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZhdF9lbnRfd3JpdGVgIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscyAoYGZhdF9taXJyb3JfYmhzYCkuIEl0IGFsc28gdXBkYXRlcyBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgdG8gcGFzcyB0aGUgb2xkIEZBVCBlbnRyeSB2YWx1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGZvciBGQVQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBmaWxlIGFsbG9jYXRpb24sIHRydW5jYXRpb24sIG9yIGRpcmVjdG9yeSBlbnRyeSBhZGRpdGlvbi4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Mjo0OS4zODE1MDEzNjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk2MjQ2NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6NDkuMzgxOTYzNjczWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2Mzk1NzgwNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gdGhlIEZBVCBmaWxlc3lzdGVtJ3MgYGZhdF9lbnRfd3JpdGVgIGZ1bmN0aW9uIHRvIHByb3Blcmx5IHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyBvbGQgdmFsdWUgaWYgd3JpdGluZyB0byB0aGUgbWlycm9yIEZBVCBmYWlscy4gSXQgcGFzc2VzIHRoZSBvbGQgY2x1c3RlciB2YWx1ZSAoYW4gaW50ZWdlcikgYXMgYSBuZXcgcGFyYW1ldGVyIHRvIGBmYXRfZW50X3dyaXRlYC4gVGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBhbmQgZXJyb3ItaGFuZGxpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2JiMmJmNGY5MjllMTlhZGQ5YTA5YTFlMThiMjc1YzBkMzdlOTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDYxMzM4NDEzZDlmM2UuLmZiZDIwN2M1NTg1OWUgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmF0LmhcbisrKyBiL2ZzL2ZhdC9mYXQuaFxuQEAgLTM5Miw3ICszOTIsNyBAQCBleHRlcm4gdm9pZCBmYXRfZW50X2FjY2Vzc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGV4dGVybiBpbnQgZmF0X2VudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbiBcdFx0XHRpbnQgZW50cnkpO1xuIGV4dGVybiBpbnQgZmF0X2VudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmF0X2VudHJ5ICpmYXRlbnQsXG4tXHRcdFx0IGludCBuZXcsIGludCB3YWl0KTtcbitcdFx0XHQgaW50IG5ldywgaW50IG9sZCwgaW50IHdhaXQpO1xuIGV4dGVybiBpbnQgZmF0X2FsbG9jX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqY2x1c3RlcixcbiBcdFx0XHQgICAgICBpbnQgbnJfY2x1c3Rlcik7XG4gZXh0ZXJuIGludCBmYXRfZnJlZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2x1c3Rlcik7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdGVudC5jIGIvZnMvZmF0L2ZhdGVudC5jXG5pbmRleCBmMDgwMWQ5OWRkNjJhLi5kZjIzZmM4NWYzMTMwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdGVudC5jXG4rKysgYi9mcy9mYXQvZmF0ZW50LmNcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIGludCBmYXRfbWlycm9yX2JocyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsXG4gfVxuIFxuIGludCBmYXRfZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmYXRfZW50cnkgKmZhdGVudCxcbi1cdFx0ICBpbnQgbmV3LCBpbnQgd2FpdClcbitcdFx0ICBpbnQgbmV3LCBpbnQgb2xkLCBpbnQgd2FpdClcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdGNvbnN0IHN0cnVjdCBmYXRlbnRfb3BlcmF0aW9ucyAqb3BzID0gTVNET1NfU0Ioc2IpLVx1MDAzZWZhdGVudF9vcHM7XG5AQCAtNDIyLDEwICs0MjIsMjUgQEAgaW50IGZhdF9lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZhdF9lbnRyeSAqZmF0ZW50LFxuIFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBuZXcpO1xuIFx0aWYgKHdhaXQpIHtcbiBcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGZhdGVudC1cdTAwM2ViaHMsIGZhdGVudC1cdTAwM2Vucl9iaHMpO1xuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBiaHMgYXJlIG5vdCB1cHRvZGF0ZSBhZnRlciBJL08gZXJyb3IuIFNvIHdlXG4rXHRcdFx0ICogY2FuJ3Qgc2ltcGx5IHJlLWRpcnR5IHRvIHJldmVydC4gQW5kIGl0XG4rXHRcdFx0ICogd291bGQgbm90IGhhdmUgdmFsdWUgdG8gd3JpdGUgYWdhaW4gb24gSS9PXG4rXHRcdFx0ICogZXJyb3IuXG4rXHRcdFx0ICovXG4gXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcbitcdGVyciA9IGZhdF9taXJyb3JfYmhzKHNiLCBmYXRlbnQtXHUwMDNlYmhzLCBmYXRlbnQtXHUwMDNlbnJfYmhzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0LyogVHJ5IHRvIHJldmVydCBpZiBnb3QgdGhlIGVycm9yIG9uIG1pcnJvciBGQVQgKi9cbitcdFx0b3BzLVx1MDAzZWVudF9wdXQoZmF0ZW50LCBvbGQpO1xuK1x0XHRpZiAod2FpdClcbitcdFx0XHRmYXRfc3luY19iaHMoZmF0ZW50LVx1MDAzZWJocywgZmF0ZW50LVx1MDAzZW5yX2Jocyk7XG4rXHR9XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmYXRfZW50X25leHQoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMWM4MzVjYTVmMjFhNS4uNmM0NzVjNTMzMzRjNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbisrKyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0zNjMsNyArMzYzLDggQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbiBcdFx0XHRcdCAgICAgX19mdW5jX18sIE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfcG9zKTtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YsIHdhaXQpO1xuK1x0XHRcdGVyciA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgRkFUX0VOVF9FT0YsIHJldCxcbitcdFx0XHRcdFx0ICAgIHdhaXQpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggZTc5NzYyY2YxOTc1NC4uYzQ0Mjk2NzU2ZWFlNiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbisrKyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xMzMsMTEgKzEzMyw5IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuIFx0XHRyZXQgPSBmYXRfZW50X3JlYWQoaW5vZGUsIFx1MDAyNmZhdGVudCwgbGFzdCk7XG4gXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4gXHRcdFx0aW50IHdhaXQgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKTtcbi1cdFx0XHRpbnQgb2xkID0gcmV0O1xuIFxuLVx0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCB3YWl0KTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0ZmF0X2VudF93cml0ZShpbm9kZSwgXHUwMDI2ZmF0ZW50LCBvbGQsIHdhaXQpO1xuK1x0XHRcdHJldCA9IGZhdF9lbnRfd3JpdGUoaW5vZGUsIFx1MDAyNmZhdGVudCwgbmV3X2RjbHVzLCByZXQsXG4rXHRcdFx0XHRcdCAgICB3YWl0KTtcbiBcdFx0XHRmYXRlbnRfYnJlbHNlKFx1MDAyNmZhdGVudCk7XG4gXHRcdH1cbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjQ5LjM4MTk2NDU1M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjM5NTc1OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGQVQgRmlsZXN5c3RlbSBFcnJvciBIYW5kbGluZyBFbmhhbmNlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSdtIHByZXR0eSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjaGFuZ2VzLiBUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgRkFUIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIHdyaXRpbmcgdG8gdGhlIEZBVCBlbnRyaWVzLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbiBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYG9sZGAgcGFyYW1ldGVyIHRvIHRoZSBgZmF0X2VudF93cml0ZWAgZnVuY3Rpb24gaW4gYGZzL2ZhdC9mYXRlbnQuY2AuIFRoaXMgaXNuJ3QgYSByYWRpY2FsIGNoYW5nZTsgaXQgYWxsb3dzIHVzIHRvIHJldmVydCB0aGUgRkFUIGVudHJ5IHRvIGl0cyAqcHJldmlvdXMqIHZhbHVlIGlmIGEgbWlycm9yaW5nIG9wZXJhdGlvbiAoYGZhdF9taXJyb3JfYmhzYCkgZmFpbHMuIFRoZSBwcmV2aW91cyBsb2dpYyB3YXMgbGVhdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gdGhlIGNhbGxlci4gVGhpcyBmZWVscyBjbGVhbmVyIGFuZCBtb3JlIHJvYnVzdCB0byBtZS4gVGhlIGNhbGxlcnMsIG5hbWVseSBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAgaW4gYGZzL2ZhdC9maWxlLmNgIGFuZCBgZnMvZmF0L21pc2MuY2AgcmVzcGVjdGl2ZWx5LCBhcmUgbm93IHBhc3NpbmcgdGhlIG9sZCB2YWx1ZSB0byB0aGUgbW9kaWZpZWQgYGZhdF9lbnRfd3JpdGVgLlxuXG5Mb29raW5nIGF0IHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgd2l0aGluIGBmYXRfZW50X3dyaXRlYCwgdGhlIGxvZ2ljIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gIElmIGBmYXRfbWlycm9yX2Joc2AgcmV0dXJucyBhbiBlcnJvciwgaXQgbm93IGF0dGVtcHRzIHRvIHJldmVydCB0aGUgd3JpdGUgYnkgdXNpbmcgdGhlIGBvbGRgIHZhbHVlLCBlbnN1cmluZyBjb25zaXN0ZW5jeS4gVGhlIGFkZGl0aW9uYWwgY2hlY2sgb24gdGhlIGBiaHNgIHRvIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgaXMgY3J1Y2lhbCB0byB0aGUgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0LCBmb3IgbWUsIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGRpZCBhIGNhcmVmdWwgZG91YmxlLWNoZWNrIG9uIHRoaXMuIEkgbG9va2VkIGF0IHdoZXJlIGBvbGRgIGNvbWVzIGZyb20uIEkgY29uZmlybWVkIHRoYXQgdGhlIGBvbGRgIHBhcmFtZXRlciBpcyBpbmRlZWQgcG9wdWxhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgZmF0X2VudF9yZWFkYCwgaW4gYm90aCBgZmF0X2ZyZWVgIGFuZCBgZmF0X2NoYWluX2FkZGAuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVnZXIsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHdoZXJlIEtNU0FOIG1pZ2h0IGJlIG5lZWRlZC4gU28gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU1LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQzOjE1Ljc3NzcyNjE2N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHRoZSBGQVQgZmlsZXN5c3RlbSdzIGBmYXRfZW50X3dyaXRlYCBmdW5jdGlvbiB0byBwcm9wZXJseSByZXZlcnQgdGhlIEZBVCBlbnRyeSB0byBpdHMgb2xkIHZhbHVlIGlmIHdyaXRpbmcgdG8gdGhlIG1pcnJvciBGQVQgZmFpbHMuIEl0IHBhc3NlcyB0aGUgb2xkIGNsdXN0ZXIgdmFsdWUgKGFuIGludGVnZXIpIGFzIGEgbmV3IHBhcmFtZXRlciB0byBgZmF0X2VudF93cml0ZWAuIFRoaXMgaXMgcHVyZWx5IGEgbG9naWMgYW5kIGVycm9yLWhhbmRsaW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[1] Phase: Succeeded StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 13:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 13:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2] Phase: Succeeded StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 13:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 13:43:26 +0000 UTC FinishedAt: 2026-08-25 13:43:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv46xd/series-workflowv46xd-convert-artifact-2831001713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 13:43:37 +0000 UTC FinishedAt: 2026-08-25 13:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 13:43:37 +0000 UTC FinishedAt: 2026-08-25 13:59:46 +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:*fe522857-c6de-403f-8fdc-0b02c6240b5c,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-workflowv46xd/series-workflowv46xd-convert-artifact-2831001713/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": "cd4d437a-bb12-43d3-b54e-6cfe4571ab64", "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-workflowv46xd/series-workflowv46xd-build-action-3576193695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 13:43:37 +0000 UTC FinishedAt: 2026-08-25 13:59:36 +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:*fe522857-c6de-403f-8fdc-0b02c6240b5c,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-workflowv46xd/series-workflowv46xd-convert-artifact-2831001713/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": "cd4d437a-bb12-43d3-b54e-6cfe4571ab64", "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-workflowv46xd/series-workflowv46xd-build-action-3576193695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 13:59:46 +0000 UTC FinishedAt: 2026-08-25 13:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 13:59:46 +0000 UTC FinishedAt: 2026-08-25 13:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 13:59:46 +0000 UTC FinishedAt: 2026-08-25 13:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 13:59:46 +0000 UTC FinishedAt: 2026-08-25 13:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv46xd/series-workflowv46xd-convert-artifact-3220507076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 13:59:56 +0000 UTC FinishedAt: 2026-08-25 14:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 13:59:56 +0000 UTC FinishedAt: 2026-08-25 14:01:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd4d437a-bb12-43d3-b54e-6cfe4571ab64,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-workflowv46xd/series-workflowv46xd-build-action-3576193695/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-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 14:01:56 +0000 UTC FinishedAt: 2026-08-25 14:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:01:56 +0000 UTC FinishedAt: 2026-08-25 14:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 14:01:56 +0000 UTC FinishedAt: 2026-08-25 14:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 14:01:56 +0000 UTC FinishedAt: 2026-08-25 14:20:26 +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:*fe522857-c6de-403f-8fdc-0b02c6240b5c,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-workflowv46xd/series-workflowv46xd-convert-artifact-3220507076/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": "25e344cb-9869-4e7c-ab89-b10a459b0b99", "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-workflowv46xd/series-workflowv46xd-build-action-795554256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 14:01:56 +0000 UTC FinishedAt: 2026-08-25 14:20:16 +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:*fe522857-c6de-403f-8fdc-0b02c6240b5c,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-workflowv46xd/series-workflowv46xd-convert-artifact-3220507076/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": "25e344cb-9869-4e7c-ab89-b10a459b0b99", "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-workflowv46xd/series-workflowv46xd-build-action-795554256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 14:20:26 +0000 UTC FinishedAt: 2026-08-25 14:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 14:20:26 +0000 UTC FinishedAt: 2026-08-25 14:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 14:20:26 +0000 UTC FinishedAt: 2026-08-25 14:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 14:20:26 +0000 UTC FinishedAt: 2026-08-25 14:22:20 +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:*25e344cb-9869-4e7c-ab89-b10a459b0b99,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-workflowv46xd/series-workflowv46xd-build-action-795554256/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-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +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":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"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:*cd4d437a-bb12-43d3-b54e-6cfe4571ab64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25e344cb-9869-4e7c-ab89-b10a459b0b99,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-workflowv46xd/series-workflowv46xd-build-action-3576193695/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-workflowv46xd/series-workflowv46xd-build-action-795554256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 14:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 14:22:42 +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":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"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-workflowv46xd/series-workflowv46xd-convert-artifact-1576253389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 14:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 14:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:22:30 +0000 UTC FinishedAt: 2026-08-25 14:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 14:22:50 +0000 UTC FinishedAt: 2026-08-25 17:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv46xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fat_ent_write","fat_chain_add","fat_fallocate","fat_setattr","fat_add_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["FAT_FS","MSDOS_FS","VFAT_FS"],"series_id":"bb64f7a6-c070-4fd1-8727-a9e3e4d0975b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 14:22:50 +0000 UTC FinishedAt: 2026-08-25 17:23:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd4d437a-bb12-43d3-b54e-6cfe4571ab64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25e344cb-9869-4e7c-ab89-b10a459b0b99,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-workflowv46xd/series-workflowv46xd-build-action-3576193695/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-workflowv46xd/series-workflowv46xd-build-action-795554256/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-workflowv46xd/series-workflowv46xd-convert-artifact-1576253389/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,}