Name: series-workflowq9x4f Phase: Failed StartedAt: 2026-08-16 02:09:38 +0000 UTC FinishedAt: 2026-08-16 02:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9x4f[0] Phase: Succeeded StartedAt: 2026-08-16 02:09:38 +0000 UTC FinishedAt: 2026-08-16 02:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9x4f[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 02:09:38 +0000 UTC FinishedAt: 2026-08-16 02:15:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE0Yzg4NzI5YjQ3NjM0N2NiYmMxZjE1ZTRjODI5NDViNDE3NjU4ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWI5ZDc2Nzg5NWM5MS4uNjk2N2Q0OGJiYTQ5ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC0xMTY5LDE5ICYjNDM7MTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXG4gXHRcdFx0aWQgPSB0LVx1MDAzZXR5cGU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRnb3RvIHJlc29sdmVkO1xuIFx0XHR9XG4mIzQzO1x0XHR0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctXHUwMDNlYnRmLCBpZCk7XG4gXHRcdGlmICghaWQpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy1cdTAwM2VidGYsIGlkKTtcbiBcdH1cbiBcdC8qIFdlIG1heSBub3QgYmUgYWJsZSB0byByZXByZXNlbnQgdGhpcyB0eXBlOyBiYWlsIHRvIGJlIHNhZmUgKi9cbiBcdGlmIChpID09IEJURl9TSE9XX01BWF9JVEVSKVxuIFx0XHRyZXR1cm4gXCYjMzQ7XCYjMzQ7O1xuIFxuJiM0MztyZXNvbHZlZDpcbiBcdGlmICghbmFtZSlcbi1cdFx0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzaG93LVx1MDAzZWJ0ZiwgdC1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHRuYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/IFwmIzM0O3ZvaWRcJiMzNDsgOiBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuIFxuIFx0c3dpdGNoIChCVEZfSU5GT19LSU5EKHQtXHUwMDNlaW5mbykpIHtcbiBcdGNhc2UgQlRGX0tJTkRfU1RSVUNUOlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCAwZjEzYzEzZjQxMzM3Li45NWM1OWY2Y2Y3MGFlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTI4Nyw3ICYjNDM7Mjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuICAqIGNvbWJpbmVkIGp1bXAgdGFibGUgaW4ganQtXHUwMDNlaXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbiYjNDM7XHRcdFx0XHRcdCAgaW50IGluc25faWR4LCBpbnQgc3VicHJvZ19zdGFydCwgaW50IHN1YnByb2dfZW5kKVxuIHtcbiBcdHN0cnVjdCBicGZfaWFycmF5ICpqdCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuQEAgLTMyNyw3ICYjNDM7MzI3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICghanQpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O25vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0ICV1XFxuXCYjMzQ7LCBzdWJwcm9nX3N0YXJ0KTtcbiBcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4tXHRcdFx0ZW52LCBzdWJwcm9nX3N0YXJ0LCBcJiMzNDttaXNzaW5nIGp1bXAgdGFibGVcJiMzNDssXG4mIzQzO1x0XHRcdGVudiwgaW5zbl9pZHgsIFwmIzM0O21pc3NpbmcganVtcCB0YWJsZVwmIzM0OyxcbiBcdFx0XHRcJiMzNDtNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLlwmIzM0OyxcbiBcdFx0XHRcJiMzNDtObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXCYjMzQ7LFxuIFx0XHRcdHN1YnByb2dfc3RhcnQpO1xuQEAgLTM0OSw3ICYjNDM7MzQ5LDcgQEAgY3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuIFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2ctXHUwMDNlc3RhcnQ7XG4gXHRzdWJwcm9nX2VuZCA9IChzdWJwcm9nICYjNDM7IDEpLVx1MDAzZXN0YXJ0O1xuLVx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4mIzQzO1x0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCB0LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4gXHRpZiAoSVNfRVJSKGp0KSlcbiBcdFx0cmV0dXJuIGp0O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xuaW5kZXggMzNiN2Q5ZThlMmMzYS4uNDRkMGI3YzVmMDVmNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG5AQCAtODMzLDExICYjNDM7ODMzLDkgQEAgc3RhdGljIHZvaWQgYnBmX2RpYWdfc291cmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgY29uc3QgY2hcbiBcdGxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LVx1MDAzZXByb2csIGluc25faWR4KTtcbiBcdGlmIChidGYgXHUwMDI2XHUwMDI2IGxpbmZvKVxuIFx0XHRicGZfZ2V0X2xpbmZvX3NvdXJjZShidGYsIGxpbmZvLCBcdTAwMjZzcmMpO1xuLVx0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlIHx8ICFzcmMubGluZSB8fCAhKnNyYy5saW5lKSB7XG4mIzQzO1x0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcJiMzNDsgIGluc24gJXVcXG5cJiMzNDssIGluc25faWR4KTtcbi1cdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIDAsIDAsIGxhYmVsLCBtc2cpO1xuLVx0XHRkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuJiM0MztcdFx0Z290byBvdXRfYW5ub3RhdGlvbjtcbiBcdH1cbiBcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBpbnNuX2lkeCk7XG5AQCAtODQ3LDYgJiM0Mzs4NDUsOCBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaFxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCYjMzQ7ICAlcyBAICVzOiVkOiVkXFxuXCYjMzQ7LCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xuIFx0ZWxzZVxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCYjMzQ7ICAlczolZDolZFxcblwmIzM0Oywgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTtcbiYjNDM7XHRpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpXG4mIzQzO1x0XHRnb3RvIG91dF9hbm5vdGF0aW9uO1xuIFxuIFx0c3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7XG4gXHRlbmRfbGluZSA9IHNyYy5saW5lX251bSAmIzQzOyBCUEZfRElBR19DT05URVhUO1xuQEAgLTg4OSw3ICYjNDM7ODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIHdpZHRoLCBpbmRlbnQsIGxhYmVsLCBtc2cpO1xuIFx0fVxuIFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbiYjNDM7XHRnb3RvIG91dF9yZXN0b3JlO1xuIFxuJiM0MztvdXRfYW5ub3RhdGlvbjpcbiYjNDM7XHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XG4mIzQzO1x0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbiBvdXRfcmVzdG9yZTpcbiBcdGRpYWdfZm10X3Jlc3RvcmUoZW52LCBtYXJrKTtcbiB9XG5AQCAtMTA4Myw3ICYjNDM7MTA4Nyw5IEBAIHZvaWQgYnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsXG4gXHRjb25zdCBjaGFyICpjb25zdHJhaW50LCAqY29udGV4dDtcbiBcdHUzMiBkZXB0aDtcbiBcbi1cdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4mIzQzO1x0aWYgKCFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSlcbiYjNDM7XHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9OT05FO1xuJiM0MztcdGVsc2UgaWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcbiBcdFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX1JDVTtcbiBcdGVsc2UgaWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXG4gXHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9QUkVFTVBUO1xuQEAgLTE1MzEsOCAmIzQzOzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0fSBlbHNlIGlmIChkaWFnX21vZF9pbnNuX29yaWdpbihlbnYsIGluc25faWR4LCBcdTAwMjZ0YXJnZXQsIFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XG4gXHRcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xuIFx0fVxuLVx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgfHwgcmVhc29uID09IEJQRl9ESUFHX01PRF9TUElMTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW1lbWNtcChcdTAwMjZldmVudC5tb2Qub2xkLCBcdTAwMjZldmVudC5tb2QubmV3LCBzaXplb2YoZXZlbnQubW9kLm9sZCkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFldmVudC5tb2Qub3JpZ2luX3ZhbGlkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGRpYWdfbW9kX2tlZXBzX2xpbmVhZ2UoZW52LCBcdTAwMjZldmVudCkpXG5AQCAtMjE2NCw3ICYjNDM7MjE2OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpkaWFnX21vZF90YXJnZXRfZGVzYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Y2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRzpcbiBcdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O1IldVwmIzM0OywgdGFyZ2V0LVx1MDAzZXJlZ25vKTtcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19BUkc6XG4tXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzdGFjayBhcmclZFwmIzM0OywgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtXHUwMDNlc3RhY2tfYXJnKSk7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7KihSMTEtJXUpXCYjMzQ7LCAodGFyZ2V0LVx1MDAzZXN0YWNrX2FyZyAmIzQzOyAxKSAqIEJQRl9SRUdfU0laRSk7XG4gXHRjYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVDpcbiBcdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O3N0YWNrIHNsb3QgZnAlZFwmIzM0OywgLSh0YXJnZXQtXHUwMDNlc3BpICYjNDM7IDEpICogQlBGX1JFR19TSVpFKTtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAwYmI3ZWU5NWM4YmQyLi43NzAzM2NmMzczNGE1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yOTEyLDYgJiM0MzsyOTEyLDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiBcdGludCBpLCByZXQsIGluc25fY250ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuJiM0MztcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwgKnN1Z2dlc3Rpb247XG4gXG4gXHQvKiBBZGQgZW50cnkgZnVuY3Rpb24uICovXG4gXHRyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApO1xuQEAgLTI5MjMsMTEgJiM0MzsyOTI0LDE4IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICghZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4mIzQzO1x0XHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbiYjNDM7XHRcdFx0XHRvcGVyYXRpb24gPSBcJiMzNDtCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXCYjMzQ7O1xuJiM0MztcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXCYjMzQ7O1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdG9wZXJhdGlvbiA9IFwmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbFwmIzM0OztcbiYjNDM7XHRcdFx0XHRzdWdnZXN0aW9uID0gXCYjMzQ7TG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXCYjMzQ7O1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2xvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCBmb3IgQ0FQX0JQRiBhbmQgQ0FQX1NZU19BRE1JTlxcblwmIzM0Oyk7XG4gXHRcdFx0YnBmX2RpYWdfcG9saWN5KFxuLVx0XHRcdFx0ZW52LCBpLCBcJiMzNDtCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcJiMzNDssXG4mIzQzO1x0XHRcdFx0ZW52LCBpLCBvcGVyYXRpb24sXG4gXHRcdFx0XHRcJiMzNDtsb2FkaW5nIG9yIGNhbGxpbmcgb3RoZXIgQlBGIGZ1bmN0aW9ucyByZXF1aXJlcyBDQVBfQlBGIG9yIENBUF9TWVNfQURNSU5cJiMzNDssXG4tXHRcdFx0XHRcJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHN1Z2dlc3Rpb24pO1xuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbkBAIC0yOTk1LDE1ICYjNDM7MzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4mIzQzO3N0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuLVx0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbiYjNDM7XHRpbnQgaSwgc3VicHJvZ19lbmQsIGN1cl9zdWJwcm9nID0gMDtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcbi1cdC8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi9cbi1cdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbiBcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuQEAgLTMwMTcsNiAmIzQzOzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChCUEZfTU9ERShjb2RlKSA9PSBCUEZfQUJTIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTkQpKVxuIFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlO1xuJiM0MztcdFx0aWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7XG4mIzQzO1x0XHRcdGN1cl9zdWJwcm9nJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKGN1cl9zdWJwcm9nIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQpXG4mIzQzO1x0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuJiM0MztcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0Lyogbm93IGNoZWNrIHRoYXQgYWxsIGp1bXBzIGFyZSB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZyAqL1xuJiM0MztcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbiYjNDM7XHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5zbl9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuJiM0MztcbiBcdFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFx1MDAyNlx1MDAyNiBCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUDMyKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfQ0FMTClcbkBAIC0zMDM4LDkgJiM0MzszMDY1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0fVxuIG5leHQ6XG4gXHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuLVx0XHRcdC8qIHRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlclxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUbyBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIsXG4gXHRcdFx0ICogdGhlIGxhc3QgaW5zbiBvZiB0aGUgc3VicHJvZyBzaG91bGQgYmUgZWl0aGVyIGV4aXRcbi1cdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxuJiM0MztcdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9FWElUKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgY29kZSAhPSAoQlBGX0pNUDMyIHwgQlBGX0pBKSBcdTAwMjZcdTAwMjZcbkBAIC0zMTI2LDggJiM0MzszMTU0LDkgQEAgc3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4gXHRcdFx0XHRcdFx0ZW52LCBpZHgsIFwmIzM0O3JlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcJiMzNDssXG4gXHRcdFx0XHRcdFx0XCYjMzQ7UmV3cml0ZSB0aGUgcmVjdXJzaW9uIGFzIGFuIGV4cGxpY2l0IGJvdW5kZWQgbG9vcCwgb3Igc3BsaXQgdGhlIGxvZ2ljIHNvIHN1YnByb2dyYW0gY2FsbHMgZG8gbm90IGZvcm0gYSBjeWNsZS5cJiMzNDssXG4tXHRcdFx0XHRcdFx0XCYjMzQ7VGhpcyBicGYyYnBmIGNhbGwgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gXCYjMzQ7XG4tXHRcdFx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0XHRcJiMzNDtUaGUgY2FsbCBmcm9tICVzKCkgdG8gJXMoKSB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdGJwZl9zdWJwcm9nX25hbWUoZW52LCBjdXIpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgY2FsbGVlKSk7XG4gXHRcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdFx0fVxuQEAgLTM4MTcsMTkgJiM0MzszODQ2LDQ2IEBAIHN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxuLVx0XHRcdFx0ICAgICAgIGludCBzaXplKVxuJiM0MztzdGF0aWMgdm9pZCBicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZiwgaW50IGksIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ZW51bSBicGZfc3RhY2tfc2xvdF90eXBlIHR5cGUpXG4ge1xuLVx0Y29uc3QgY2hhciAqcmVhc29uO1xuJiM0MztcdGNvbnN0IGNoYXIgKnByb2JsZW0sICpyZWFzb24sICpzdWdnZXN0aW9uLCAqa2luZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHR5cGUgPT0gU1RBQ0tfSU5WQUxJRCkge1xuJiM0MztcdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxuJiM0MztcdFx0XHRlbnYsIFwmIzM0O1RoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O1Byb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLlwmIzM0OyxcbiYjNDM7XHRcdFx0c2l6ZSwgb2ZmLCBpKTtcbiYjNDM7XHRcdGJwZl9kaWFnX21lbW9yeShcbiYjNDM7XHRcdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwmIzM0O3VuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZFwmIzM0OywgcmVhc29uLFxuJiM0MztcdFx0XHRcJiMzNDtJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O29yIGxvYWQgd2l0aCBDQVBfUEVSRk1PTiBpZiB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzIGFyZSBpbnRlbmRlZC5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiBcJiMzNDtcbi1cdFx0XCYjMzQ7UHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuXCYjMzQ7LFxuLVx0XHRzaXplLCBvZmYsIGkpO1xuLVx0YnBmX2RpYWdfbWVtb3J5KFxuLVx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7dW5pbml0aWFsaXplZCBzdGFjayByZWFkXCYjMzQ7LCByZWFzb24sXG4tXHRcdFwmIzM0O0luaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCBcJiMzNDtcbi1cdFx0XCYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlwmIzM0Oyk7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBTVEFDS19EWU5QVFI6XG4mIzQzO1x0XHRraW5kID0gXCYjMzQ7ZHlucHRyXCYjMzQ7O1xuJiM0MztcdFx0c3VnZ2VzdGlvbiA9IFwmIzM0O1VzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MgdG8gYWNjZXNzIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYnkgdGhlIGR5bnB0ciBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGR5bnB0ciBzdGF0ZSBkaXJlY3RseS5cJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNUQUNLX0lURVI6XG4mIzQzO1x0XHRraW5kID0gXCYjMzQ7aXRlcmF0b3JcJiMzNDs7XG4mIzQzO1x0XHRzdWdnZXN0aW9uID0gXCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jcyB0byBhZHZhbmNlIG9yIGRlc3Ryb3kgdGhlIGl0ZXJhdG9yIGluc3RlYWQgb2YgcmVhZGluZyBpdHMgc3RhdGUgZGlyZWN0bHkuXCYjMzQ7O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbiYjNDM7XHRcdGtpbmQgPSBcJiMzNDtJUlEgZmxhZ1wmIzM0OztcbiYjNDM7XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuYyBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlwmIzM0OztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcm9ibGVtID0gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7ZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcJiMzNDssIGtpbmQpO1xuJiM0MztcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdGVudiwgXCYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGJlbG9uZ3MgdG8gdmVyaWZpZXItbWFuYWdlZCAlcyBzdGF0ZS4gXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtUaGlzIHN0YXRlIGhhcyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IHJlYWQgZGlyZWN0bHkuXCYjMzQ7LFxuJiM0MztcdFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcbiYjNDM7XHRicGZfZGlhZ19tZW1vcnkoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHByb2JsZW0sIHJlYXNvbiwgc3VnZ2VzdGlvbik7XG4gfVxuIFxuIC8qIFJlYWQgdGhlIHN0YWNrIGF0ICYjMzk7b2ZmJiMzOTsgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcbkBAIC0zOTIxLDcgJiM0MzszOTc3LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayBvZmYgJWQmIzQzOyVkIHNpemUgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KGVudiwgb2ZmLCBpLCBzaXplKTtcbiYjNDM7XHRcdFx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF9pbnZhbGlkKGVudiwgb2ZmLCBpLCBzaXplLCB0eXBlKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0XHRcdH1cbkBAIC0zOTgwLDcgJiM0Mzs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7aW52YWxpZCByZWFkIGZyb20gc3RhY2sgb2ZmICVkJiM0MzslZCBzaXplICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuJiM0MztcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG5AQCAtNDA3OSwxMyAmIzQzOzQxMzUsMTMgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHRudW1fc3Rybih0bl9idWYsIHNpemVvZih0bl9idWYpLCByZWctXHUwMDNldmFyX29mZik7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uOyB2YXJfb2ZmPSVzIG9mZj0lZCBzaXplPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdHRuX2J1Ziwgb2ZmLCBzaXplKTtcbi1cdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KGVudixcbi1cdFx0XHRcdCAgICAgIFwmIzM0O1RoZSBoZWxwZXIgd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7SGVscGVyIHN0YWNrIG1lbW9yeSBhcmd1bWVudHMgcmVxdWlyZSBhIGNvbnN0YW50IHN0YWNrIG9mZnNldCBhbmQgYSBwcmVjaXNlIGluaXRpYWxpemVkIHJhbmdlLlwmIzM0OyxcbiYjNDM7XHRcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdFx0ZW52LCBcJiMzNDtUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7QXRvbWljIHN0YWNrIG9wZXJhdGlvbnMgcmVxdWlyZSBhIGNvbnN0YW50IHN0YWNrIG9mZnNldCBhbmQgYSBwcmVjaXNlIGluaXRpYWxpemVkIHJhbmdlLlwmIzM0OyxcbiBcdFx0XHR0bl9idWYsIG9mZiwgc2l6ZSk7XG4gXHRcdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7dmFyaWFibGUgc3RhY2sgYWNjZXNzXCYjMzQ7LCByZWFzb24sXG4tXHRcdFx0XCYjMzQ7VXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciBoZWxwZXIgbWVtb3J5IGFyZ3VtZW50cywgb3IgY29weSB0aGUgbmVlZGVkIGJ5dGVzIGludG8gYSBmaXhlZCBzdGFjayBzbG90IGZpcnN0LlwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVudiwgZW52LVx1MDAzZWluc25faWR4LCBcJiMzNDt2YXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wmIzM0OywgcmVhc29uLFxuJiM0MztcdFx0XHRcJiMzNDtVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXHQvKiBWYXJpYWJsZSBvZmZzZXQgaXMgcHJvaGliaXRlZCBmb3IgdW5wcml2aWxlZ2VkIG1vZGUgZm9yIHNpbXBsaWNpdHlcbkBAIC05ODgyLDcgJiM0Mzs5OTM4LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0c3ViX25hbWUsIG5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihlbnYpKTtcbiBcdFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcJiMzNDssIHN1Yl9uYW1lKTtcbiBcdFx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgKmluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XHRcJiMzNDtNb3ZlIHRoZSBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRcJiMzNDtDYWxsIHRoZSBmdW5jdGlvbiBmcm9tIGEgc2xlZXBhYmxlIHByb2dyYW0gb3V0c2lkZSBhbnkgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTA3MDEsNiAmIzQzOzEwNzU3LDggQEAgc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiYjNDM7XHRpZiAoIWluX3NsZWVwYWJsZShlbnYpKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O25vbi1zbGVlcGFibGUgcHJvZ1wmIzM0OztcbiBcdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4gXHRcdHJldHVybiBcJiMzNDtyY3VfcmVhZF9sb2NrIHJlZ2lvblwmIzM0OztcbiBcdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9wcmVlbXB0X2xvY2tzKVxuQEAgLTEwNzA5LDcgJiM0MzsxMDc2Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVuXG4gXHRcdHJldHVybiBcJiMzNDtJUlEtZGlzYWJsZWQgcmVnaW9uXCYjMzQ7O1xuIFx0aWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX2xvY2tzKVxuIFx0XHRyZXR1cm4gXCYjMzQ7bG9jayByZWdpb25cJiMzNDs7XG4tXHRyZXR1cm4gXCYjMzQ7bm9uLXNsZWVwYWJsZSBwcm9nXCYjMzQ7O1xuJiM0MztcdHJldHVybiBcJiMzNDtub24tc2xlZXBhYmxlIGNvbnRleHRcJiMzNDs7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbkBAIC0xMDgwNSw3ICYjNDM7MTA4NjMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzbGVlcGFibGUgaGVscGVyICVzIyVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZnVuY19pZF9uYW1lKGZ1bmNfaWQpLCBmdW5jX2lkKTtcbiBcdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCYjMzQ7TW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XCYjMzQ7Q2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMDk5NCwxMyAmIzQzOzExMDUyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gXHQvKiByZXNldCBjYWxsZXIgc2F2ZWQgcmVncyAqL1xuIFx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xuJiM0MztcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xuIFx0XHRjaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEyNjIzLDEyICYjNDM7MTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xuIFx0XHRcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XG4gXG4tXHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbiYjNDM7XHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7QWRkIGEgTlVMTCBjaGVjayBhbmQgY2FsbCB0aGUga2Z1bmMgb25seSBvbiB0aGUgbm9uLU5VTEwgcGF0aC5cJiMzNDssXG4tXHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBwb2ludGVyIG1heSBiZSBOVUxMLCBidXQgdGhpcyBrZnVuYyByZXF1aXJlcyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICAgICBleHBlY3RlZF90eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuQEAgLTEzMDY1LDggJiM0MzsxMzEyMywxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcbiBcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRpZiAocmV0ID09IC1FSU5WQUwpXG4mIzQzO1x0XHRcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtQYXNzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9yIGEgdmFsdWUgdGhlIHZlcmlmaWVyIGNhbiBwcm92ZSBpcyBjb25zdGFudCBhdCB0aGlzIGNhbGwuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBrZnVuYyByZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQsIGJ1dCAlcyBpcyB2YXJpYWJsZSBvbiB0aGlzIHBhdGhcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4gXHRcdHtcbkBAIC0xMzEzMCwxNSAmIzQzOzEzMTk0LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4tXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuLVxuLVx0XHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O1Bhc3MgYSBwb2ludGVyIHJldHVybmVkIGJ5IHRoZSBtYXRjaGluZyBCUEYgb2JqZWN0IGFsbG9jYXRpb24gb3IgbG9va3VwIG9wZXJhdGlvbiBmb3IgdGhpcyBrZnVuYy5cJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7dGhlIGtmdW5jIGV4cGVjdHMgYSBwb2ludGVyIHRvIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0IHR5cGUgJXMsIGJ1dCB0aGlzIGFyZ3VtZW50IGlzIG5vdCBzdWNoIGFuIG9iamVjdCBwb2ludGVyXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdCAgICAgIGV4cGVjdGVkX3R5cGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtQYXNzIGFuIG93bmluZyBvciBub24tb3duaW5nIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCBvYmplY3QgY29udGFpbmluZyBhIGJwZl9yZWZjb3VudCBmaWVsZC5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBrZnVuYyBleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgJXMgaXMgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG5AQCAtMTM3MjYsMTEgJiM0MzsxMzc4OCwyMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0c2xlZXBhYmxlID0gYnBmX2lzX2tmdW5jX3NsZWVwYWJsZShcdTAwMjZtZXRhKTtcbi1cdGlmIChzbGVlcGFibGUgXHUwMDI2XHUwMDI2ICFpbl9zbGVlcGFibGUoZW52KSkge1xuLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xcblwmIzM0OywgZnVuY19uYW1lKTtcbiYjNDM7XHRpZiAoc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5fc2xlZXBhYmxlKGVudikpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4mIzQzO1x0XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtNb3ZlIHRoZSBrZnVuYyBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXCYjMzQ7O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3Byb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZnVuY19uYW1lKTtcbiYjNDM7XHRcdFx0c3VnZ2VzdGlvbiA9IFwmIzM0O01hcmsgdGhlIHByb2dyYW0gc2xlZXBhYmxlIGlmIHRoZSBwcm9ncmFtIHR5cGUgYWxsb3dzIGl0LCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwmIzM0OztcbiYjNDM7XHRcdH1cbiBcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7c2xlZXBhYmxlIGtmdW5jICVzXCYjMzQ7LCBmdW5jX25hbWUpO1xuLVx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcJiMzNDtNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cJiMzNDspO1xuJiM0MztcdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sIHN1Z2dlc3Rpb24pO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbkBAIC0xMzgzMCwxNSAmIzQzOzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuIFx0fVxuIFxuLVx0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXG5cJiMzNDssXG4tXHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4tXHRcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O3NsZWVwYWJsZSBrZnVuYyAlc1wmIzM0OywgZnVuY19uYW1lKTtcbi1cdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCYjMzQ7TW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0fVxuLVxuIFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgXHUwMDI2XHUwMDI2IChyY3VfbG9jayB8fCByY3VfdW5sb2NrKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Q2FsbGluZyBicGZfcmN1X3JlYWRfe2xvY2ssdW5sb2NrfSBpbiB1bm5lY2Vzc2FyeSByYnRyZWUgY2FsbGJhY2tcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC0yMTA4OCwxNyAmIzQzOzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4mIzQzO1x0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi9cbiBcdHJldCA9IGFkZF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBjaGVja19zdWJwcm9ncyhlbnYpO1xuJiM0MztcdGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKGVudik7XG4mIzQzO1xuJiM0MztcdC8qIFZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuICovXG4mIzQzO1x0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xuLVx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuJiM0MztcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCBiZWFhNzNkYzM1ZjVkLi45NDE4ZGZlNGQ3YjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtNTYwLDYgJiM0Mzs1NjAsOSBAQCBpbnQgZ2xvYmFsKHZvaWQgKmN0eClcbiAvKiBBIGRpcmVjdCByZWFkIHNob3VsZCBmYWlsICovXG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBkeW5wdHIgc3RhY2sgc3RhdGVcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O3ZlcmlmaWVyLW1hbmFnZWQgZHlucHRyIHN0YXRlXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtVc2UgZHlucHRyIGhlbHBlcnMgb3Iga2Z1bmNzXCYjMzQ7KVxuIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG5AQCAtMTU5MCw2ICYjNDM7MTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xuIC8qIENhbiYjMzk7dCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSBhIGtub3duIGNvbnN0YW50XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnRcJiMzNDspXG4gaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuQEAgLTE2MDksNiAmIzQzOzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiAvKiBDYW4mIzM5O3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqL1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O211c3QgYmUgYSBrbm93biBjb25zdGFudFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7cmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50XCYjMzQ7KVxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbmluZGV4IGE0YTAwNzg2NmEzMzIuLjhkMmI1MGQxMWZhNGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuY1xuQEAgLTE0LDYgJiM0MzsxNCwxOSBAQCBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0clxuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoXCYjMzQ7LmRhdGEuQVwmIzM0Oyk7XG4gc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tCIF9faGlkZGVuIFNFQyhcJiMzNDsuZGF0YS5CXCYjMzQ7KTtcbiBcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBJUlEgZmxhZyBzdGFjayBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7UGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmNcJiMzNDspXG4mIzQzO2ludCBpcnFfZmxhZ19kaXJlY3RfcmVhZChzdHJ1Y3QgX19za19idWZmICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRicGZfbG9jYWxfaXJxX3NhdmUoXHUwMDI2ZmxhZ3MpO1xuJiM0MztcdHJldHVybiBmbGFncztcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBkb2VzbiYjMzk7dCBwb2ludCB0byBhbiBpcnEgZmxhZyBvbiBzdGFja1wmIzM0OylcbiBpbnQgaXJxX3NhdmVfYmFkX2FyZyhzdHJ1Y3QgX19za19idWZmICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5pbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbkBAIC0zMzIsNiAmIzQzOzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jc1wmIzM0OylcbiBpbnQgX19uYWtlZCByZWFkX2Zyb21faXRlcl9zbG90X2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODNjOTExNDk0YTM0YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtNiw2ICYjNDM7Niw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4gXG4gZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKSBfX3dlYWsgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O0JQRl9FWElUIGluc3RydWN0aW9uIGluIG1haW4gcHJvZyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYnBmX3ByZWVtcHRfZGlzYWJsZS1lZCByZWdpb25cJiMzNDspXG5AQCAtMTI3LDYgJiM0MzsxMjksMTkgQEAgaW50IHByZWVtcHRfc2xlZXBhYmxlX2tmdW5jKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkvXCYjMzQ7IFNZU19QUkVGSVggXCYjMzQ7c3lzX2dldHBnaWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2Nhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbVwmIzM0OylcbiYjNDM7aW50IG5vbl9zbGVlcGFibGVfa2Z1bmNfaW5fcmN1KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiBkYXRhO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIoXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCAwKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKVxuIHtcbiBcdHByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwOC4uZWFhZWQwODU5Zjk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcJiMzNDspXG4gbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm4sICptO1xuQEAgLTgwLDYgJiM0Mzs4MSwxNCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7ZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0IFIxIGlzIGEgY29udGV4dCBwb2ludGVyXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xuQEAgLTU1LDYgJiM0Mzs1NSw0NiBAQCBfX25ha2VkIHZvaWQgb3V0X29mX3JhbmdlX2p1bXAyKHZvaWQpXG4gXCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtqdW1wIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJ5XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7anVtcCBvdXQgb2YgcmFuZ2UgZnJvbSBpbnNuIDFcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2p1bXBfYWNyb3NzX3N1YnByb2dfYm91bmRhcnkgQCB2ZXJpZmllcl9jZmcuY1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGp1bXBfYWNyb3NzX3N1YnByb2dfYm91bmRhcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCBjcm9zc19zdWJwcm9nX3RhcmdldDtcdFx0XHRcXFxuJiM0MztcdGdvdG8gJiM0MzsxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkIGludCBmYWxsdGhyb3VnaF9zdWJwcm9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtzdWJwcm9ncmFtIGZhbGx0aHJvdWdoXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7ZmFsbHRocm91Z2hfc3VicHJvZyBAIHZlcmlmaWVyX2NmZy5jXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgc3VicHJvZ19mYWxsdGhyb3VnaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGZhbGx0aHJvdWdoX3N1YnByb2c7XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtsb29wIChiYWNrLWVkZ2UpXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDt1bnJlYWNoYWJsZSBpbnNuIDFcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuaW5kZXggNWIxOGM5YTI3NzE3Yi4uYTgzNWE0ODcxMDIxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTUzLDkgJiM0Mzs1MywxMSBAQCBERUZJTkVfU0lNUExFX0pVTVBfVEFCTEVfUFJPRyhyZXNlcnZlZF9maWVsZF9ub25femVyb19pbW0sIEJQRl9SRUdfMCwgMCwgMSwgX19mYVxuICAqL1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O25vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0IDBcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1x1MDAzZVx1MDAzZVx1MDAzZSAxIHwgKDBkKSBnb3RveCByMFwmIzM0OylcbiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4gXHQuOGJ5dGUgJVtnb3RveF9yMF07XHRcdFx0XHRcdFxcXG4gXHRyMCA9IDE7XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5pbmRleCBkMjQ4Y2U4NzdmMTRlLi5kMWVjMTliN2Y2NmIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbkBAIC0xMzksNiAmIzQzOzEzOSw3IEBAIFNFQyhcJiMzNDt0cmFjZXBvaW50XCYjMzQ7KVxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7Ym91bmRlZCByZWN1cnNpb25cJiMzNDspXG4gX19mYWlsdXJlXG4gX19tc2coXCYjMzQ7cmVjdXJzaXZlIGNhbGwgZnJvbVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VGhlIGNhbGwgZnJvbSBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHRvIGJvdW5kZWRfcmVjdXJzaW9uX18xKCkgd291bGQgbWFrZVwmIzM0OylcbiBfX25ha2VkIHZvaWQgYm91bmRlZF9yZWN1cnNpb24odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xuaW5kZXggNDJkZTVjZmY3ZTUyYS4uMzA2OWU3MGZiY2JkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG5AQCAtOTYsNiAmIzQzOzk2LDI0IEBAIF9fbmFrZWQgdm9pZCBwc2V1ZG9fYnRmX2lkX2xvZ19tYXNrc19hZGRyZXNzKHZvaWQpXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7dW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2XG4mIzQzO19fbXNnX3VucHJpdihcJiMzNDtsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnNcJiMzNDspXG4mIzQzO19fbm90X21zZ191bnByaXYoXCYjMzQ7QlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsXCYjMzQ7KVxuJiM0MztfX21zZ191bnByaXYoXCYjMzQ7cG9saWN5IGNoZWNrIGZhaWxlZCBmb3IgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZVwmIzM0OylcbiYjNDM7X19tc2dfdW5wcml2KFwmIzM0O2F2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZFwmIzM0OylcbiYjNDM7aW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2xvb3AoMSwgcHNldWRvX2Z1bmNfY2FsbGJhY2ssIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDt1bnByaXY6IHJldHVybiBwb2ludGVyXCYjMzQ7KVxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcJiMzNDtSMCBsZWFrcyBhZGRyXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXG5pbmRleCAwNWEwYTU1YWRiNDUxLi5mMjQzMGI5YTAyMTg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuQEAgLTEyMSw0ICYjNDM7MTIxLDMxIEBAIGwwXyU9Olx0cjAgPSA0MjtcdFx0XHRcdFx0XFxcbiBcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDt4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7dmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvblwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogVmFyaWFibGUtb2Zmc2V0IGF0b21pYyBzdGFjayBhY2Nlc3NcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1RoZSBhdG9taWMgb3BlcmF0aW9uIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2tcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb25cJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcdFx0XHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHIwIFx1MDAyNj0gODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSAmIzQzOz0gLTE2O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxICYjNDM7PSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRsb2NrICoodTY0ICopKHIxICYjNDM7IDApICYjNDM7PSByMjtcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0Yzg4NzI5YjQ3NjM0N2NiYmMxZjE1ZTRjODI5NDViNDE3NjU4ZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtMTE2OSwxOSAmIzQzOzExNjksMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJ0Zl9zaG93X25hbWUoc3RydWN0IGJ0Zl9zaG93ICpzaG93KQogCQkJaWQgPSB0LSZndDt0eXBlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZCA9IDA7Ci0JCQlicmVhazsKJiM0MzsJCQlnb3RvIHJlc29sdmVkOwogCQl9CiYjNDM7CQl0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctJmd0O2J0ZiwgaWQpOwogCQlpZiAoIWlkKQogCQkJYnJlYWs7Ci0JCXQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy0mZ3Q7YnRmLCBpZCk7CiAJfQogCS8qIFdlIG1heSBub3QgYmUgYWJsZSB0byByZXByZXNlbnQgdGhpcyB0eXBlOyBiYWlsIHRvIGJlIHNhZmUgKi8KIAlpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUikKIAkJcmV0dXJuICYjMzQ7JiMzNDs7CiAKJiM0MztyZXNvbHZlZDoKIAlpZiAoIW5hbWUpCi0JCW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy0mZ3Q7YnRmLCB0LSZndDtuYW1lX29mZik7CiYjNDM7CQluYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/ICYjMzQ7dm9pZCYjMzQ7IDogYnRmX25hbWVfYnlfb2Zmc2V0KHNob3ctJmd0O2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpOwogCiAJc3dpdGNoIChCVEZfSU5GT19LSU5EKHQtJmd0O2luZm8pKSB7CiAJY2FzZSBCVEZfS0lORF9TVFJVQ1Q6CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuYwppbmRleCAwZjEzYzEzZjQxMzM3Li45NWM1OWY2Y2Y3MGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmMKQEAgLTI4Nyw3ICYjNDM7Mjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKQogICogY29tYmluZWQganVtcCB0YWJsZSBpbiBqdC0mZ3Q7aXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKQogICovCiBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCQkgIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpCiYjNDM7CQkJCQkgIGludCBpbnNuX2lkeCwgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZCkKIHsKIAlzdHJ1Y3QgYnBmX2lhcnJheSAqanQgPSBOVUxMOwogCXN0cnVjdCBicGZfbWFwICptYXA7CkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKCFqdCkgewogCQl2ZXJib3NlKGVudiwgJiMzNDtubyBqdW1wIHRhYmxlcyBmb3VuZCBmb3Igc3VicHJvZyBzdGFydGluZyBhdCAldVxuJiMzNDssIHN1YnByb2dfc3RhcnQpOwogCQlicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZSgKLQkJCWVudiwgc3VicHJvZ19zdGFydCwgJiMzNDttaXNzaW5nIGp1bXAgdGFibGUmIzM0OywKJiM0MzsJCQllbnYsIGluc25faWR4LCAmIzM0O21pc3NpbmcganVtcCB0YWJsZSYjMzQ7LAogCQkJJiMzNDtNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLiYjMzQ7LAogCQkJJiMzNDtObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuJiMzNDssCiAJCQlzdWJwcm9nX3N0YXJ0KTsKQEAgLTM0OSw3ICYjNDM7MzQ5LDcgQEAgY3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTsKIAlzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZy0mZ3Q7c3RhcnQ7CiAJc3VicHJvZ19lbmQgPSAoc3VicHJvZyAmIzQzOyAxKS0mZ3Q7c3RhcnQ7Ci0JanQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7CiYjNDM7CWp0ID0ganRfZnJvbV9zdWJwcm9nKGVudiwgdCwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQpOwogCWlmIChJU19FUlIoanQpKQogCQlyZXR1cm4ganQ7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYwppbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jCkBAIC04MzMsMTEgJiM0Mzs4MzMsOSBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaAogCWxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LSZndDtwcm9nLCBpbnNuX2lkeCk7CiAJaWYgKGJ0ZiAmYW1wOyZhbXA7IGxpbmZvKQogCQlicGZfZ2V0X2xpbmZvX3NvdXJjZShidGYsIGxpbmZvLCAmYW1wO3NyYyk7Ci0JaWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlIHx8ICFzcmMubGluZSB8fCAhKnNyYy5saW5lKSB7CiYjNDM7CWlmICghc3JjLmZpbGUgfHwgISpzcmMuZmlsZSkgewogCQlkaWFnX3dyaXRlKGVudiwgJiMzNDsgIGluc24gJXVcbiYjMzQ7LCBpbnNuX2lkeCk7Ci0JCWRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTsKLQkJZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2Fubm90YXRpb247CiAJfQogCiAJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIGluc25faWR4KTsKQEAgLTg0Nyw2ICYjNDM7ODQ1LDggQEAgc3RhdGljIHZvaWQgYnBmX2RpYWdfc291cmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgY29uc3QgY2gKIAkJZGlhZ193cml0ZShlbnYsICYjMzQ7ICAlcyBAICVzOiVkOiVkXG4mIzM0OywgZnVuYywgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTsKIAllbHNlCiAJCWRpYWdfd3JpdGUoZW52LCAmIzM0OyAgJXM6JWQ6JWRcbiYjMzQ7LCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpOwomIzQzOwlpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpCiYjNDM7CQlnb3RvIG91dF9hbm5vdGF0aW9uOwogCiAJc3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7CiAJZW5kX2xpbmUgPSBzcmMubGluZV9udW0gJiM0MzsgQlBGX0RJQUdfQ09OVEVYVDsKQEAgLTg4OSw3ICYjNDM7ODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoCiAJCQlkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgd2lkdGgsIGluZGVudCwgbGFiZWwsIG1zZyk7CiAJfQogCWRpYWdfcHJpbnRfaW5zbl9jb250ZXh0KGVudiwgaW5zbl9pZHgsIGRpc2FzbV9saW5lcyk7CiYjNDM7CWdvdG8gb3V0X3Jlc3RvcmU7CiAKJiM0MztvdXRfYW5ub3RhdGlvbjoKJiM0MzsJZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIDAsIDAsIGxhYmVsLCBtc2cpOwomIzQzOwlkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpOwogb3V0X3Jlc3RvcmU6CiAJZGlhZ19mbXRfcmVzdG9yZShlbnYsIG1hcmspOwogfQpAQCAtMTA4Myw3ICYjNDM7MTA4Nyw5IEBAIHZvaWQgYnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsCiAJY29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7CiAJdTMyIGRlcHRoOwogCi0JaWYgKGVudi0mZ3Q7Y3VyX3N0YXRlLSZndDthY3RpdmVfcmN1X2xvY2tzKQomIzQzOwlpZiAoIWVudi0mZ3Q7Y3VyX3N0YXRlLSZndDtpbl9zbGVlcGFibGUpCiYjNDM7CQljdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfTk9ORTsKJiM0MzsJZWxzZSBpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9yY3VfbG9ja3MpCiAJCWN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7CiAJZWxzZSBpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9wcmVlbXB0X2xvY2tzKQogCQljdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfUFJFRU1QVDsKQEAgLTE1MzEsOCAmIzQzOzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LAogCX0gZWxzZSBpZiAoZGlhZ19tb2RfaW5zbl9vcmlnaW4oZW52LCBpbnNuX2lkeCwgJmFtcDt0YXJnZXQsICZhbXA7ZXZlbnQubW9kLm9yaWdpbikpIHsKIAkJZXZlbnQubW9kLm9yaWdpbl92YWxpZCA9IHRydWU7CiAJfQotCWlmIChvbGRfcmVnICZhbXA7JmFtcDsgbmV3X3JlZyAmYW1wOyZhbXA7Ci0JICAgIChyZWFzb24gPT0gQlBGX0RJQUdfTU9EX1dSSVRFIHx8IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfU1BJTEwpICZhbXA7JmFtcDsKJiM0MzsJaWYgKG9sZF9yZWcgJmFtcDsmYW1wOyBuZXdfcmVnICZhbXA7JmFtcDsgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSAmYW1wOyZhbXA7CiAJICAgICFtZW1jbXAoJmFtcDtldmVudC5tb2Qub2xkLCAmYW1wO2V2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgJmFtcDsmYW1wOwogCSAgICAhZXZlbnQubW9kLm9yaWdpbl92YWxpZCAmYW1wOyZhbXA7CiAJICAgIGRpYWdfbW9kX2tlZXBzX2xpbmVhZ2UoZW52LCAmYW1wO2V2ZW50KSkKQEAgLTIxNjQsNyAmIzQzOzIxNjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGlhZ19tb2RfdGFyZ2V0X2Rlc2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAljYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfUkVHOgogCQlyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgJiMzNDtSJXUmIzM0OywgdGFyZ2V0LSZndDtyZWdubyk7CiAJY2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRzoKLQkJcmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c3RhY2sgYXJnJWQmIzM0OywgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtJmd0O3N0YWNrX2FyZykpOwomIzQzOwkJcmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7KihSMTEtJXUpJiMzNDssICh0YXJnZXQtJmd0O3N0YWNrX2FyZyAmIzQzOyAxKSAqIEJQRl9SRUdfU0laRSk7CiAJY2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX1NMT1Q6CiAJCXJldHVybiBicGZfZGlhZ19mbXQoZW52LCAmIzM0O3N0YWNrIHNsb3QgZnAlZCYjMzQ7LCAtKHRhcmdldC0mZ3Q7c3BpICYjNDM7IDEpICogQlBGX1JFR19TSVpFKTsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDBiYjdlZTk1YzhiZDIuLjc3MDMzY2YzNzM0YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTI5MTIsNiAmIzQzOzI5MTIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LSZndDtzdWJwcm9nX2luZm87CiAJaW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbiwgZXhfY2JfaW5zbjsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJY29uc3QgY2hhciAqb3BlcmF0aW9uLCAqc3VnZ2VzdGlvbjsKIAogCS8qIEFkZCBlbnRyeSBmdW5jdGlvbi4gKi8KIAlyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApOwpAQCAtMjkyMywxMSAmIzQzOzI5MjQsMTggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghZW52LSZndDticGZfY2FwYWJsZSkgewomIzQzOwkJCWlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHsKJiM0MzsJCQkJb3BlcmF0aW9uID0gJiMzNDtCUEYgZnVuY3Rpb24gcmVmZXJlbmNlJiMzNDs7CiYjNDM7CQkJCXN1Z2dlc3Rpb24gPSAmIzM0O0xvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0OzsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlvcGVyYXRpb24gPSAmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbCYjMzQ7OwomIzQzOwkJCQlzdWdnZXN0aW9uID0gJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0OzsKJiM0MzsJCQl9CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cbiYjMzQ7KTsKIAkJCWJwZl9kaWFnX3BvbGljeSgKLQkJCQllbnYsIGksICYjMzQ7QlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsJiMzNDssCiYjNDM7CQkJCWVudiwgaSwgb3BlcmF0aW9uLAogCQkJCSYjMzQ7bG9hZGluZyBvciBjYWxsaW5nIG90aGVyIEJQRiBmdW5jdGlvbnMgcmVxdWlyZXMgQ0FQX0JQRiBvciBDQVBfU1lTX0FETUlOJiMzNDssCi0JCQkJJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0Oyk7CiYjNDM7CQkJCXN1Z2dlc3Rpb24pOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCkBAIC0yOTk1LDE1ICYjNDM7MzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3N0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7Ci0JaW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDsKJiM0MzsJaW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtJmd0O3N1YnByb2dfaW5mbzsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlpbnQgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIAotCS8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi8KLQlzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7CiAJc3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0OwogCWZvciAoaSA9IDA7IGkgJmx0OyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHsKIAkJdTggY29kZSA9IGluc25baV0uY29kZTsKQEAgLTMwMTcsNiAmIzQzOzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCAmYW1wOyZhbXA7CiAJCSAgICAoQlBGX01PREUoY29kZSkgPT0gQlBGX0FCUyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU5EKSkKIAkJCXN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlOwomIzQzOwkJaWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7CiYjNDM7CQkJY3VyX3N1YnByb2cmIzQzOyYjNDM7OwomIzQzOwkJCWlmIChjdXJfc3VicHJvZyAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQpCiYjNDM7CQkJCXN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiYjNDM7ewomIzQzOwlpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwOwomIzQzOwlzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi0mZ3Q7c3VicHJvZ19pbmZvOwomIzQzOwlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJaW50IGluc25fY250ID0gZW52LSZndDtwcm9nLSZndDtsZW47CiYjNDM7CiYjNDM7CS8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi8KJiM0MzsJc3VicHJvZ19zdGFydCA9IHN1YnByb2dbY3VyX3N1YnByb2ddLnN0YXJ0OwomIzQzOwlzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7CiYjNDM7CiAJCWlmIChCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUCAmYW1wOyZhbXA7IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpCiAJCQlnb3RvIG5leHQ7CiAJCWlmIChCUEZfT1AoY29kZSkgPT0gQlBGX0NBTEwpCkBAIC0zMDM4LDkgJiM0MzszMDY1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJfQogbmV4dDoKIAkJaWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7Ci0JCQkvKiB0byBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlciwKIAkJCSAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0Ci0JCQkgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbAomIzQzOwkJCSAqIG9yIHVuY29uZGl0aW9uYWwganVtcCBiYWNrIG9yIGJwZl90aHJvdyBjYWxsLgogCQkJICovCiAJCQlpZiAoY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9FWElUKSAmYW1wOyZhbXA7CiAJCQkgICAgY29kZSAhPSAoQlBGX0pNUDMyIHwgQlBGX0pBKSAmYW1wOyZhbXA7CkBAIC0zMTI2LDggJiM0MzszMTU0LDkgQEAgc3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJYnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoCiAJCQkJCQllbnYsIGlkeCwgJiMzNDtyZWN1cnNpdmUgc3VicHJvZ3JhbSBjYWxsJiMzNDssCiAJCQkJCQkmIzM0O1Jld3JpdGUgdGhlIHJlY3Vyc2lvbiBhcyBhbiBleHBsaWNpdCBib3VuZGVkIGxvb3AsIG9yIHNwbGl0IHRoZSBsb2dpYyBzbyBzdWJwcm9ncmFtIGNhbGxzIGRvIG5vdCBmb3JtIGEgY3ljbGUuJiMzNDssCi0JCQkJCQkmIzM0O1RoaXMgYnBmMmJwZiBjYWxsIHdvdWxkIG1ha2UgdGhlIHN1YnByb2dyYW0gY2FsbCBncmFwaCByZWN1cnNpdmUuICYjMzQ7Ci0JCQkJCQkmIzM0O1RoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuJiMzNDspOwomIzQzOwkJCQkJCSYjMzQ7VGhlIGNhbGwgZnJvbSAlcygpIHRvICVzKCkgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gJiMzNDsKJiM0MzsJCQkJCQkmIzM0O1RoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuJiMzNDssCiYjNDM7CQkJCQkJYnBmX3N1YnByb2dfbmFtZShlbnYsIGN1ciksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBjYWxsZWUpKTsKIAkJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQpAQCAtMzgxNywxOSAmIzQzOzM4NDYsNDYgQEAgc3RhdGljIGludCBtYXJrX3JlZ19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLAotCQkJCSAgICAgICBpbnQgc2l6ZSkKJiM0MztzdGF0aWMgdm9pZCBicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZiwgaW50IGksIGludCBzaXplLAomIzQzOwkJCQkJZW51bSBicGZfc3RhY2tfc2xvdF90eXBlIHR5cGUpCiB7Ci0JY29uc3QgY2hhciAqcmVhc29uOwomIzQzOwljb25zdCBjaGFyICpwcm9ibGVtLCAqcmVhc29uLCAqc3VnZ2VzdGlvbiwgKmtpbmQ7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IFNUQUNLX0lOVkFMSUQpIHsKJiM0MzsJCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQllbnYsICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiAmIzM0OwomIzQzOwkJCSYjMzQ7UHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuJiMzNDssCiYjNDM7CQkJc2l6ZSwgb2ZmLCBpKTsKJiM0MzsJCWJwZl9kaWFnX21lbW9yeSgKJiM0MzsJCQllbnYsIGVudi0mZ3Q7aW5zbl9pZHgsICYjMzQ7dW5pbml0aWFsaXplZCBzdGFjayByZWFkJiMzNDssIHJlYXNvbiwKJiM0MzsJCQkmIzM0O0luaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCAmIzM0OwomIzQzOwkJCSYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JcmVhc29uID0gYnBmX2RpYWdfZm10KGVudiwKLQkJCSAgICAgICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiAmIzM0OwotCQkmIzM0O1Byb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLiYjMzQ7LAotCQlzaXplLCBvZmYsIGkpOwotCWJwZl9kaWFnX21lbW9yeSgKLQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3VuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZCYjMzQ7LCByZWFzb24sCi0JCSYjMzQ7SW5pdGlhbGl6ZSBldmVyeSBieXRlIGluIHRoZSBzdGFjayByYW5nZSBiZWZvcmUgcmVhZGluZyBpdCwgYWRqdXN0IHRoZSBvZmZzZXQgYW5kIHNpemUgc28gdGhlIHJlYWQgY292ZXJzIG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMsICYjMzQ7Ci0JCSYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLiYjMzQ7KTsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgU1RBQ0tfRFlOUFRSOgomIzQzOwkJa2luZCA9ICYjMzQ7ZHlucHRyJiMzNDs7CiYjNDM7CQlzdWdnZXN0aW9uID0gJiMzNDtVc2UgZHlucHRyIGhlbHBlcnMgb3Iga2Z1bmNzIHRvIGFjY2VzcyB0aGUgb2JqZWN0IHJlcHJlc2VudGVkIGJ5IHRoZSBkeW5wdHIgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBkeW5wdHIgc3RhdGUgZGlyZWN0bHkuJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTVEFDS19JVEVSOgomIzQzOwkJa2luZCA9ICYjMzQ7aXRlcmF0b3ImIzM0OzsKJiM0MzsJCXN1Z2dlc3Rpb24gPSAmIzM0O1VzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LiYjMzQ7OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1RBQ0tfSVJRX0ZMQUc6CiYjNDM7CQlraW5kID0gJiMzNDtJUlEgZmxhZyYjMzQ7OwomIzQzOwkJc3VnZ2VzdGlvbiA9ICYjMzQ7UGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmMgaW5zdGVhZCBvZiByZWFkaW5nIGl0cyBzdGF0ZSBkaXJlY3RseS4mIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2JsZW0gPSBicGZfZGlhZ19mbXQoZW52LCAmIzM0O2RpcmVjdCByZWFkIG9mICVzIHN0YWNrIHN0YXRlJiMzNDssIGtpbmQpOwomIzQzOwlyZWFzb24gPSBicGZfZGlhZ19mbXQoCiYjNDM7CQllbnYsICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGJlbG9uZ3MgdG8gdmVyaWZpZXItbWFuYWdlZCAlcyBzdGF0ZS4gJiMzNDsKJiM0MzsJCSYjMzQ7VGhpcyBzdGF0ZSBoYXMgYW4gb3BhcXVlIHJlcHJlc2VudGF0aW9uIHRoYXQgQlBGIHByb2dyYW1zIGNhbm5vdCByZWFkIGRpcmVjdGx5LiYjMzQ7LAomIzQzOwkJc2l6ZSwgb2ZmLCBpLCBraW5kKTsKJiM0MzsJYnBmX2RpYWdfbWVtb3J5KGVudiwgZW52LSZndDtpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTsKIH0KIAogLyogUmVhZCB0aGUgc3RhY2sgYXQgJiMzOTtvZmYmIzM5OyBhbmQgcHV0IHRoZSByZXN1bHRzIGludG8gdGhlIHJlZ2lzdGVyIGluZGljYXRlZCBieQpAQCAtMzkyMSw3ICYjNDM7Mzk3Nyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCXZlcmJvc2UoZW52LCAmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCYjNDM7JWQgc2l6ZSAlZFxuJiMzNDssCiAJCQkJCQkJb2ZmLCBpLCBzaXplKTsKLQkJCQkJCWJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KGVudiwgb2ZmLCBpLCBzaXplKTsKJiM0MzsJCQkJCQlicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoZW52LCBvZmYsIGksIHNpemUsIHR5cGUpOwogCQkJCQl9CiAJCQkJCXJldHVybiAtRUFDQ0VTOwogCQkJCX0KQEAgLTM5ODAsNyAmIzQzOzQwMzYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl9IGVsc2UgewogCQkJCXZlcmJvc2UoZW52LCAmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCYjNDM7JWQgc2l6ZSAlZFxuJiMzNDssCiAJCQkJCW9mZiwgaSwgc2l6ZSk7Ci0JCQkJYnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpOwomIzQzOwkJCQlicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoZW52LCBvZmYsIGksIHNpemUsIHR5cGUpOwogCQkJfQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KQEAgLTQwNzksMTMgJiM0Mzs0MTM1LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQl0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLSZndDt2YXJfb2ZmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7dmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvbjsgdmFyX29mZj0lcyBvZmY9JWQgc2l6ZT0lZFxuJiMzNDssCiAJCQl0bl9idWYsIG9mZiwgc2l6ZSk7Ci0JCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsCi0JCQkJICAgICAgJiMzNDtUaGUgaGVscGVyIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2sgdGhyb3VnaCB2YXJpYWJsZSBvZmZzZXQgJXMgcGx1cyBmaXhlZCBvZmZzZXQgJWQgYW5kIHNpemUgJWQuICYjMzQ7Ci0JCQkmIzM0O0hlbHBlciBzdGFjayBtZW1vcnkgYXJndW1lbnRzIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS4mIzM0OywKJiM0MzsJCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQllbnYsICYjMzQ7VGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gJiMzNDsKJiM0MzsJCQkmIzM0O0F0b21pYyBzdGFjayBvcGVyYXRpb25zIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS4mIzM0OywKIAkJCXRuX2J1Ziwgb2ZmLCBzaXplKTsKIAkJYnBmX2RpYWdfbWVtb3J5KAotCQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3ZhcmlhYmxlIHN0YWNrIGFjY2VzcyYjMzQ7LCByZWFzb24sCi0JCQkmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgaGVscGVyIG1lbW9yeSBhcmd1bWVudHMsIG9yIGNvcHkgdGhlIG5lZWRlZCBieXRlcyBpbnRvIGEgZml4ZWQgc3RhY2sgc2xvdCBmaXJzdC4mIzM0Oyk7CiYjNDM7CQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3ZhcmlhYmxlLW9mZnNldCBhdG9taWMgc3RhY2sgYWNjZXNzJiMzNDssIHJlYXNvbiwKJiM0MzsJCQkmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb24sIHNlbGVjdGluZyB0aGUgdGFyZ2V0IHN0YWNrIHNsb3Qgb24gc2VwYXJhdGUgY29udHJvbC1mbG93IHBhdGhzIGlmIG5lY2Vzc2FyeS4mIzM0Oyk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAkvKiBWYXJpYWJsZSBvZmZzZXQgaXMgcHJvaGliaXRlZCBmb3IgdW5wcml2aWxlZ2VkIG1vZGUgZm9yIHNpbXBsaWNpdHkKQEAgLTk4ODIsNyAmIzQzOzk5MzgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkJc3ViX25hbWUsIG5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihlbnYpKTsKIAkJCW9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c2xlZXBhYmxlIGdsb2JhbCBmdW5jdGlvbiAlcygpJiMzNDssIHN1Yl9uYW1lKTsKIAkJCWJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCQkmIzM0O01vdmUgdGhlIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi4mIzM0Oyk7CiYjNDM7CQkJCSYjMzQ7Q2FsbCB0aGUgZnVuY3Rpb24gZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMTA3MDEsNiAmIzQzOzEwNzU3LDggQEAgc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJaWYgKCFpbl9zbGVlcGFibGUoZW52KSkKJiM0MzsJCXJldHVybiAmIzM0O25vbi1zbGVlcGFibGUgcHJvZyYjMzQ7OwogCWlmIChlbnYtJmd0O2N1cl9zdGF0ZS0mZ3Q7YWN0aXZlX3JjdV9sb2NrcykKIAkJcmV0dXJuICYjMzQ7cmN1X3JlYWRfbG9jayByZWdpb24mIzM0OzsKIAlpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9wcmVlbXB0X2xvY2tzKQpAQCAtMTA3MDksNyAmIzQzOzEwNzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW4KIAkJcmV0dXJuICYjMzQ7SVJRLWRpc2FibGVkIHJlZ2lvbiYjMzQ7OwogCWlmIChlbnYtJmd0O2N1cl9zdGF0ZS0mZ3Q7YWN0aXZlX2xvY2tzKQogCQlyZXR1cm4gJiMzNDtsb2NrIHJlZ2lvbiYjMzQ7OwotCXJldHVybiAmIzM0O25vbi1zbGVlcGFibGUgcHJvZyYjMzQ7OwomIzQzOwlyZXR1cm4gJiMzNDtub24tc2xlZXBhYmxlIGNvbnRleHQmIzM0OzsKIH0KIAogc3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLApAQCAtMTA4MDUsNyAmIzQzOzEwODYzLDcgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAkJb3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgJiMzNDtzbGVlcGFibGUgaGVscGVyICVzIyVkJiMzNDssCiAJCQkJCSBmdW5jX2lkX25hbWUoZnVuY19pZCksIGZ1bmNfaWQpOwogCQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCSYjMzQ7TW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuJiMzNDspOwomIzQzOwkJCSYjMzQ7Q2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTA5OTQsMTMgJiM0MzsxMTA1MiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbgogCiAJLyogcmVzZXQgY2FsbGVyIHNhdmVkIHJlZ3MgKi8KIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiYjNDM7CWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2NhbGxlcl9zYXZlZFtpXV0pOwogCQljaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7CiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJLyogdXBkYXRlIHJldHVybiByZWdpc3RlciAoYWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZSkgKi8KIAlyZXRfdHlwZSA9IGZuLSZndDtyZXRfdHlwZTsKIAlyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7CkBAIC0xMjYyMywxMiAmIzQzOzEyNjgxLDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCSAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHsKIAkJCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7CiAKLQkJCWV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7CiYjNDM7CQkJZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTsKIAkJCXZlcmJvc2UoZW52LCAmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCWJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLAogCQkJCQkgICAgICAmIzM0O0FkZCBhIE5VTEwgY2hlY2sgYW5kIGNhbGwgdGhlIGtmdW5jIG9ubHkgb24gdGhlIG5vbi1OVUxMIHBhdGguJiMzNDssCi0JCQkJCSAgICAgICYjMzQ7dGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGJ1dCB0aGlzIGtmdW5jIHJlcXVpcmVzIGEgbm9uLU5VTEwgcG9pbnRlciB0byAlcyYjMzQ7LAomIzQzOwkJCQkJICAgICAgJiMzNDt0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzJiMzNDssCiAJCQkJCSAgICAgIGV4cGVjdGVkX3R5cGUpOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KQEAgLTEzMDY1LDggJiM0MzsxMzEyMywxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJYnJlYWs7CiAJCWNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOgogCQkJcmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCWlmIChyZXQgPT0gLUVJTlZBTCkKJiM0MzsJCQkJCWJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLAomIzQzOwkJCQkJCQkgICAgICAmIzM0O1Bhc3MgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb3IgYSB2YWx1ZSB0aGUgdmVyaWZpZXIgY2FuIHByb3ZlIGlzIGNvbnN0YW50IGF0IHRoaXMgY2FsbC4mIzM0OywKJiM0MzsJCQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgcmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50LCBidXQgJXMgaXMgdmFyaWFibGUgb24gdGhpcyBwYXRoJiMzNDssCiYjNDM7CQkJCQkJCSAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCQlmYWxsdGhyb3VnaDsKIAkJY2FzZSBLRl9BUkdfTUVNX1NJWkU6CiAJCXsKQEAgLTEzMTMwLDE1ICYjNDM7MTMxOTQsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCWJyZWFrOwogCQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgogCQkJaWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLSZndDt0eXBlKSkgewotCQkJCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7Ci0KLQkJCQlleHBlY3RlZF90eXBlID0gYnBmX2RpYWdfZm10X2J0Zl90eXBlKGVudiwgYnRmLCByZWZfaWQpOwogCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXG4mIzM0OywKIAkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCQlicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSwKLQkJCQkJCSAgICAgICYjMzQ7UGFzcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG1hdGNoaW5nIEJQRiBvYmplY3QgYWxsb2NhdGlvbiBvciBsb29rdXAgb3BlcmF0aW9uIGZvciB0aGlzIGtmdW5jLiYjMzQ7LAotCQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXImIzM0OywKLQkJCQkJCSAgICAgIGV4cGVjdGVkX3R5cGUpOwomIzQzOwkJCQkJCSAgICAgICYjMzQ7UGFzcyBhbiBvd25pbmcgb3Igbm9uLW93bmluZyBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgb2JqZWN0IGNvbnRhaW5pbmcgYSBicGZfcmVmY291bnQgZmllbGQuJiMzNDssCiYjNDM7CQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0ICVzIGlzICVzJiMzNDssCiYjNDM7CQkJCQkJICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLAomIzQzOwkJCQkJCSAgICAgIGJwZl9kaWFnX3JlZ190eXBlX3BsYWluKGVudiwgcmVnLSZndDt0eXBlKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKQEAgLTEzNzI2LDExICYjNDM7MTM3ODgsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAl9CiAKIAlzbGVlcGFibGUgPSBicGZfaXNfa2Z1bmNfc2xlZXBhYmxlKCZhbXA7bWV0YSk7Ci0JaWYgKHNsZWVwYWJsZSAmYW1wOyZhbXA7ICFpbl9zbGVlcGFibGUoZW52KSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jICVzXG4mIzM0OywgZnVuY19uYW1lKTsKJiM0MzsJaWYgKHNsZWVwYWJsZSAmYW1wOyZhbXA7ICFpbl9zbGVlcGFibGVfY29udGV4dChlbnYpKSB7CiYjNDM7CQljb25zdCBjaGFyICpzdWdnZXN0aW9uOwomIzQzOwomIzQzOwkJaWYgKGluX3NsZWVwYWJsZShlbnYpKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7a2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpOwomIzQzOwkJCXN1Z2dlc3Rpb24gPSAmIzM0O01vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy4mIzM0OzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSk7CiYjNDM7CQkJc3VnZ2VzdGlvbiA9ICYjMzQ7TWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuJiMzNDs7CiYjNDM7CQl9CiAJCW9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c2xlZXBhYmxlIGtmdW5jICVzJiMzNDssIGZ1bmNfbmFtZSk7Ci0JCWJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLAotCQkJJiMzNDtNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy4mIzM0Oyk7CiYjNDM7CQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwgc3VnZ2VzdGlvbik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtMTM4MzAsMTUgJiM0MzsxMzkwMSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQlpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpOwogCX0KIAotCWlmIChzbGVlcGFibGUgJmFtcDsmYW1wOyAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDtrZXJuZWwgZnVuYyAlcyBpcyBzbGVlcGFibGUgd2l0aGluICVzXG4mIzM0OywKLQkJCWZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpOwotCQlvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCAmIzM0O3NsZWVwYWJsZSBrZnVuYyAlcyYjMzQ7LCBmdW5jX25hbWUpOwotCQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCSYjMzQ7TW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLiYjMzQ7KTsKLQkJcmV0dXJuIC1FQUNDRVM7Ci0JfQotCiAJaWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgJmFtcDsmYW1wOyAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHsKIAkJdmVyYm9zZShlbnYsICYjMzQ7Q2FsbGluZyBicGZfcmN1X3JlYWRfe2xvY2ssdW5sb2NrfSBpbiB1bm5lY2Vzc2FyeSByYnRyZWUgY2FsbGJhY2tcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0yMTA4OCwxNyAmIzQzOzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAotCS8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi8KJiM0MzsJLyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi8KIAlyZXQgPSBhZGRfc3VicHJvZ3MoZW52KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBza2lwX2Z1bGxfY2hlY2s7CiAKLQlyZXQgPSBjaGVja19zdWJwcm9ncyhlbnYpOwomIzQzOwlmaW5kX3N1YnByb2dfcHJvcGVydGllcyhlbnYpOwomIzQzOwomIzQzOwkvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqLwomIzQzOwlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCi0JLyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi8KLQlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiYjNDM7CXJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCmluZGV4IGJlYWE3M2RjMzVmNWQuLjk0MThkZmU0ZDdiN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCkBAIC01NjAsNiAmIzQzOzU2MCw5IEBAIGludCBnbG9iYWwodm9pZCAqY3R4KQogLyogQSBkaXJlY3QgcmVhZCBzaG91bGQgZmFpbCAqLwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCByZWFkIGZyb20gc3RhY2smIzM0OykKJiM0MztfX21zZygmIzM0O1ZlcmlmaWNhdGlvbiBmYWlsZWQ6IE1lbW9yeSBTYWZldHk6IERpcmVjdCByZWFkIG9mIGR5bnB0ciBzdGFjayBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O1VzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MmIzM0OykKIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eCkKIHsKIAlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CkBAIC0xNTkwLDYgJiM0MzsxNTkzLDcgQEAgX191MzIgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGV0aGhkcik7CiAvKiBDYW4mIzM5O3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqLwogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDttdXN0IGJlIGEga25vd24gY29uc3RhbnQmIzM0OykKJiM0MztfX21zZygmIzM0O3JlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudCYjMzQ7KQogaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGJwZl9keW5wdHIgcHRyOwpAQCAtMTYwOSw2ICYjNDM7MTYxMyw3IEBAIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogLyogQ2FuJiMzOTt0IHBhc3MgaW4gdmFyaWFibGUtc2l6ZWQgbGVuIHRvIGJwZl9keW5wdHJfc2xpY2UgKi8KIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7bXVzdCBiZSBhIGtub3duIGNvbnN0YW50JiMzNDspCiYjNDM7X19tc2coJiMzNDtyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQmIzM0OykKIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuYwppbmRleCBhNGEwMDc4NjZhMzMyLi44ZDJiNTBkMTFmYTRlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jCkBAIC0xNCw2ICYjNDM7MTQsMTkgQEAgZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHIKIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoJiMzNDsuZGF0YS5BJiMzNDspOwogc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tCIF9faGlkZGVuIFNFQygmIzM0Oy5kYXRhLkImIzM0Oyk7CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgSVJRIGZsYWcgc3RhY2sgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O3ZlcmlmaWVyLW1hbmFnZWQgSVJRIGZsYWcgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O1Bhc3MgdGhlIHNhdmVkIElSUSBmbGFnIHRvIHRoZSBtYXRjaGluZyByZXN0b3JlIGtmdW5jJiMzNDspCiYjNDM7aW50IGlycV9mbGFnX2RpcmVjdF9yZWFkKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CWJwZl9sb2NhbF9pcnFfc2F2ZSgmYW1wO2ZsYWdzKTsKJiM0MzsJcmV0dXJuIGZsYWdzOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgZG9lc24mIzM5O3QgcG9pbnQgdG8gYW4gaXJxIGZsYWcgb24gc3RhY2smIzM0OykKIGludCBpcnFfc2F2ZV9iYWRfYXJnKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwppbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCkBAIC0zMzIsNiAmIzQzOzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpCiAKIFNFQygmIzM0Oz9yYXdfdHAmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrJiMzNDspCiYjNDM7X19tc2coJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jcyYjMzQ7KQogaW50IF9fbmFrZWQgcmVhZF9mcm9tX2l0ZXJfc2xvdF9mYWlsKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlICgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwppbmRleCA2ZDVmY2U3ZTZmZmM5Li44M2M5MTE0OTRhMzRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oJiMzNDsKIAogZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKSBfX3dlYWsgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTsKIAogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtCUEZfRVhJVCBpbnN0cnVjdGlvbiBpbiBtYWluIHByb2cgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9wcmVlbXB0X2Rpc2FibGUtZWQgcmVnaW9uJiMzNDspCkBAIC0xMjcsNiAmIzQzOzEyOSwxOSBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P2ZlbnRyeS8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHImIzM0OykKJiM0MztfX21zZygmIzM0O2Nhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSYjMzQ7KQomIzQzO2ludCBub25fc2xlZXBhYmxlX2tmdW5jX2luX3JjdSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgZGF0YTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJYnBmX2NvcHlfZnJvbV91c2VyX3N0cigmYW1wO2RhdGEsIHNpemVvZihkYXRhKSwgTlVMTCwgMCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKQogewogCXByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDAyNGVmMmFhZTIwMDguLmVhYWVkMDg1OWY5NDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCkBAIC02Myw2ICYjNDM7NjMsNyBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KQogCiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7cmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICh2b2lkICopJiMzNDspCiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpCiB7CiAJc3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07CkBAIC04MCw2ICYjNDM7ODEsMTQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWYmIzM0OykKJiM0MztfX21zZygmIzM0O2V4cGVjdHMgYSBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QsIGJ1dCBSMSBpcyBhIGNvbnRleHQgcG9pbnRlciYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSYjNDM7fX0mIzM0OykKIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jCmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMKQEAgLTU1LDYgJiM0Mzs1NSw0NiBAQCBfX25ha2VkIHZvaWQgb3V0X29mX3JhbmdlX2p1bXAyKHZvaWQpCiAmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7anVtcCBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyeSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2p1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAxJiMzNDspCiYjNDM7X19tc2coJiMzNDtqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmMmIzM0OykKJiM0MztfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsIGNyb3NzX3N1YnByb2dfdGFyZ2V0OwkJCVwKJiM0MzsJZ290byAmIzQzOzE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtzdWJwcm9ncmFtIGZhbGx0aHJvdWdoJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7ZmFsbHRocm91Z2hfc3VicHJvZyBAIHZlcmlmaWVyX2NmZy5jJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHN1YnByb2dfZmFsbHRocm91Z2godm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nOwkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O2xvb3AgKGJhY2stZWRnZSkmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O3VucmVhY2hhYmxlIGluc24gMSYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwppbmRleCA1YjE4YzlhMjc3MTdiLi5hODM1YTQ4NzEwMjEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwpAQCAtNTMsOSAmIzQzOzUzLDExIEBAIERFRklORV9TSU1QTEVfSlVNUF9UQUJMRV9QUk9HKHJlc2VydmVkX2ZpZWxkX25vbl96ZXJvX2ltbSwgQlBGX1JFR18wLCAwLCAxLCBfX2ZhCiAgKi8KIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7bm8ganVtcCB0YWJsZXMgZm91bmQgZm9yIHN1YnByb2cgc3RhcnRpbmcgYXQgMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7Jmd0OyZndDsmZ3Q7IDEgfCAoMGQpIGdvdG94IHIwJiMzNDspCiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiAJLjhieXRlICVbZ290b3hfcjBdOwkJCQkJXAogCXIwID0gMTsJCQkJCQkJXAogCWV4aXQ7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwppbmRleCBkMjQ4Y2U4NzdmMTRlLi5kMWVjMTliN2Y2NmIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCkBAIC0xMzksNiAmIzQzOzEzOSw3IEBAIFNFQygmIzM0O3RyYWNlcG9pbnQmIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIHJlY3Vyc2lvbiYjMzQ7KQogX19mYWlsdXJlCiBfX21zZygmIzM0O3JlY3Vyc2l2ZSBjYWxsIGZyb20mIzM0OykKJiM0MztfX21zZygmIzM0O1RoZSBjYWxsIGZyb20gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB0byBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHdvdWxkIG1ha2UmIzM0OykKIF9fbmFrZWQgdm9pZCBib3VuZGVkX3JlY3Vyc2lvbih2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYwppbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jCkBAIC05Niw2ICYjNDM7OTYsMjQgQEAgX19uYWtlZCB2b2lkIHBzZXVkb19idGZfaWRfbG9nX21hc2tzX2FkZHJlc3Modm9pZCkKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7c3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDt1bnByaXY6IHBzZXVkbyBmdW5jdGlvbiBwb2xpY3kgZGlhZ25vc3RpYyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2CiYjNDM7X19tc2dfdW5wcml2KCYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zJiMzNDspCiYjNDM7X19ub3RfbXNnX3VucHJpdigmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbCYjMzQ7KQomIzQzO19fbXNnX3VucHJpdigmIzM0O3BvbGljeSBjaGVjayBmYWlsZWQgZm9yIEJQRiBmdW5jdGlvbiByZWZlcmVuY2UmIzM0OykKJiM0MztfX21zZ191bnByaXYoJiMzNDthdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQmIzM0OykKJiM0MztpbnQgdW5wcml2X3BzZXVkb19mdW5jX3BvbGljeSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBwc2V1ZG9fZnVuY19jYWxsYmFjaywgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O3VucHJpdjogcmV0dXJuIHBvaW50ZXImIzM0OykKIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdigmIzM0O1IwIGxlYWtzIGFkZHImIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jCmluZGV4IDA1YTBhNTVhZGI0NTEuLmYyNDMwYjlhMDIxODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuYwpAQCAtMTIxLDQgJiM0MzsxMjEsMzEgQEAgbDBfJT06CXIwID0gNDI7CQkJCQlcCiAmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDt4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDt2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uJiMzNDspCiYjNDM7X19tc2coJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2VzcyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciB0aGUgYXRvbWljIG9wZXJhdGlvbiYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwkqKHU2NCAqKShyMTAgLSAxNikgPSByMTsJCQlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gcjE7CQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjAgJmFtcDs9IDg7CQkJCQlcCiYjNDM7CXIxID0gcjEwOwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gLTE2OwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gcjA7CQkJCQlcCiYjNDM7CXIyID0gMTsJCQkJCQlcCiYjNDM7CWxvY2sgKih1NjQgKikocjEgJiM0MzsgMCkgJiM0Mzs9IHIyOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgdmVyaWZpZXIgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGEgbWl4IG9mIGRpYWdub3N0aWMgaW1wcm92ZW1lbnRzIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2VzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGVycm9yIG1lc3NhZ2VzIGFuZCBoaW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWNhdGlvbiBsb2dpYyBpdHNlbGYuCgpGaXJzdCwgbG9va2luZyBhdCBga2VybmVsL2JwZi9idGYuY2AsIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBidGZfc2hvd19uYW1lYC4gSXQgbm93IGhhbmRsZXMgdm9pZCB0eXBlcyBjb3JyZWN0bHkuIFRoaXMgaXMgYSBtaW5vciBjb3JyZWN0aW9uLCBub3RoaW5nIHRvIGJlIGFsYXJtZWQgYWJvdXQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBsZWQgdG8gaW5jb3JyZWN0IHR5cGUgbmFtZSByZXByZXNlbnRhdGlvbiBpbiBzcGVjaWZpYyBjYXNlcywgd2hpY2ggaXMgbm93IGZpeGVkLgoKVGhlbiwgYGtlcm5lbC9icGYvY2ZnLmNgIGhhcyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGp0X2Zyb21fc3VicHJvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYW4gYGluc25faWR4YCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBpcyBwcm9iYWJseSBqdXN0IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgZm9yIGRpYWdub3N0aWNzLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb24gY2F1c2luZyBpc3N1ZXMuCgpga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCBoYXMgYSBudW1iZXIgb2YgdXBkYXRlczsgYWxsIG9mIHRoZW0gc2VlbSB0byBiZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIGFuZCBjb250ZXh0IHJlcG9ydGluZyBiZXR0ZXIuIE5vdGhpbmcgdG9vIGNyaXRpY2FsIGhlcmUsIGJ1dCBldmVyeSBiaXQgaGVscHMgd2l0aCBkZWJ1Z2dpbmcgQlBGIHByb2dyYW1zLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZXMgaW4gdGhlIHByb2dyYW0mIzM5O3Mgb3JkZXIgb2YgZXhlY3V0aW9uLiBJIHNlZSB0aGF0IGBjaGVja19zdWJwcm9nc2AgaXMgc3BsaXQgaW50byBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgIGFuZCBgY2hlY2tfc3VicHJvZ3NgLCBhbmQgdGhlIGNhbGxpbmcgb3JkZXIgb2YgdGhlc2UgYW5kIGBicGZfY2hlY2tfYnRmX2luZm9gIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIGEgYmlnIHJlZCBmbGFnLCBhbmQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbi4KClNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNhbGxzIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AsIHRoZW4gYGJwZl9jaGVja19idGZfaW5mb2AsIGFuZCBmaW5hbGx5IGBjaGVja19zdWJwcm9nc2AuIFRoaXMgbWVhbnMgdGhhdCBCVEYgdmFsaWRhdGlvbiBpcyBub3cgcGVyZm9ybWVkICpiZWZvcmUqIHdlIGNoZWNrIHN1YnByb2dyYW0gbGF5b3V0IHZhbGlkaXR5LiBQcmV2aW91c2x5LCB0aGUgc3VicHJvZ3JhbSBzdHJ1Y3R1cmUgd2FzIHZhbGlkYXRlZCBmaXJzdC4gVGhpcyBpcyBhIHBvdGVudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIHNlY3VyaXR5IGltcGxpY2F0aW9ucyEKCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCBkb2VzLiBPa2F5LCBpdCYjMzk7cyBqdXN0IGV4dHJhY3RpbmcgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gYGhhc19sZF9hYnNgLCBub3RoaW5nIGNyaXRpY2FsIHRoZXJlLgoKVGhlIHJlb3JkZXJpbmcgbWVhbnMgdGhhdCBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBub3cgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJvY2VzcyBCVEYgaW5mb3JtYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgbWlnaHQgaGF2ZSAqaW52YWxpZCogc3VicHJvZ3JhbSBzdHJ1Y3R1cmVzIChlLmcuLCBqdW1wcyBvdXRzaWRlIHN1YnByb2dyYW0gYm91bmRhcmllcywgb3IgZmFsbHRocm91Z2hzKS4gVGhpcyBpcyBhIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9yIGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzbiYjMzk7dCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBpbnZhbGlkIHByb2dyYW0gZmxvdy4gVGhlIGNvZGUgaXMgc3RydWN0dXJlZCBzdWNoIHRoYXQgYGFkZF9zdWJwcm9nc2AgaXMgc3RpbGwgY2FsbGVkIGZpcnN0LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuIFNvIHRoZSBpbnZhbGlkIHByb2dyYW0gc3RpbGwgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGludG8gYSBzZXQgb2Ygc3VicHJvZ3JhbXMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIEJURiBhbmQgc3VicHJvZ3JhbSB2YWxpZGF0aW9uIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGVyZSBtYXkgYmUgc29tZSBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgcGF0aHMuIAoKSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB0byBzZWUgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgcHJvZ3JhbSBzdHJ1Y3R1cmUgdGhhdCBhcmUgbm8gbG9uZ2VyIGd1YXJhbnRlZWQgYnkgdGhlIG5ldyBleGVjdXRpb24gb3JkZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgd29ydGggZnV6emluZyB0aG9yb3VnaGx5LiBUaGlzIHJlb3JkZXJpbmcgb2YgdmFsaWRhdGlvbiBjaGVja3MgY291bGQgaW50cm9kdWNlIG5ldywgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUsIGJlaGF2aW9yIGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIHdhc24mIzM5O3QgZGVzaWduZWQgdG8gaGFuZGxlIHByb2dyYW1zIHdpdGggaW52YWxpZCBzdWJwcm9ncmFtIGxheW91dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrX2J0Zl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAzNz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjAtXHQvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTYxOlx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGZ1bmN0aW9uOgoKKipEaXZpbmcgaW50byBgYnBmX2NoZWNrX2J0Zl9pbmZvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvcmUgcHVycG9zZSBpczogdGhpcyBmdW5jdGlvbiAqaGFzKiB0byBiZSBjb25jZXJuZWQgd2l0aCB2YWxpZGF0aW5nIEJURiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIGl0IHdpbGwgZW5zdXJlIHRoZSBpbnRlZ3JpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIHRoZSBCVEYgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgYnkgQlBGIHByb2dyYW1zIG9yIGluZnJhc3RydWN0dXJlLiBJIHdvdWxkIGFzc3VtZSBpdCYjMzk7cyBjaGVja2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipUeXBlIFNhZmV0eToqKiBNYWtpbmcgc3VyZSB0aGF0IHR5cGUgZGVmaW5pdGlvbnMgcmVmZXJlbmNlZCBpbiBCUEYgY29kZSBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgdmFsaWQgaW4gdGhlIEJURiBkYXRhLiBBbnkgbWlzbWF0Y2hlcyBpbiBzaXplcyBvciBsYXlvdXQgc2hvdWxkIGJlIGNhdWdodC4KKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIFByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHRoZSBCVEYgZGF0YSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIEJQRiBydW50aW1lIGVudmlyb25tZW50IGl0JiMzOTtzIHJ1bm5pbmcgaW4uIEEgbWlzbWF0Y2ggaGVyZSBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLgoqICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgcG90ZW50aWFsIGV4cGxvaXRzIGlmIEJURiBpbmZvcm1hdGlvbiBpcyBjb3JydXB0ZWQgb3IgbWFuaXB1bGF0ZWQ/CiogICAqKkNvbXBsZXRlbmVzczoqKiBDb25maXJtaW5nIHRoYXQgYWxsIHJlZmVyZW5jZWQgdHlwZXMgYXJlIGRlZmluZWQsIG9yIHRoYXQgYW55IHBhcnRpYWwgZGVmaW5pdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSByZWFzb25hYmxlIHdheS4KCkkmIzM5O2QgYWxzbyBiZSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGVhcmx5LCBvciBsYXRlcj8gRG9lcyBpdCByZWxhdGUgdG8gdGhlIEJQRiB2ZXJpZmllciBpbiBzb21lIHdheT8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBpdCBsaWtlbHkgaXMgaW52b2tlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkIG9yIGF0dGFjaCBvcGVyYXRpb25zLCBwcm9iYWJseSAqYmVmb3JlKiB0aGUgcHJvZ3JhbSBpcyBhbGxvd2VkIHRvIHJ1bi4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5wdXQgcGFyYW1ldGVycyB0b287IHdoYXQgZXhhY3RseSBkb2VzIHRoaXMgZnVuY3Rpb24gdGFrZSBhcyBhcmd1bWVudHM6IHRoZSBCVEYgZGF0YSBpdHNlbGYsIHBvaW50ZXJzIHRvIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbT8gVGhpcyBraW5kIG9mIGNoZWNrIGlzIGNydWNpYWwgZm9yIEJQRiBzZWN1cml0eSBhbmQgc3RhYmlsaXR5OyBpZiBpdCBpcyBwb29ybHkgaW1wbGVtZW50ZWQsIHRoZSB3aG9sZSBzeXN0ZW0gaXMgYXQgcmlzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgaW50IGJwZl9jaGVja19idGZfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBCVEYgSXNzdWUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gc2VlbXMgbGlrZSB0aGUgcHJvYmxlbSBJJiMzOTttIGNoYXNpbmcgbWlnaHQgKm5vdCogYmUgc29tZXRoaW5nIGZ1bmRhbWVudGFsbHkgc3RhdGljLiBJIHdhcyBpbml0aWFsbHkgbGVhbmluZyB0aGF0IHdheSwgYnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIG1heWJlIHRoZSBlcnJvciBpcyBkeW5hbWljIGluIG5hdHVyZSwgY2hhbmdpbmcgaW4gZWFjaCBleGVjdXRpb24gb2YgdGhlIGNvZGUuIE9yLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmd5LCBtYXliZSB0aGUgcm9vdCBvZiB0aGlzIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGlzIGhpZGRlbiBhd2F5IGluIGBidGYuY2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgZGVidWdnaW5nIG5leHQuIEkgc2hvdWxkIHN0ZXAgdGhyb3VnaCBpdCBhbmQgY2hlY2sgd2hhdCBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicGZfY2hlY2tfYnRmX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTQxMD1pbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIEJURiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgQlRGIHZlcmlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgdmFsaWRhdGVzIEJURiBpbmZvcm1hdGlvbiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBkZWZpbml0ZWx5IHRoZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbiBga2VybmVsL2JwZi9jaGVja19idGYuY2AsIHNvIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgcHVsbCB0aGF0IHVwLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBhbmQgd2hhdCBjaGVja3MgdGhleSYjMzk7cmUgcGVyZm9ybWluZyBvbiB0aGUgQlRGIGRhdGEuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbW1vbiBwaXRmYWxscyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEdldHRpbmcgYSBoYW5kbGUgb24gdGhpcyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgYnVpbGRpbmcgcm9idXN0IGFuZCBzZWN1cmUgQlBGIHByb2dyYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Mzg6XHRpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gNDM5Olx0XHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiA0NDA6XHRcdFx0ICAgICAgIGJwZnB0cl90IHVhdHRyKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdGludCBlcnI7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWF0dHItXHUwMDNlZnVuY19pbmZvX2NudCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNlbGluZV9pbmZvX2NudCkge1xuIDQ0NTpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gNDQ2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRcdHJldHVybiAwO1xuIDQ0ODpcdFx0fVxuIDQ0OTpcdFxuIDQ1MDpcdFx0ZXJyID0gY2hlY2tfYnRmX2Z1bmMoZW52LCBhdHRyLCB1YXR0cik7XG4gNDUxOlx0XHRpZiAoZXJyKVxuIDQ1MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1MzpcdFxuIDQ1NDpcdFx0ZXJyID0gY2hlY2tfYnRmX2xpbmUoZW52LCBhdHRyLCB1YXR0cik7XG4gNDU1Olx0XHRpZiAoZXJyKVxuIDQ1NjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0ZXJyID0gY2hlY2tfY29yZV9yZWxvKGVudiwgYXR0ciwgdWF0dHIpO1xuIDQ1OTpcdFx0aWYgKGVycilcbiA0NjA6XHRcdFx0cmV0dXJuIGVycjtcbiA0NjE6XHRcbiA0NjI6XHRcdHJldHVybiAwO1xuIDQ2MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCByZW9yZGVyaW5nIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgQlRGIChCUEYgVHlwZSBGb3JtYXQpIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBpcyB0byBwcmlvcml0aXplIGVycm9yIHJlcG9ydGluZzogc2hvdyBCVEYvQ08tUkUgKENvbXBpbGUtT25jZSwgUnVuLUV2ZXJ5d2hlcmUpIGVycm9ycyAqYmVmb3JlKiBwb3RlbnRpYWxseSBtaXNsZWFkaW5nIGVycm9ycyBjYXVzZWQgYnkgdGhlIHN1YnByb2dyYW0gbGF5b3V0IGJlaW5nIGluY29ycmVjdC4gSSBtZWFuLCBpdCBtYWtlcyBzZW5zZTsgaWYgQ08tUkUgaXMgbWVzc2luZyB3aXRoIHRoZSBwcm9ncmFtLCBpdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8ga25vdyB0aGF0ICpmaXJzdCogaW5zdGVhZCBvZiBzZWVpbmcgYW4gZXJyb3IgYWJvdXQgYW4gaW52YWxpZCBqdW1wIHdpdGhpbiBhIHN1YnByb2dyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcm9jZXNzIGludm9sdmVzIGBjaGVja19idGZfZnVuY2AsIGBjaGVja19idGZfbGluZWAsIGFuZCBgY2hlY2tfY29yZV9yZWxvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHZhbGlkYXRpbmcgQlRGIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBvZiB0aGUgQlBGIHByb2dyYW0uIFRoZSBrZXkgaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGNoZWNrcyBmb3IganVtcHMgdGhhdCBjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgb3IgZmFsbHRocm91Z2hzICphZnRlciogcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuCgpCdXQgdGhlbiB0aGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQ6IGBhZGRfc3VicHJvZ3NgIHBvcHVsYXRlcyBgZW52LSZndDtzdWJwcm9nX2luZm9gICpiZWZvcmUqIGBicGZfY2hlY2tfYnRmX2luZm9gLiBTbywgYGNoZWNrX3N1YnByb2dzYCBjaGVja3MgZm9yIGludmFsaWQgbGF5b3V0cyAqYWZ0ZXIqIHN1YnByb2dyYW1zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGVyZWZvcmUsIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IG1lYW5zIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uIG9uIGEgcHJvZ3JhbSB3aXRoIGFuIGluY29ycmVjdCBzdWJwcm9ncmFtIGxheW91dC4gSSBuZWVkIHRvIGJlIHN1cmUuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIENPLVJFIHJlbG9jYXRpb25zICpkbyogbW9kaWZ5IGluc3RydWN0aW9ucywgYnV0IHRoZSBwYXRjaCBzZWVtcyB0byBhc3N1bWUgdGhhdCB0aGV5IGRvbiYjMzk7dCBjaGFuZ2UganVtcCAqb2Zmc2V0cyogKHRoZXkgY2hhbmdlIGltbWVkaWF0ZXMgaW5zdGVhZCkuIEhvd2V2ZXIsIEkgYWxzbyBzYXcgdGhlIGNvbW1pdCBtZXNzYWdlOiAmIzM0O1ZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuJiMzNDsKCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXJlIGFyZSBudW1lcm91cyBkaWFnbm9zdGljIGNoYW5nZXMuIFRoZSBkaWFnbm9zdGljIGNoYW5nZXMgaW5jbHVkZSB0aGUgcmVvcmRlcmluZyBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYCwgdGhlIGNvbnNvbGlkYXRpb24gYW5kIGNsYXJpZmljYXRpb24gb2Ygc2xlZXBhYmxlIGtmdW5jIGNoZWNrcywgYW5kIHZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIGluIGBjaGVja19rZnVuY19hcmdzYC4gU3BlY2lmaWNhbGx5LCBlcnJvciBtZXNzYWdlIGltcHJvdmVtZW50cyB3ZXJlIG1hZGUgaW4gYEtGX0FSR19DT05TVF9NRU1fU0laRWAsIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFRoZXNlIGFyZSBhbGwgYWJvdXQgbWFraW5nIHRoZSB2ZXJpZmllciYjMzk7cyBmZWVkYmFjayBtb3JlIGhlbHBmdWwsIHByb3ZpZGluZyBjbGVhcmVyIHN1Z2dlc3Rpb25zIHRvIHRoZSB1c2VyLgoKSG93ZXZlciwgdGhlIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbnMgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBTaW5jZSB0aGUgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGV4ZWN1dGVzIG9uIGEgcG90ZW50aWFsbHkgJiMzNDtpbnZhbGlkJiMzNDsgc3VicHJvZ3JhbSBsYXlvdXQuIENvdWxkIHRoaXMgY2F1c2UgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gSSBzaG91bGQgY2hlY2sgYGNoZWNrX2J0Zl9mdW5jYCB0byBlbnN1cmUgdGhlIHByb2dyYW0gaGFzIGEgdmFsaWQgbGF5b3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBjaGVja19idGZfZnVuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzItXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjEzMzpzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTEzNC1cdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICYjMzk7Y2hlY2tfYnRmX2Z1bmMmIzM5OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGNoZWNrX2J0Zl9mdW5jYCByb3V0aW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dD8gSXMgdGhpcyBwYXJ0IG9mIGEga2VybmVsIG1vZHVsZSwgYSB1c2VyLXNwYWNlIHV0aWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEJQRiBUeXBlIEZvcm1hdCAoQlRGKSBjaGVja2luZywgd2hpY2ggaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZXRhZGF0YSBhYm91dCBCUEYgcHJvZ3JhbXMsIGFuZCB2ZXJpZnlpbmcgaXRzIGludGVncml0eS4KCkkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIElzIGl0IGxvb2tpbmcgZm9yIG1hbGZvcm1lZCBCVEYgZGF0YSwgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIEJURiBpbmZvIGFuZCB0aGUgYWN0dWFsIEJQRiBwcm9ncmFtLCBvciBwZXJoYXBzIHR5cGUgbWlzbWF0Y2hlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIHNldmVyYWwgYXJlYXMgdGhhdCByZXF1aXJlIGNsb3NlIGluc3BlY3Rpb24sIHN1Y2ggYXM6CiogICAqKkJURiBIZWFkZXIgSW50ZWdyaXR5OioqIEVuc3VyaW5nIHRoZSBCVEYgaGVhZGVyIGlzIHdlbGwtZm9ybWVkIGFuZCB2YWxpZC4KKiAgICoqVHlwZSBEZXNjcmlwdG9yIENvbnNpc3RlbmN5OioqIFZlcmlmeWluZyB0aGUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHlwZXMgcmVjb3JkZWQgaW4gdGhlIEJURiBkYXRhLgoqICAgKipTaXplIGFuZCBBbGlnbm1lbnQ6KiogQ29uZmlybWluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG1hdGNoIGV4cGVjdGF0aW9ucyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4KKiAgICoqRGVwZW5kZW5jeSBSZXNvbHV0aW9uOioqIEFyZSB0aGVyZSBjcm9zcy1yZWZlcmVuY2VzIGJldHdlZW4gdHlwZXM/IFdlIG5lZWQgdG8gZW5zdXJlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IHJlc29sdmVkLgoqICAgKipFcnJvciBSZXBvcnRpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCBsb2csIHJldHVybiBhbiBlcnJvciBjb2RlLCBvciB0cmlnZ2VyIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBIb3cgdGhvcm91Z2ggaXMgaXQ/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNoZWNrcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBiYXNpYyB2YWxpZGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgZGV0ZWN0aW5nIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/CgpNeSBtZW50YWwgY2hlY2tsaXN0IGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGNvbW1vbiBCVEYtcmVsYXRlZCBpc3N1ZXMuIE5vdywgdGhlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlbS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gMTM0Olx0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiAxMzU6XHRcdFx0XHQgIGJwZnB0cl90IHVhdHRyKVxuIDEzNjpcdHtcbiAxMzc6XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmZ1bmNfcHJvdG8sICpyZXRfdHlwZTtcbiAxMzg6XHRcdHUzMiBpLCBuZnVuY3MsIHVyZWNfc2l6ZTtcbiAxMzk6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvICprcmVjb3JkO1xuIDE0MDpcdFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XG4gMTQxOlx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gMTQyOlx0XHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XG4gMTQzOlx0XHRicGZwdHJfdCB1cmVjb3JkO1xuIDE0NDpcdFx0Ym9vbCBzY2FsYXJfcmV0dXJuO1xuIDE0NTpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gMTQ2Olx0XG4gMTQ3Olx0XHRuZnVuY3MgPSBhdHRyLVx1MDAzZWZ1bmNfaW5mb19jbnQ7XG4gMTQ4Olx0XHRpZiAoIW5mdW5jcykge1xuIDE0OTpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gMTUwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUxOlx0XHRcdHJldHVybiAwO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0aWYgKG5mdW5jcyAhPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQpIHtcbiAxNTQ6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O251bWJlciBvZiBmdW5jcyBpbiBmdW5jX2luZm8gZG9lc24mIzM5O3QgbWF0Y2ggbnVtYmVyIG9mIHN1YnByb2dzXFxuXCYjMzQ7KTtcbiAxNTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU2Olx0XHR9XG4gMTU3Olx0XG4gMTU4Olx0XHR1cmVjX3NpemUgPSBhdHRyLVx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZTtcbiAxNTk6XHRcbiAxNjA6XHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZztcbiAxNjE6XHRcdGJ0ZiA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWJ0ZjtcbiAxNjI6XHRcbiAxNjM6XHRcdHVyZWNvcmQgPSBtYWtlX2JwZnB0cihhdHRyLVx1MDAzZWZ1bmNfaW5mbywgdWF0dHIuaXNfa2VybmVsKTtcbiAxNjQ6XHRcbiAxNjU6XHRcdGtyZWNvcmQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm87XG4gMTY2Olx0XHRpbmZvX2F1eCA9IGt6YWxsb2Nfb2JqcygqaW5mb19hdXgsIG5mdW5jcyxcbiAxNjc6XHRcdFx0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gMTY4Olx0XHRpZiAoIWluZm9fYXV4KVxuIDE2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNzA6XHRcbiAxNzE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mdW5jczsgaSYjNDM7JiM0MzspIHtcbiAxNzI6XHRcdFx0LyogY2hlY2sgaW5zbl9vZmYgKi9cbiAxNzM6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgIT0ga3JlY29yZFtpXS5pbnNuX29mZikge1xuIDE3NjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmdW5jX2luZm8gQlRGIHNlY3Rpb24gZG9lc24mIzM5O3QgbWF0Y2ggc3VicHJvZyBsYXlvdXQgaW4gQlBGIHByb2dyYW1cXG5cJiMzNDspO1xuIDE3NzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTc4Olx0XHRcdH1cbiAxNzk6XHRcbiAxODA6XHRcdFx0LyogQWxyZWFkeSBjaGVja2VkIHR5cGVfaWQgKi9cbiAxODE6XHRcdFx0dHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0Ziwga3JlY29yZFtpXS50eXBlX2lkKTtcbiAxODI6XHRcdFx0aW5mb19hdXhbaV0ubGlua2FnZSA9IEJURl9JTkZPX1ZMRU4odHlwZS1cdTAwM2VpbmZvKTtcbiAxODM6XHRcdFx0LyogQWxyZWFkeSBjaGVja2VkIGZ1bmNfcHJvdG8gKi9cbiAxODQ6XHRcdFx0ZnVuY19wcm90byA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgdHlwZS1cdTAwM2V0eXBlKTtcbiAxODU6XHRcbiAxODY6XHRcdFx0cmV0X3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG4gMTg3Olx0XHRcdHNjYWxhcl9yZXR1cm4gPVxuIDE4ODpcdFx0XHRcdGJ0Zl90eXBlX2lzX3NtYWxsX2ludChyZXRfdHlwZSkgfHwgYnRmX2lzX2FueV9lbnVtKHJldF90eXBlKTtcbiAxODk6XHRcdFx0aWYgKGkgXHUwMDI2XHUwMDI2ICFzY2FsYXJfcmV0dXJuIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnMpIHtcbiAxOTA6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7TERfQUJTIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJiMzOTtpbnQmIzM5Oy5cXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTkyOlx0XHRcdH1cbiAxOTM6XHRcdFx0aWYgKGkgXHUwMDI2XHUwMDI2ICFzY2FsYXJfcmV0dXJuIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc190YWlsX2NhbGwpIHtcbiAxOTQ6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dGFpbF9jYWxsIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJiMzOTtpbnQmIzM5Oy5cXG5cJiMzNDspO1xuIDE5NTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTk2Olx0XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4gMTk5Olx0XHRcdGJwZnB0cl9hZGQoXHUwMDI2dXJlY29yZCwgdXJlY19zaXplKTtcbiAyMDA6XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXggPSBpbmZvX2F1eDtcbiAyMDM6XHRcdHJldHVybiAwO1xuIDIwNDpcdFxuIDIwNTpcdGVycl9mcmVlOlxuIDIwNjpcdFx0a2ZyZWUoaW5mb19hdXgpO1xuIDIwNzpcdFx0cmV0dXJuIHJldDtcbiAyMDg6XHR9XG4gMjA5Olx0XG4gMjEwOlx0I2RlZmluZSBNSU5fQlBGX0xJTkVJTkZPX1NJWkVcdG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbGluZV9pbmZvLCBsaW5lX2NvbClcbiAyMTE6XHQjZGVmaW5lIE1BWF9MSU5FSU5GT19SRUNfU0laRVx0TUFYX0ZVTkNJTkZPX1JFQ19TSVpFXG4gMjEyOlx0XG4gMjEzOlx0c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDIxNDpcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gMjE1Olx0XHRcdFx0ICBicGZwdHJfdCB1YXR0cilcbiAyMTY6XHR7XG4gMjE3Olx0XHR1MzIgaSwgcywgbnJfbGluZm8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSwgcHJldl9vZmZzZXQgPSAwO1xuIDIxODpcdFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YjtcbiAyMTk6XHRcdHN0cnVjdCBicGZfbGluZV9pbmZvICpsaW5mbztcbiAyMjA6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiAyMjE6XHRcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcbiAyMjI6XHRcdGJwZnB0cl90IHVsaW5mbztcbiAyMjM6XHRcdGludCBlcnI7XG4gMjI0Olx0XG4gMjI1Olx0XHRucl9saW5mbyA9IGF0dHItXHUwMDNlbGluZV9pbmZvX2NudDtcbiAyMjY6XHRcdGlmICghbnJfbGluZm8pXG4gMjI3Olx0XHRcdHJldHVybiAwO1xuIDIyODpcdFx0aWYgKG5yX2xpbmZvIFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBicGZfbGluZV9pbmZvKSlcbiAyMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZWNfc2l6ZSA9IGF0dHItXHUwMDNlbGluZV9pbmZvX3JlY19zaXplO1xuIDIzMjpcdFx0aWYgKHJlY19zaXplIFx1MDAzYyBNSU5fQlBGX0xJTkVJTkZPX1NJWkUgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEJURiBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgY2hlY2tfYnRmX2Z1bmNgIGlzIHJlbHlpbmcgb24gYGVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnNgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBaCwgdGhhdCYjMzk7cyB3aHkgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCB3YXMgc3BsaXQgb2ZmIGZyb20gYGNoZWNrX3N1YnByb2dzYCBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBmbGFnIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgYWxsb3dzIGBjaGVja19idGZfZnVuY2AgdG8gZWZmaWNpZW50bHkgdXNlIHRoZSBwcmVjb21wdXRlZCBpbmZvcm1hdGlvbi4KCkhvd2V2ZXIsIGEgcG90ZW50aWFsIHByb2JsZW0gaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGFsc28gcGVyZm9ybXMgZXNzZW50aWFsIHZhbGlkYXRpb24gbGlrZSBjaGVja2luZyBmb3IgaW52YWxpZCBqdW1wcyBhbmQgZmFsbHRocm91Z2hzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpZiBJIG1vdmUgYGNoZWNrX3N1YnByb2dzYCAqYWZ0ZXIqIGBicGZfY2hlY2tfYnRmX2luZm9gLCB3aWxsIHRoYXQgY3JlYXRlIGFuIGlzc3VlPyBXb3VsZCBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBwb3RlbnRpYWxseSBwcm9jZXNzIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGludmFsaWQganVtcCBpbnN0cnVjdGlvbnM/IEkgbmVlZCB0byBrbm93IGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIGNhcmVzIGFib3V0IHRob3NlIHBhcnRpY3VsYXIgY2hlY2tzLgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHdoYXQgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgZG9lcy4gYGNoZWNrX2J0Zl9mdW5jYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBgbmZ1bmNzYCwgY2hlY2tpbmcgdGhlIGBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydGAgdmFsdWUuIFRoZW4sIEkgc2VlIGBjaGVja19idGZfbGluZWAgaXRlcmF0ZXMgdGhyb3VnaCBgbnJfbGluZm9gIGFuZCBmb2N1c2VzIG9uIHZlcmlmeWluZyBgbGluZm9baV0uaW5zbl9vZmZgLiBMZXQgbWUgbm93IGNoZWNrIGBjaGVja19idGZfbGluZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jaGVja19idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMzpcdFx0ICAgIHJlY19zaXplIFx1MDAzZSBNQVhfTElORUlORk9fUkVDX1NJWkUgfHxcbiAyMzQ6XHRcdCAgICByZWNfc2l6ZSBcdTAwMjYgKHNpemVvZih1MzIpIC0gMSkpXG4gMjM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzNjpcdFxuIDIzNzpcdFx0LyogTmVlZCB0byB6ZXJvIGl0IGluIGNhc2UgdGhlIHVzZXJzcGFjZSBtYXlcbiAyMzg6XHRcdCAqIHBhc3MgaW4gYSBzbWFsbGVyIGJwZl9saW5lX2luZm8gb2JqZWN0LlxuIDIzOTpcdFx0ICovXG4gMjQwOlx0XHRsaW5mbyA9IGt2emFsbG9jX29ianMoc3RydWN0IGJwZl9saW5lX2luZm8sIG5yX2xpbmZvLFxuIDI0MTpcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gMjQyOlx0XHRpZiAoIWxpbmZvKVxuIDI0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZztcbiAyNDY6XHRcdGJ0ZiA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWJ0ZjtcbiAyNDc6XHRcbiAyNDg6XHRcdHMgPSAwO1xuIDI0OTpcdFx0c3ViID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiAyNTA6XHRcdHVsaW5mbyA9IG1ha2VfYnBmcHRyKGF0dHItXHUwMDNlbGluZV9pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xuIDI1MTpcdFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbyk7XG4gMjUyOlx0XHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDI1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbGluZm87IGkmIzQzOyYjNDM7KSB7XG4gMjU0Olx0XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbiAyNTU6XHRcdFx0aWYgKGVycikge1xuIDI1NjpcdFx0XHRcdGlmIChlcnIgPT0gLUUyQklHKSB7XG4gMjU3Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bm9uemVybyB0YWlsaW5nIHJlY29yZCBpbiBsaW5lX2luZm9cJiMzNDspO1xuIDI1ODpcdFx0XHRcdFx0aWYgKGNvcHlfdG9fYnBmcHRyX29mZnNldCh1YXR0cixcbiAyNTk6XHRcdFx0XHRcdFx0XHRcdCAgb2Zmc2V0b2YodW5pb24gYnBmX2F0dHIsIGxpbmVfaW5mb19yZWNfc2l6ZSksXG4gMjYwOlx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmV4cGVjdGVkX3NpemUsIHNpemVvZihleHBlY3RlZF9zaXplKSkpXG4gMjYxOlx0XHRcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gMjYyOlx0XHRcdFx0fVxuIDI2MzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjY0Olx0XHRcdH1cbiAyNjU6XHRcbiAyNjY6XHRcdFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXHUwMDI2bGluZm9baV0sIHVsaW5mbywgbmNvcHkpKSB7XG4gMjY3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAyNjg6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDI2OTpcdFx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRcdC8qXG4gMjcyOlx0XHRcdCAqIENoZWNrIGluc25fb2ZmIHRvIGVuc3VyZVxuIDI3MzpcdFx0XHQgKiAxKSBzdHJpY3RseSBpbmNyZWFzaW5nIEFORFxuIDI3NDpcdFx0XHQgKiAyKSBib3VuZGVkIGJ5IHByb2ctXHUwMDNlbGVuXG4gMjc1Olx0XHRcdCAqXG4gMjc2Olx0XHRcdCAqIFRoZSBsaW5mb1swXS5pbnNuX29mZiA9PSAwIGNoZWNrIGxvZ2ljYWxseSBmYWxscyBpbnRvXG4gMjc3Olx0XHRcdCAqIHRoZSBsYXRlciBcJiMzNDttaXNzaW5nIGJwZl9saW5lX2luZm8gZm9yIGZ1bmMuLi5cJiMzNDsgY2FzZVxuIDI3ODpcdFx0XHQgKiBiZWNhdXNlIHRoZSBmaXJzdCBsaW5mb1swXS5pbnNuX29mZiBtdXN0IGJlIHRoZVxuIDI3OTpcdFx0XHQgKiBmaXJzdCBzdWIgYWxzbyBhbmQgdGhlIGZpcnN0IHN1YiBtdXN0IGhhdmVcbiAyODA6XHRcdFx0ICogc3VicHJvZ19pbmZvWzBdLnN0YXJ0ID09IDAuXG4gMjgxOlx0XHRcdCAqL1xuIDI4MjpcdFx0XHRpZiAoKGkgXHUwMDI2XHUwMDI2IGxpbmZvW2ldLmluc25fb2ZmIFx1MDAzYz0gcHJldl9vZmZzZXQpIHx8XG4gMjgzOlx0XHRcdCAgICBsaW5mb1tpXS5pbnNuX29mZiBcdTAwM2U9IHByb2ctXHUwMDNlbGVuKSB7XG4gMjg0Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0ludmFsaWQgbGluZV9pbmZvWyV1XS5pbnNuX29mZjoldSAocHJldl9vZmZzZXQ6JXUgcHJvZy1cdTAwM2VsZW46JXUpXFxuXCYjMzQ7LFxuIDI4NTpcdFx0XHRcdFx0aSwgbGluZm9baV0uaW5zbl9vZmYsIHByZXZfb2Zmc2V0LFxuIDI4NjpcdFx0XHRcdFx0cHJvZy1cdTAwM2VsZW4pO1xuIDI4NzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjg4Olx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyODk6XHRcdFx0fVxuIDI5MDpcdFxuIDI5MTpcdFx0XHRpZiAoIXByb2ctXHUwMDNlaW5zbnNpW2xpbmZvW2ldLmluc25fb2ZmXS5jb2RlKSB7XG4gMjkyOlx0XHRcdFx0dmVyYm9zZShlbnYsXG4gMjkzOlx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGluc24gY29kZSBhdCBsaW5lX2luZm9bJXVdLmluc25fb2ZmXFxuXCYjMzQ7LFxuIDI5NDpcdFx0XHRcdFx0aSk7XG4gMjk1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAyOTY6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDI5NzpcdFx0XHR9XG4gMjk4Olx0XG4gMjk5Olx0XHRcdGlmICghYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0ubGluZV9vZmYpIHx8XG4gMzAwOlx0XHRcdCAgICAhYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0uZmlsZV9uYW1lX29mZikpIHtcbiAzMDE6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCBsaW5lX2luZm9bJXVdLmxpbmVfb2ZmIG9yIC5maWxlX25hbWVfb2ZmXFxuXCYjMzQ7LCBpKTtcbiAzMDI6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMwMzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMzA0Olx0XHRcdH1cbiAzMDU6XHRcbiAzMDY6XHRcdFx0aWYgKHMgIT0gZW52LVx1MDAzZXN1YnByb2dfY250KSB7XG4gMzA3Olx0XHRcdFx0aWYgKGxpbmZvW2ldLmluc25fb2ZmID09IHN1YltzXS5zdGFydCkge1xuIDMwODpcdFx0XHRcdFx0c3ViW3NdLmxpbmZvX2lkeCA9IGk7XG4gMzA5Olx0XHRcdFx0XHRzJiM0MzsmIzQzOztcbiAzMTA6XHRcdFx0XHR9IGVsc2UgaWYgKHN1YltzXS5zdGFydCBcdTAwM2MgbGluZm9baV0uaW5zbl9vZmYpIHtcbiAzMTE6XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDttaXNzaW5nIGJwZl9saW5lX2luZm8gZm9yIGZ1bmMjJXVcXG5cJiMzNDssIHMpO1xuIDMxMjpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMTM6XHRcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMzE0Olx0XHRcdFx0fVxuIDMxNTpcdFx0XHR9XG4gMzE2Olx0XG4gMzE3Olx0XHRcdHByZXZfb2Zmc2V0ID0gbGluZm9baV0uaW5zbl9vZmY7XG4gMzE4Olx0XHRcdGJwZnB0cl9hZGQoXHUwMDI2dWxpbmZvLCByZWNfc2l6ZSk7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRpZiAocyAhPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQpIHtcbiAzMjI6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgJXUgZnVuY3Mgc3RhcnRpbmcgZnJvbSBmdW5jIyV1XFxuXCYjMzQ7LFxuIDMyMzpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX2NudCAtIHMsIHMpO1xuIDMyNDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMyNTpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDMyNjpcdFx0fVxuIDMyNzpcdFxuIDMyODpcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlbGluZm8gPSBsaW5mbztcbiAzMjk6XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZW5yX2xpbmZvID0gbnJfbGluZm87XG4gMzMwOlx0XG4gMzMxOlx0XHRyZXR1cm4gMDtcbiAzMzI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBDb2RlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGEgY2VydGFpbiBjaGVjayBpcyBoYXBwZW5pbmcgd2hlcmUgaXQgaXMuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja19idGZfaW5mb2AgaXNuJiMzOTt0IGNvbmNlcm5lZCB3aXRoIGp1bXBzIG9yIGhvdyB0aGUgY29kZSBmbG93cyB3aXRoaW4gdGhlIHN1YnByb2dyYW1zLiBJdHMgcHJpbWFyeSBqb2Igc2VlbXMgdG8gYmUgdmFsaWRhdGluZyB0aGF0IHRoZSBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggdGhlIHN1YnByb2dyYW0gYm91bmRhcmllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpZGVudGlmaWVkIGJ5IGBhZGRfc3VicHJvZ3NgLiBTbywgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2Ug4oCTIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzIGludGVuZGVkIHRvIHByaW9yaXRpemUgcmVwb3J0aW5nIEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBzdWJwcm9ncmFtIGxheW91dC4gSXQgbWFrZXMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZXMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuCgpCdXQgd2FpdCwgYSBuYWdnaW5nIHF1ZXN0aW9uOiBkb2VzIGBicGZfY2hlY2tfYnRmX2luZm9gIGFjdHVhbGx5ICphcHBseSogQ08tUkUgcmVsb2NhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gSWYgaXQgZG9lcywgdGhlbiB0aGUgb3JkZXJpbmcgaXMgZXZlbiBtb3JlIGNyaXRpY2FsLiBUaW1lIHRvIGRpdmUgaW50byBgY2hlY2tfY29yZV9yZWxvYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMzOlx0ZXJyX2ZyZWU6XG4gMzM0Olx0XHRrdmZyZWUobGluZm8pO1xuIDMzNTpcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0I2RlZmluZSBNSU5fQ09SRV9SRUxPX1NJWkVcdHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbylcbiAzMzk6XHQjZGVmaW5lIE1BWF9DT1JFX1JFTE9fU0laRVx0TUFYX0ZVTkNJTkZPX1JFQ19TSVpFXG4gMzQwOlx0XG4gMzQxOlx0c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAzNDI6XHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiAzNDM6XHRcdFx0XHQgICBicGZwdHJfdCB1YXR0cilcbiAzNDQ6XHR7XG4gMzQ1Olx0XHR1MzIgaSwgbnJfY29yZV9yZWxvLCBuY29weSwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemU7XG4gMzQ2Olx0XHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyBjb3JlX3JlbG8gPSB7fTtcbiAzNDc6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuIDM0ODpcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmO1xuIDM0OTpcdFx0c3RydWN0IGJwZl9jb3JlX2N0eCBjdHggPSB7XG4gMzUwOlx0XHRcdC5sb2cgPSBcdTAwMjZlbnYtXHUwMDNlbG9nLFxuIDM1MTpcdFx0XHQuYnRmID0gYnRmLFxuIDM1MjpcdFx0fTtcbiAzNTM6XHRcdGJwZnB0cl90IHVfY29yZV9yZWxvO1xuIDM1NDpcdFx0aW50IGVycjtcbiAzNTU6XHRcbiAzNTY6XHRcdG5yX2NvcmVfcmVsbyA9IGF0dHItXHUwMDNlY29yZV9yZWxvX2NudDtcbiAzNTc6XHRcdGlmICghbnJfY29yZV9yZWxvKVxuIDM1ODpcdFx0XHRyZXR1cm4gMDtcbiAzNTk6XHRcdGlmIChucl9jb3JlX3JlbG8gXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKVxuIDM2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjE6XHRcbiAzNjI6XHRcdHJlY19zaXplID0gYXR0ci1cdTAwM2Vjb3JlX3JlbG9fcmVjX3NpemU7XG4gMzYzOlx0XHRpZiAocmVjX3NpemUgXHUwMDNjIE1JTl9DT1JFX1JFTE9fU0laRSB8fFxuIDM2NDpcdFx0ICAgIHJlY19zaXplIFx1MDAzZSBNQVhfQ09SRV9SRUxPX1NJWkUgfHxcbiAzNjU6XHRcdCAgICByZWNfc2l6ZSAlIHNpemVvZih1MzIpKVxuIDM2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjc6XHRcbiAzNjg6XHRcdHVfY29yZV9yZWxvID0gbWFrZV9icGZwdHIoYXR0ci1cdTAwM2Vjb3JlX3JlbG9zLCB1YXR0ci5pc19rZXJuZWwpO1xuIDM2OTpcdFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbyk7XG4gMzcwOlx0XHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDM3MTpcdFxuIDM3MjpcdFx0LyogVW5saWtlIGZ1bmNfaW5mbyBhbmQgbGluZV9pbmZvLCBjb3B5IGFuZCBhcHBseSBlYWNoIENPLVJFXG4gMzczOlx0XHQgKiByZWxvY2F0aW9uIHJlY29yZCBvbmUgYXQgYSB0aW1lLlxuIDM3NDpcdFx0ICovXG4gMzc1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jb3JlX3JlbG87IGkmIzQzOyYjNDM7KSB7XG4gMzc2Olx0XHRcdC8qIGZ1dHVyZSBwcm9vZmluZyB3aGVuIHNpemVvZihicGZfY29yZV9yZWxvKSBjaGFuZ2VzICovXG4gMzc3Olx0XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDM3ODpcdFx0XHRpZiAoZXJyKSB7XG4gMzc5Olx0XHRcdFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcbiAzODA6XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtub256ZXJvIHRhaWxpbmcgcmVjb3JkIGluIGNvcmVfcmVsb1wmIzM0Oyk7XG4gMzgxOlx0XHRcdFx0XHRpZiAoY29weV90b19icGZwdHJfb2Zmc2V0KHVhdHRyLFxuIDM4MjpcdFx0XHRcdFx0XHRcdFx0ICBvZmZzZXRvZih1bmlvbiBicGZfYXR0ciwgY29yZV9yZWxvX3JlY19zaXplKSxcbiAzODM6XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXhwZWN0ZWRfc2l6ZSwgc2l6ZW9mKGV4cGVjdGVkX3NpemUpKSlcbiAzODQ6XHRcdFx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAzODU6XHRcdFx0XHR9XG4gMzg2Olx0XHRcdFx0YnJlYWs7XG4gMzg3Olx0XHRcdH1cbiAzODg6XHRcbiAzODk6XHRcdFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXHUwMDI2Y29yZV9yZWxvLCB1X2NvcmVfcmVsbywgbmNvcHkpKSB7XG4gMzkwOlx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAzOTE6XHRcdFx0XHRicmVhaztcbiAzOTI6XHRcdFx0fVxuIDM5MzpcdFxuIDM5NDpcdFx0XHRpZiAoY29yZV9yZWxvLmluc25fb2ZmICUgOCB8fCBjb3JlX3JlbG8uaW5zbl9vZmYgLyA4IFx1MDAzZT0gcHJvZy1cdTAwM2VsZW4pIHtcbiAzOTU6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCBjb3JlX3JlbG9bJXVdLmluc25fb2ZmOiV1IHByb2ctXHUwMDNlbGVuOiV1XFxuXCYjMzQ7LFxuIDM5NjpcdFx0XHRcdFx0aSwgY29yZV9yZWxvLmluc25fb2ZmLCBwcm9nLVx1MDAzZWxlbik7XG4gMzk3Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzOTg6XHRcdFx0XHRicmVhaztcbiAzOTk6XHRcdFx0fVxuIDQwMDpcdFxuIDQwMTpcdFx0XHRlcnIgPSBicGZfY29yZV9hcHBseShcdTAwMjZjdHgsIFx1MDAyNmNvcmVfcmVsbywgaSxcbiA0MDI6XHRcdFx0XHRcdCAgICAgXHUwMDI2cHJvZy1cdTAwM2VpbnNuc2lbY29yZV9yZWxvLmluc25fb2ZmIC8gOF0pO1xuIDQwMzpcdFx0XHRpZiAoZXJyKVxuIDQwNDpcdFx0XHRcdGJyZWFrO1xuIDQwNTpcdFx0XHRicGZwdHJfYWRkKFx1MDAyNnVfY29yZV9yZWxvLCByZWNfc2l6ZSk7XG4gNDA2Olx0XHR9XG4gNDA3Olx0XHRyZXR1cm4gZXJyO1xuIDQwODpcdH1cbiA0MDk6XHRcbiA0MTA6XHRpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA0MTE6XHRcdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gNDEyOlx0XHRcdFx0IGJwZnB0cl90IHVhdHRyKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiA0MTU6XHRcdGludCBlcnI7XG4gNDE2Olx0XG4gNDE3Olx0XHRpZiAoIWF0dHItXHUwMDNlZnVuY19pbmZvX2NudCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNlbGluZV9pbmZvX2NudCkge1xuIDQxODpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gNDE5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIwOlx0XHRcdHJldHVybiAwO1xuIDQyMTpcdFx0fVxuIDQyMjpcdFxuIDQyMzpcdFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVx1MDAzZXByb2dfYnRmX2ZkKTtcbiA0MjQ6XHRcdGlmIChJU19FUlIoYnRmKSlcbiA0MjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnRmKTtcbiA0MjY6XHRcdGlmIChidGZfaXNfa2VybmVsKGJ0ZikpIHtcbiA0Mjc6XHRcdFx0YnRmX3B1dChidGYpO1xuIDQyODpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiA0Mjk6XHRcdH1cbiA0MzA6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGYgPSBidGY7XG4gNDMxOlx0XG4gNDMyOlx0XHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFZlcmlmaWVyIERpYWdub3N0aWMgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIGBicGZfY29yZV9hcHBseWAgY291bGQgaW1wYWN0IGBjaGVja19zdWJwcm9nc2AsIHdoaWNoIGRlYWxzIHdpdGggc3VicHJvZ3JhbSBib3VuZGFyaWVzIGFuZCBqdW1wcy4gU2luY2UgQ08tUkUgcmVsb2NhdGlvbnMgcHJpbWFyaWx5IHRvdWNoIHRoZSBgaW1tYCBmaWVsZCBhbmQgbm90IGp1bXAgb2Zmc2V0cyBvciBvcGNvZGVzIChleGNlcHQgZm9yIE5PUHMgb3IgZGlyZWN0IHZhbHVlIGxvYWRzKSwgSSBmaWd1cmVkIGBjaGVja19zdWJwcm9nc2Agc2hvdWxkIHN0aWxsIGJlIHNhZmUgdG8gcnVuIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gLiBUaGUgcG90ZW50aWFsIGZvciBhIE5PUCwgd2hpbGUgYSB2YWxpZCBhbHRlcmF0aW9uLCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWx0ZXIganVtcHMuCgpOZXh0LCBJIGxvb2tlZCBmb3IgYW55IG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcyBiZXlvbmQgdGhpcyByZW9yZGVyaW5nLiBUaGUgY29tbWl0IGxvZyBhbmQgdGhlIGNvZGUgY2hhbmdlcyBwb2ludCBhbG1vc3QgZW50aXJlbHkgdG93YXJkIGltcHJvdmVkIGRpYWdub3N0aWNzIOKAkyBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMsIGNsZWFyZXIgaGludHMsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIG1haW4gc3RydWN0dXJhbCBzaGlmdCBpcyB0aGUgbW92ZSBvZiBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgJiMzNDtzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IHRoYXQgd2FycmFudHMgZnV6emluZz8gVGhlIGhpbnQgaXMgaGVscGZ1bC4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGVzc2VudGlhbGx5IGltcHJvdmVkIGxvZ2dpbmcgYW5kIGVycm9yIHJlcG9ydGluZywgYW5kIHRoZXkgZG9uJiMzOTt0IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiAqdmFsaWQqIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb24gaW52YWxpZCBwcm9ncmFtcyBhbmQgdGhlIHZlcmlmaWVyIGl0c2VsZi4gVGhlIGNoYW5nZSBhbHRlcnMgdGhlIHZlcmlmaWVyJiMzOTtzIGZhaWx1cmUgcGF0aCwgYnV0IHRoZSBmdW5kYW1lbnRhbCBjaGVja3MgcmVtYWluIHRoZSBzYW1lLgoKQSBrZXkgcG9pbnQgaXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIHJlb3JkZXJpbmc6IHByaW9yaXRpemUgQlRGIGFuZCBDTy1SRSBlcnJvcnMgKmJlZm9yZSogc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGUgaWRlYSBpcyB0byBnaXZlIHVzZXJzIHRoZSBtb3N0IHJlbGV2YW50IGVycm9yIG1lc3NhZ2VzIGZpcnN0LiBUaGlzIG1ha2VzIHRoZSB1c2VyIGV4cGVyaWVuY2UgYmV0dGVyIHdpdGggZXJyb3IgbWVzc2FnZXMuIEV2ZW4gaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggc3VicHJvZ3JhbSBsYXlvdXQgYW5kIENPLVJFL0JURiwgdGhpcyBwcmlvcml0aXplcyB0aGUgQ08tUkUvQlRGIGVycm9yLiBUaGUgdmVyaWZpZXImIzM5O3MgZXhlY3V0aW9uIHBhdGggaXMgZGlmZmVyZW50IGluIHRoYXQgaXQgd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgZXJyb3IgYW5kIHByb2R1Y2UgYSBkaWZmZXJlbnQgbG9nIG91dHB1dC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgKnBvdGVudGlhbCogZm9yIGNyYXNoZXMuIEkgcmV2aWV3ZWQgdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIEJURiBjaGVja2luZyBjb2RlIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJhbCBjaGVja3MgcGVyZm9ybWVkIGJ5IGBjaGVja19zdWJwcm9nc2AsIHNvIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhIHJpc2sgb2YgYSBjcmFzaCBpbiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4KCkdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyB0aGUgZXhwbGljaXQgZ3VpZGFuY2UgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBkaWFnbm9zdGljIGFuZCBlcnJvciBtZXNzYWdlIGltcHJvdmVtZW50cywgSSB0aGluayB0aGUgYW5zd2VyIGlzIGNsZWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzM6XHRcbjMwMzQ6XHRzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDM1Olx0e1xuMzAzNjpcdFx0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbjMwMzc6XHRcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbjMwMzg6XHRcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbjMwMzk6XHRcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbjMwNDA6XHRcbjMwNDE6XHRcdC8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi9cbjMwNDI6XHRcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbjMwNDM6XHRcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbjMwNDQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOykge1xuMzA0NTpcdFx0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuMzA0NjpcdFxuMzA0NzpcdFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAgXHUwMDI2XHUwMDI2IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpXG4zMDQ4Olx0XHRcdFx0Z290byBuZXh0O1xuMzA0OTpcdFx0XHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxuMzA1MDpcdFx0XHRcdGdvdG8gbmV4dDtcbjMwNTE6XHRcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfRVhJVCkge1xuMzA1MjpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmV4aXRfaWR4ID0gaTtcbjMwNTM6XHRcdFx0XHRnb3RvIG5leHQ7XG4zMDU0Olx0XHRcdH1cbjMwNTU6XHRcdFx0b2ZmID0gaSAmIzQzOyBicGZfam1wX29mZnNldChcdTAwMjZpbnNuW2ldKSAmIzQzOyAxO1xuMzA1NjpcdFx0XHRpZiAob2ZmIFx1MDAzYyBzdWJwcm9nX3N0YXJ0IHx8IG9mZiBcdTAwM2U9IHN1YnByb2dfZW5kKSB7XG4zMDU3Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2p1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAlZCB0byAlZFxcblwmIzM0OywgaSwgb2ZmKTtcbjMwNTg6XHRcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbjMwNTk6XHRcdFx0XHRcdGVudiwgaSwgXCYjMzQ7anVtcCBvdXQgb2YgcmFuZ2VcJiMzNDssXG4zMDYwOlx0XHRcdFx0XHRcJiMzNDtLZWVwIGJyYW5jaCB0YXJnZXRzIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9ncmFtLCBvciB1c2UgYW4gZXhwbGljaXQgc3VicHJvZ3JhbSBjYWxsLlwmIzM0OyxcbjMwNjE6XHRcdFx0XHRcdFwmIzM0O0luc3RydWN0aW9uICVkIGp1bXBzIHRvIGluc3RydWN0aW9uICVkLCBidXQgc3VicHJvZ3JhbSAlZCBvbmx5IGNvbnRhaW5zIGluc3RydWN0aW9ucyAlZCB0aHJvdWdoICVkLiBcJiMzNDtcbjMwNjI6XHRcdFx0XHRcdFwmIzM0O0EgYnJhbmNoIHRhcmdldCBtdXN0IHN0YXkgaW5zaWRlIHRoZSBzYW1lIHN1YnByb2dyYW0uXCYjMzQ7LFxuMzA2MzpcdFx0XHRcdFx0aSwgb2ZmLCBjdXJfc3VicHJvZywgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQgLSAxKTtcbjMwNjQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwNjU6XHRcdFx0fVxuMzA2NjpcdG5leHQ6XG4zMDY3Olx0XHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuMzA2ODpcdFx0XHRcdC8qXG4zMDY5Olx0XHRcdFx0ICogVG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyLFxuMzA3MDpcdFx0XHRcdCAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0XG4zMDcxOlx0XHRcdFx0ICogb3IgdW5jb25kaXRpb25hbCBqdW1wIGJhY2sgb3IgYnBmX3Rocm93IGNhbGwuXG4zMDcyOlx0XHRcdFx0ICovXG4zMDczOlx0XHRcdFx0aWYgKGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkgXHUwMDI2XHUwMDI2XG4zMDc0Olx0XHRcdFx0ICAgIGNvZGUgIT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkgXHUwMDI2XHUwMDI2XG4zMDc1Olx0XHRcdFx0ICAgIGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XG4zMDc2Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcblwmIzM0Oyk7XG4zMDc3Olx0XHRcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbjMwNzg6XHRcdFx0XHRcdFx0ZW52LCBpLCBcJiMzNDtzdWJwcm9ncmFtIGNhbiBmYWxsIHRocm91Z2hcJiMzNDssXG4zMDc5Olx0XHRcdFx0XHRcdFwmIzM0O0VuZCBlYWNoIHN1YnByb2dyYW0gd2l0aCBhbiBleGl0IG9yIGFuIGV4cGxpY2l0IGp1bXAgdGhhdCBrZWVwcyBjb250cm9sIGZsb3cgaW5zaWRlIHRoZSBzdWJwcm9ncmFtLlwmIzM0OyxcbjMwODA6XHRcdFx0XHRcdFx0XCYjMzQ7U3VicHJvZ3JhbSAlZCByZWFjaGVzIGl0cyBsYXN0IGluc3RydWN0aW9uICVkIHdpdGhvdXQgYW4gZXhpdCBvciBqdW1wLCBzbyBjb250cm9sIGNvdWxkIGNvbnRpbnVlIGludG8gdGhlIG5leHQgc3VicHJvZ3JhbS5cJiMzNDssXG4zMDgxOlx0XHRcdFx0XHRcdGN1cl9zdWJwcm9nLCBpKTtcbjMwODI6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzA4MzpcdFx0XHRcdH1cbjMwODQ6XHRcdFx0XHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ19lbmQ7XG4zMDg1Olx0XHRcdFx0Y3VyX3N1YnByb2cmIzQzOyYjNDM7O1xuMzA4NjpcdFx0XHRcdGlmIChjdXJfc3VicHJvZyBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250KVxuMzA4NzpcdFx0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0O1xuMzA4ODpcdFx0XHR9XG4zMDg5Olx0XHR9XG4zMDkwOlx0XHRyZXR1cm4gMDtcbjMwOTE6XHR9XG4zMDkyOlx0XG4zMDkzOlx0LypcbjMwOTQ6XHQgKiBTb3J0IHN1YnByb2dzIGluIHRvcG9sb2dpY2FsIG9yZGVyIHNvIHRoYXQgbGVhZiBzdWJwcm9ncyBjb21lIGZpcnN0IGFuZFxuMzA5NTpcdCAqIHRoZWlyIGNhbGxlcnMgY29tZSBsYXRlci4gVGhpcyBpcyBhIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgY2FsbFxuMzA5NjpcdCAqIGdyYXBoLiBTY2FuIG9ubHkgcmVhY2hhYmxlIGluc3RydWN0aW9ucyAodGhvc2UgaW4gdGhlIGNvbXB1dGVkIHBvc3RvcmRlcikgb2ZcbjMwOTc6XHQgKiB0aGUgY3VycmVudCBzdWJwcm9nIHRvIGRpc2NvdmVyIGNhbGxlZXMgKGRpcmVjdCBzdWJwcm9ncyBhbmQgc3luY1xuMzA5ODpcdCAqIGNhbGxiYWNrcykuXG4zMDk5Olx0ICovXG4zMTAwOlx0c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbjMxMDE6XHR7XG4zMTAyOlx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuMzEwMzpcdFx0aW50ICppbnNuX3Bvc3RvcmRlciA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XG4zMTA0Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMTA1Olx0XHRpbnQgY250ID0gZW52LVx1MDAzZXN1YnByb2dfY250O1xuMzEwNjpcdFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xuMzEwNzpcdFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcbjMxMDg6XHRcdGludCBpLCByZXQgPSAwO1xuMzEwOTpcdFx0dTggKmNvbG9yID0gTlVMTDtcbjMxMTA6XHRcbjMxMTE6XHRcdGNvbG9yID0ga3Z6YWxsb2Nfb2JqcygqY29sb3IsIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjMxMTI6XHRcdGRmc19zdGFjayA9IGt2bWFsbG9jX29ianMoKmRmc19zdGFjaywgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuMzExMzpcdFx0aWYgKCFjb2xvciB8fCAhZGZzX3N0YWNrKSB7XG4zMTE0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4zMTE1Olx0XHRcdGdvdG8gb3V0O1xuMzExNjpcdFx0fVxuMzExNzpcdFxuMzExODpcdFx0LypcbjMxMTk6XHRcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cbjMxMjA6XHRcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cbjMxMjE6XHRcdCAqL1xuMzEyMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzEyMzpcdFx0XHRpZiAoY29sb3JbaV0pXG4zMTI0Olx0XHRcdFx0Y29udGludWU7XG4zMTI1Olx0XHRcdGNvbG9yW2ldID0gMTtcbjMxMjY6XHRcdFx0ZGZzX3N0YWNrW3RvcCYjNDM7JiM0MztdID0gaTtcbjMxMjc6XHRcbjMxMjg6XHRcdFx0d2hpbGUgKHRvcCBcdTAwM2UgMCkge1xuMzEyOTpcdFx0XHRcdGludCBjdXIgPSBkZnNfc3RhY2tbdG9wIC0gMV07XG4zMTMwOlx0XHRcdFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTMxOlx0XHRcdFx0aW50IHBvX2VuZCA9IHNpW2N1ciAmIzQzOyAxXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTMyOlx0XHRcdFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnVuY3Rpb25hbCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIGEgQlBGIHZlcmlmaWVyIHBhdGNoIHRvIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24sIGJhc2VkIG9uIHRoZSBkaWZmLCBpcyB0aGF0IHRoaXMgaXMgbGFyZ2VseSBhYm91dCBkaWFnbm9zdGljcyBhbmQgZXJyb3IgcmVwb3J0aW5nLCB3aXRoIHNvbWUgY29kZSByZW9yZ2FuaXphdGlvbiB0byBzdXBwb3J0IHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIHJpZ29yb3VzbHkuCgpGaXJzdCwgdGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVvcmRlcmluZyBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuICBgY2hlY2tfc3VicHJvZ3NgIHZhbGlkYXRlcyBqdW1wIGJvdW5kYXJpZXMgd2l0aGluIHN1YnByb2dyYW1zLCB3aGlsZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB1c2VzIEJURiBpbmZvcm1hdGlvbiB0byBlbnN1cmUgY29ycmVjdG5lc3MuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHJlb3JkZXJpbmcgKmNoYW5nZXMqIGhvdyB2YWxpZCBwcm9ncmFtcyBhcmUgdHJlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0ICppbnRyb2R1Y2UqIG5ldyBjaGVja3Mgd2l0aGluIGBicGZfY2hlY2tfYnRmX2luZm9gLCBpdCYjMzk7cyBwcmltYXJpbHkgZW5zdXJpbmcgdGhhdCBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggc3VicHJvZ3JhbSBkZWZpbml0aW9ucyBkaXNjb3ZlcmVkIGluIGBhZGRfc3VicHJvZ3NgLCB3aGljaCBpbiB0dXJuIGlzIGJhc2VkIG9uIGBDQUxMYCBpbnN0cnVjdGlvbnMuIFRoZXJlZm9yZSwgYXNzdW1pbmcgdGhlIEJURiBtZXRhZGF0YSByZW1haW5zIGNvbnNpc3RlbnQgYW5kIHRoZSByZW9yZGVyaW5nIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyByZWFkL2ludGVycHJldGVkLCB0aGlzIHJlb3JkZXJpbmcgc2hvdWxkbiYjMzk7dCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgdmFsaWQgcHJvZ3JhbXMuIEkmIzM5O20gZm9jdXNpbmcgb24gJiMzNDtkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgKnZhbGlkKiBwcm9ncmFtcyYjMzQ7LCBhcyB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBkaWFnbm9zdGljcyBtaWdodCBpbmNyZWFzZSB0aGUgcmVqZWN0aW9uIG9mICppbnZhbGlkKiBwcm9ncmFtcyBvciwgbW9yZSBsaWtlbHksIHByb3ZpZGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciByZWplY3RlZCAqaW52YWxpZCogcHJvZ3JhbXMuCgpOZXh0LCBJIHNlZSBzZXZlcmFsIGRpYWdub3N0aWMgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHJlZmluZW1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIGZvciBzcGVjaWZpYyBrZnVuYyBhcmd1bWVudCBjaGVja3MuIFRoaXMgaXMgYmFzaWNhbGx5IGxvZ2dpbmcgYW5kIGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0IGlzIGFuZCBpc24mIzM5O3QgYWNjZXB0ZWQgYXMgdmFsaWQgQlBGIGNvZGUuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgb3Igc3BlY2lmaWMgYWJvdXQgKndoeSogYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGlzIGZhaWxpbmcgdmFsaWRhdGlvbi4KCkkmIzM5O20gYWxzbyBzZWVpbmcgaW1wcm92ZW1lbnRzIHRvIHRoZSBlcnJvciBtZXNzYWdlcyBhcm91bmQgc2xlZXBhYmxlIGtmdW5jIGNhbGxzIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdGhyb3dpbmcgYW4gYC1FQUNDRVNgIGVycm9yIGluIG11bHRpcGxlIHBsYWNlcyBmb3IgdmFyaW91cyBzY2VuYXJpb3MgKGEgcHJvZ3JhbSB0aGF0IHdhc24mIzM5O3Qgc2xlZXBhYmxlIGNhbGxpbmcgYSBzbGVlcGFibGUga2Z1bmMsIGEgcHJvZ3JhbSBjYWxsaW5nIGl0IGZyb20gaW5zaWRlIGFuIFJDVSByZWFkIGxvY2ssIGV0Yy4pLiBUaGVzZSBjaGFuZ2VzIGNvbnNvbGlkYXRlIHRoZSBjaGVja3MgYXJvdW5kIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCB0byBoYW5kbGUgYWxsIHRob3NlIHNpdHVhdGlvbnMgaW4gb25lIHBsYWNlLiBJIGR1ZyBpbiBhbmQgdmVyaWZpZWQgdGhhdCB0aGUgYmVoYXZpb3IgcmVtYWlucyB0aGUgc2FtZTogdGhlIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZC4gTm93IGl0IGlzIGp1c3QgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBzb21lIGNoZWNrcyBhcmUgc2tpcHBlZCB0aGF0IGRvbiYjMzk7dCBtYXR0ZXIgYmVjYXVzZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCBhbnl3YXkuIFRoZSAqb3JkZXIqIG9mIGVycm9yIHJlcG9ydGluZyAqaXMqIGNoYW5nZWQsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIHJlZmluZWQgdG8gc3VnZ2VzdCBob3cgdG8gZml4IHRoZSBwcm9ibGVtIG1vcmUgY2xlYXJseS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCB0aGUgYWNjZXB0YW5jZSBvZiB2YWxpZCBwcm9ncmFtcy4KCkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgYmVjYXVzZSBpdCB3YXMgbmV3IGluIHRoZSBkaWZmLiBUaGlzIGZ1bmN0aW9uIHBvcHVsYXRlcyBgaGFzX2xkX2Fic2AgZm9yIGVhY2ggc3VicHJvZ3JhbS4gVGhpcyBpcyByZXF1aXJlZCBieSBgY2hlY2tfYnRmX2Z1bmNgIHNvIHRoYXQgaXQgZG9lc24mIzM5O3QgYWxsb3cgTERfQUJTIGluc3RydWN0aW9ucyBpbiBmdW5jdGlvbnMgdGhhdCBkb24mIzM5O3QgcmV0dXJuIGFuIGludC4gVGhlIG5ldyBmdW5jdGlvbiBpcyAqZXhhY3RseSogdGhlIHNhbWUgbG9naWMgYXMgd2hhdCB3YXMgaW4gYGNoZWNrX3N1YnByb2dzYCBvcmlnaW5hbGx5LiBJdHMgcHVycG9zZSBpcyB0byBwcmUtY2FsY3VsYXRlIGBoYXNfbGRfYWJzYCBiZWZvcmUgYGJwZl9jaGVja19idGZfaW5mb2AgaXMgcnVuIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVvcmRlcmluZy4KCkJhc2VkIG9uIGFsbCB0aGlzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgb2YgdGhlIGZ1bmRhbWVudGFsIGNoZWNrcyB0aGF0ICp3b3VsZCBhbGxvdyogdmFsaWQgcHJvZ3JhbXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVqZWN0ZWQsIG9yICpyZWplY3QqIHByb2dyYW1zIHRoYXQgd2VyZSBwcmV2aW91c2x5IHZhbGlkLiBBbGwgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZm9yIGltcHJvdmVkIGRpYWdub3N0aWMgbWVzc2FnaW5nIGFuZCBpbXByb3ZlZCBjb2RlIHN0cnVjdHVyZSB0byBlbnN1cmUgdGhhdCBiZXR0ZXIgZXJyb3IgbWVzc2FnaW5nIGNhbiBiZSBwcm92aWRlZC4gVGhpcyBwYXRjaCBpcyB0aGVyZWZvcmUgYWJvdXQgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc190YWlsX2NhbGwgPSB0cnVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMwMDY9c3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAxOS1cdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMwMjA6XHRcdFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX3RhaWxfY2FsbCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAyMS1cdFx0XHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGhhc190YWlsX2NhbGxgIEZsYWcgaW4gQlBGIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBJIHdhcyBqdXN0IHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCByZWFsaXplZCBJIG1pc3NlZCBzb21ldGhpbmcuIEkgdGhvdWdodCBgaGFzX3RhaWxfY2FsbGAgd2FzIHBvcHVsYXRlZCB3aXRoaW4gYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYC4gQnV0IGhvbGQgb24uLi4gdGhlIGNvZGUgZGlmZiBmb3IgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IHNob3cgaXQgYmVpbmcgc2V0IHRoZXJlISBJIHdhcyBzbyBzdXJlIEkgaGFkIHNlZW4gdGhhdCBmbGFnIGJlaW5nIHBvcHVsYXRlZCBkdXJpbmcgdGhhdCBmdW5jdGlvbi4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaC4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgZm9yIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgZXhwbGljaXRseSBzaG93cyBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGhhc190YWlsX2NhbGxgLiBUaGlzIGlzIHN0cmFuZ2UuCgpOb3cgSSBhbSBjdXJpb3VzLiBXaGVyZSBpcyBgaGFzX3RhaWxfY2FsbGAgYWN0dWFsbHkgYmVpbmcgc2V0PyBUaW1lIHRvIGxvb2sgYXQgdGhlIHJlYWwgc291cmNlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMzAyMCBhbmQgc2VlIHdoYXQgaXMgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAwNjpcdHN0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDA3Olx0e1xuMzAwODpcdFx0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XG4zMDA5Olx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4zMDEwOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMDExOlx0XHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4zMDEyOlx0XG4zMDEzOlx0XHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7XG4zMDE0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHtcbjMwMTU6XHRcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbjMwMTY6XHRcbjMwMTc6XHRcdFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXHUwMDI2XHUwMDI2XG4zMDE4Olx0XHRcdCAgICBpbnNuW2ldLnNyY19yZWcgPT0gMCBcdTAwMjZcdTAwMjZcbjMwMTk6XHRcdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuMzAyMDpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc190YWlsX2NhbGwgPSB0cnVlO1xuMzAyMTpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLnRhaWxfY2FsbF9yZWFjaGFibGUgPSB0cnVlO1xuMzAyMjpcdFx0XHR9XG4zMDIzOlx0XHRcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFx1MDAyNlx1MDAyNlxuMzAyNDpcdFx0XHQgICAgKEJQRl9NT0RFKGNvZGUpID09IEJQRl9BQlMgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX0lORCkpXG4zMDI1Olx0XHRcdFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX2xkX2FicyA9IHRydWU7XG4zMDI2Olx0XHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuMzAyNzpcdFx0XHRcdGN1cl9zdWJwcm9nJiM0MzsmIzQzOztcbjMwMjg6XHRcdFx0XHRpZiAoY3VyX3N1YnByb2cgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudClcbjMwMjk6XHRcdFx0XHRcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbjMwMzA6XHRcdFx0fVxuMzAzMTpcdFx0fVxuMzAzMjpcdH1cbjMwMzM6XHRcbjMwMzQ6XHRzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDM1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEzOAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxMDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGluaXRpYWxseSwgSSB3YXMgdGhyb3duIG9mZiBhIGJpdC4gSSB0aG91Z2h0IHRoZSBgaGFzX3RhaWxfY2FsbGAgY2hlY2sgd2FzIG1pc3NpbmcsIGJ1dCBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIHNvbWUgZXhpc3RpbmcgY29kZS4gVGhlIGtleSBpcyB0byBzZWUgdGhhdCB0aGUgYGhhc190YWlsX2NhbGxgIHBhcnQgd2FzICphbHJlYWR5KiBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBgY2hlY2tfc3VicHJvZ3NgIGZ1bmN0aW9uIGFuZCBzaW1wbHkgbW92ZWQgYWxvbmcgd2l0aCBgaGFzX2xkX2Fic2AgZHVyaW5nIHRoZSByZWZhY3RvciB0byBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLiBJdCB3YXNuJiMzOTt0IGFjdHVhbGx5IGEgbmV3IGFkZGl0aW9uLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCBiZWNhdXNlIGl0IHdhc24mIzM5O3QgZXhwbGljaXRseSBzaG93biBpbiB0aGUgZGlmZiwgYW5kIHdhcyBzaW1wbHkgcGFydCBvZiB0aGUgbG9vcC4KCk5vdywgbG9va2luZyBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUsIHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogYWJvdXQgaW1wcm92aW5nIHRoZSB2ZXJpZmllciYjMzk7cyBkaWFnbm9zdGljcy4gVGhlIGNoYW5nZXMgaW4gYGJwZl9jaGVja2AgYXJlIGp1c3QgYWJvdXQgcmVvcmRlcmluZyBjaGVja3MgYW5kIGluIGBpbl9zbGVlcGFibGVfY29udGV4dGAgaXMgYWJvdXQgdGhlIGVycm9yIHJlcG9ydGluZyBwYXRoLCBhbmQgYGJwZl9kaWFnXypgIGFyZSBwdXJlbHkgY29zbWV0aWMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBpdHNlbGYuIFZhbGlkIHByb2dyYW1zIHdpbGwgc3RpbGwgd29yayBhcyBiZWZvcmUsIGFuZCB0aGUgc2V0IG9mIGFjY2VwdGVkIHByb2dyYW1zIGlzIHVuY2hhbmdlZC4gVGhpcyBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLgoKVGhlIGZvY3VzIGhlcmUgaXMgZXJyb3IgbWVzc2FnZSBjbGFyaXR5IGFuZCBvcmRlciwgd2hpY2ggaXMgcmVhbGx5IGp1c3QgYW4gaW1wcm92ZW1lbnQgaW4gZGVidWdnaW5nLCByYXRoZXIgdGhhbiBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGNoYW5nZXMgaGVyZSBhcmUgZWZmZWN0aXZlbHkganVzdCBsb2dnaW5nL2Vycm9yIHJlcG9ydGluZyBlbmhhbmNlbWVudHMuIE15IHVuZGVyc3RhbmRpbmcgb2YgZnV6emluZyBpcyB0aGF0IGl0JiMzOTtzIG1lYW50IHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIG9yIGJ1Z3MsIHN1Y2ggYXMgbWVtb3J5IGNvcnJ1cHRpb24sIGNyYXNoZXMsIG9yIGxvZ2ljIGZsYXdzIGluICpleGVjdXRpb24qLgoKSSB3ZW50IGJhY2sgYW5kIHJldmlld2VkIHRoZSBwcm9tcHQsIGp1c3QgdG8gZG91YmxlLWNoZWNrLiBJdCBzYWlkIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZXJlIGFyZToKKiBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50IGNoYW5nZXMKKiBMb2dnaW5nIG9yIHRyYWNlcG9pbnQgY2hhbmdlcwoqIE51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBhbHRlciBleGVjdXRpb24gZmxvdy4KCkluIHRoaXMgY2FzZSwgdGhlIHZlcmlmaWVyIGRpYWdub3N0aWNzIGFyZSBlc3NlbnRpYWxseSBsb2dnaW5nL2Vycm9yIHJlcG9ydGluZy4gQ2hhbmdpbmcgdGhlICp0ZXh0KiBvZiBhbiBlcnJvciBtZXNzYWdlIG9yIHRoZSBvcmRlciBpbiB3aGljaCB0d28gdmFsaWRhdGlvbiBzdGVwcyBhcmUgcGVyZm9ybWVkIHdoZW4gYm90aCBtdXN0IHBhc3MgYW55d2F5IChyZWdhcmRsZXNzIG9mIG9yZGVyKSBkb2VzbiYjMzk7dCBjcmVhdGUgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJpY2F0ZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emluZy4gVGhlcmVmb3JlLCBubyBuZXcgYXR0YWNrIHN1cmZhY2UuCgpUaHVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpY3MuIEl0IHVwZGF0ZXMgZXJyb3IgbWVzc2FnZXMsIGFkZHMgaGludHMsIGFuZCByZW9yZGVycyB0aGUgQlRGIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcyB0byByZXBvcnQgQlRGL0NPLVJFIGVycm9ycyBiZWZvcmUgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGVzZSBhcmUgcHVyZWx5IGRlY29yYXRpdmUgYW5kIGRpYWdub3N0aWMgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciB0aGUgc2V0IG9mIGFjY2VwdGVkIEJQRiBwcm9ncmFtcyBvciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdmFsaWQgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpY3MuIEl0IHVwZGF0ZXMgZXJyb3IgbWVzc2FnZXMsIGFkZHMgaGludHMsIGFuZCByZW9yZGVycyB0aGUgQlRGIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcyB0byByZXBvcnQgQlRGL0NPLVJFIGVycm9ycyBiZWZvcmUgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGVzZSBhcmUgcHVyZWx5IGRlY29yYXRpdmUgYW5kIGRpYWdub3N0aWMgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciB0aGUgc2V0IG9mIGFjY2VwdGVkIEJQRiBwcm9ncmFtcyBvciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdmFsaWQgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MTYuMTkzMDI2MjcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjA2OTcwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MTYuMTkzMDMyMTcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc3MDMyOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTRjODg3MjliNDc2MzQ3Y2JiYzFmMTVlNGM4Mjk0NWI0MTc2NThmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtMTE2OSwxOSArMTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXFxuIFxcdFxcdFxcdGlkID0gdC1cXHUwMDNldHlwZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGlkID0gMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGdvdG8gcmVzb2x2ZWQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfcXVhbGlmaWVycyhzaG93LVxcdTAwM2VidGYsIGlkKTtcXG4gXFx0XFx0aWYgKCFpZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy1cXHUwMDNlYnRmLCBpZCk7XFxuIFxcdH1cXG4gXFx0LyogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIHJlcHJlc2VudCB0aGlzIHR5cGU7IGJhaWwgdG8gYmUgc2FmZSAqL1xcbiBcXHRpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUilcXG4gXFx0XFx0cmV0dXJuIFxcXCJcXFwiO1xcbiBcXG4rcmVzb2x2ZWQ6XFxuIFxcdGlmICghbmFtZSlcXG4tXFx0XFx0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzaG93LVxcdTAwM2VidGYsIHQtXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFx0XFx0bmFtZSA9IGJ0Zl90eXBlX2lzX3ZvaWQodCkgPyBcXFwidm9pZFxcXCIgOiBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cXHUwMDNlYnRmLCB0LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbiBcXHRzd2l0Y2ggKEJURl9JTkZPX0tJTkQodC1cXHUwMDNlaW5mbykpIHtcXG4gXFx0Y2FzZSBCVEZfS0lORF9TVFJVQ1Q6XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXFxuaW5kZXggMGYxM2MxM2Y0MTMzNy4uOTVjNTlmNmNmNzBhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXFxuKysrIGIva2VybmVsL2JwZi9jZmcuY1xcbkBAIC0yODcsNyArMjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiAgKiBjb21iaW5lZCBqdW1wIHRhYmxlIGluIGp0LVxcdTAwM2VpdGVtcyAoYWxsb2NhdGVkIHdpdGgga3ZjYWxsb2MpXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW50IGluc25faWR4LCBpbnQgc3VicHJvZ19zdGFydCwgaW50IHN1YnByb2dfZW5kKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaWFycmF5ICpqdCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoIWp0KSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibm8ganVtcCB0YWJsZXMgZm91bmQgZm9yIHN1YnByb2cgc3RhcnRpbmcgYXQgJXVcXFxcblxcXCIsIHN1YnByb2dfc3RhcnQpO1xcbiBcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4tXFx0XFx0XFx0ZW52LCBzdWJwcm9nX3N0YXJ0LCBcXFwibWlzc2luZyBqdW1wIHRhYmxlXFxcIixcXG4rXFx0XFx0XFx0ZW52LCBpbnNuX2lkeCwgXFxcIm1pc3NpbmcganVtcCB0YWJsZVxcXCIsXFxuIFxcdFxcdFxcdFxcXCJNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLlxcXCIsXFxuIFxcdFxcdFxcdFxcXCJObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXFxcIixcXG4gXFx0XFx0XFx0c3VicHJvZ19zdGFydCk7XFxuQEAgLTM0OSw3ICszNDksNyBAQCBjcmVhdGVfanQoaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcXG4gXFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2ctXFx1MDAzZXN0YXJ0O1xcbiBcXHRzdWJwcm9nX2VuZCA9IChzdWJwcm9nICsgMSktXFx1MDAzZXN0YXJ0O1xcbi1cXHRqdCA9IGp0X2Zyb21fc3VicHJvZyhlbnYsIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kKTtcXG4rXFx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCB0LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XFxuIFxcdGlmIChJU19FUlIoanQpKVxcbiBcXHRcXHRyZXR1cm4ganQ7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMgYi9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcXG5pbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xcbisrKyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xcbkBAIC04MzMsMTEgKzgzMyw5IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXFxuIFxcdGxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LVxcdTAwM2Vwcm9nLCBpbnNuX2lkeCk7XFxuIFxcdGlmIChidGYgXFx1MDAyNlxcdTAwMjYgbGluZm8pXFxuIFxcdFxcdGJwZl9nZXRfbGluZm9fc291cmNlKGJ0ZiwgbGluZm8sIFxcdTAwMjZzcmMpO1xcbi1cXHRpZiAoIXNyYy5maWxlIHx8ICEqc3JjLmZpbGUgfHwgIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpIHtcXG4rXFx0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICBpbnNuICV1XFxcXG5cXFwiLCBpbnNuX2lkeCk7XFxuLVxcdFxcdGRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTtcXG4tXFx0XFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfYW5ub3RhdGlvbjtcXG4gXFx0fVxcbiBcXG4gXFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIGluc25faWR4KTtcXG5AQCAtODQ3LDYgKzg0NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICAlcyBAICVzOiVkOiVkXFxcXG5cXFwiLCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICAlczolZDolZFxcXFxuXFxcIiwgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTtcXG4rXFx0aWYgKCFzcmMubGluZSB8fCAhKnNyYy5saW5lKVxcbitcXHRcXHRnb3RvIG91dF9hbm5vdGF0aW9uO1xcbiBcXG4gXFx0c3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7XFxuIFxcdGVuZF9saW5lID0gc3JjLmxpbmVfbnVtICsgQlBGX0RJQUdfQ09OVEVYVDtcXG5AQCAtODg5LDcgKzg4OSwxMSBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaFxcbiBcXHRcXHRcXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgd2lkdGgsIGluZGVudCwgbGFiZWwsIG1zZyk7XFxuIFxcdH1cXG4gXFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcXG4rXFx0Z290byBvdXRfcmVzdG9yZTtcXG4gXFxuK291dF9hbm5vdGF0aW9uOlxcbitcXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XFxuK1xcdGRpYWdfcHJpbnRfaW5zbl9jb250ZXh0KGVudiwgaW5zbl9pZHgsIGRpc2FzbV9saW5lcyk7XFxuIG91dF9yZXN0b3JlOlxcbiBcXHRkaWFnX2ZtdF9yZXN0b3JlKGVudiwgbWFyayk7XFxuIH1cXG5AQCAtMTA4Myw3ICsxMDg3LDkgQEAgdm9pZCBicGZfZGlhZ19jdHhfZm9yYmlkZGVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcXG4gXFx0Y29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7XFxuIFxcdHUzMiBkZXB0aDtcXG4gXFxuLVxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcXG4rXFx0aWYgKCFlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlaW5fc2xlZXBhYmxlKVxcbitcXHRcXHRjdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfTk9ORTtcXG4rXFx0ZWxzZSBpZiAoZW52LVxcdTAwM2VjdXJfc3RhdGUtXFx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXFxuIFxcdFxcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7XFxuIFxcdGVsc2UgaWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfcHJlZW1wdF9sb2NrcylcXG4gXFx0XFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX1BSRUVNUFQ7XFxuQEAgLTE1MzEsOCArMTUzNyw3IEBAIHN0YXRpYyB2b2lkIGRpYWdfcmVjb3JkX21vZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsXFxuIFxcdH0gZWxzZSBpZiAoZGlhZ19tb2RfaW5zbl9vcmlnaW4oZW52LCBpbnNuX2lkeCwgXFx1MDAyNnRhcmdldCwgXFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XFxuIFxcdFxcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuLVxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IG5ld19yZWcgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChyZWFzb24gPT0gQlBGX0RJQUdfTU9EX1dSSVRFIHx8IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfU1BJTEwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IG5ld19yZWcgXFx1MDAyNlxcdTAwMjYgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIW1lbWNtcChcXHUwMDI2ZXZlbnQubW9kLm9sZCwgXFx1MDAyNmV2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFldmVudC5tb2Qub3JpZ2luX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBkaWFnX21vZF9rZWVwc19saW5lYWdlKGVudiwgXFx1MDAyNmV2ZW50KSlcXG5AQCAtMjE2NCw3ICsyMTY5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmRpYWdfbW9kX3RhcmdldF9kZXNjKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9SRUc6XFxuIFxcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwiUiV1XFxcIiwgdGFyZ2V0LVxcdTAwM2VyZWdubyk7XFxuIFxcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19BUkc6XFxuLVxcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwic3RhY2sgYXJnJWRcXFwiLCBkaWFnX3N0YWNrX2FyZ25vKHRhcmdldC1cXHUwMDNlc3RhY2tfYXJnKSk7XFxuK1xcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwiKihSMTEtJXUpXFxcIiwgKHRhcmdldC1cXHUwMDNlc3RhY2tfYXJnICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xcbiBcXHRjYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVDpcXG4gXFx0XFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzdGFjayBzbG90IGZwJWRcXFwiLCAtKHRhcmdldC1cXHUwMDNlc3BpICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xcbiBcXHRkZWZhdWx0OlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAwYmI3ZWU5NWM4YmQyLi43NzAzM2NmMzczNGE1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yOTEyLDYgKzI5MTIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0Y29uc3QgY2hhciAqb3BlcmF0aW9uLCAqc3VnZ2VzdGlvbjtcXG4gXFxuIFxcdC8qIEFkZCBlbnRyeSBmdW5jdGlvbi4gKi9cXG4gXFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCAwKTtcXG5AQCAtMjkyMywxMSArMjkyNCwxOCBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICghZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuK1xcdFxcdFxcdFxcdG9wZXJhdGlvbiA9IFxcXCJCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXFxcIjtcXG4rXFx0XFx0XFx0XFx0c3VnZ2VzdGlvbiA9IFxcXCJMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIjtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0b3BlcmF0aW9uID0gXFxcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFxcXCI7XFxuK1xcdFxcdFxcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiTG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIjtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCBmb3IgQ0FQX0JQRiBhbmQgQ0FQX1NZU19BRE1JTlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX3BvbGljeShcXG4tXFx0XFx0XFx0XFx0ZW52LCBpLCBcXFwiQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsXFxcIixcXG4rXFx0XFx0XFx0XFx0ZW52LCBpLCBvcGVyYXRpb24sXFxuIFxcdFxcdFxcdFxcdFxcXCJsb2FkaW5nIG9yIGNhbGxpbmcgb3RoZXIgQlBGIGZ1bmN0aW9ucyByZXF1aXJlcyBDQVBfQlBGIG9yIENBUF9TWVNfQURNSU5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXFwiTG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHN1Z2dlc3Rpb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yOTk1LDE1ICszMDAzLDEzIEBAIHN0YXRpYyBpbnQgYWRkX2tmdW5jcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbitzdGF0aWMgdm9pZCBmaW5kX3N1YnByb2dfcHJvcGVydGllcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuLVxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuK1xcdGludCBpLCBzdWJwcm9nX2VuZCwgY3VyX3N1YnByb2cgPSAwO1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIFxcbi1cXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXFxuLVxcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcXG4gXFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrKSB7XFxuIFxcdFxcdHU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7XFxuQEAgLTMwMTcsNiArMzAyMywyNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoQlBGX01PREUoY29kZSkgPT0gQlBGX0FCUyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU5EKSlcXG4gXFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX2xkX2FicyA9IHRydWU7XFxuK1xcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbitcXHRcXHRcXHRjdXJfc3VicHJvZysrO1xcbitcXHRcXHRcXHRpZiAoY3VyX3N1YnByb2cgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250KVxcbitcXHRcXHRcXHRcXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4re1xcbitcXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xcbitcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuK1xcbitcXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXFxuK1xcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcXG4rXFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrKSB7XFxuK1xcdFxcdHU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7XFxuK1xcbiBcXHRcXHRpZiAoQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAgXFx1MDAyNlxcdTAwMjYgQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAzMilcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxcbkBAIC0zMDM4LDkgKzMwNjUsMTAgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHR9XFxuIG5leHQ6XFxuIFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbi1cXHRcXHRcXHQvKiB0byBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXJcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyLFxcbiBcXHRcXHRcXHQgKiB0aGUgbGFzdCBpbnNuIG9mIHRoZSBzdWJwcm9nIHNob3VsZCBiZSBlaXRoZXIgZXhpdFxcbi1cXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxcbitcXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChjb2RlICE9IChCUEZfSk1QIHwgQlBGX0VYSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTMxMjYsOCArMzE1NCw5IEBAIHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlbnYsIGlkeCwgXFxcInJlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmV3cml0ZSB0aGUgcmVjdXJzaW9uIGFzIGFuIGV4cGxpY2l0IGJvdW5kZWQgbG9vcCwgb3Igc3BsaXQgdGhlIGxvZ2ljIHNvIHN1YnByb2dyYW0gY2FsbHMgZG8gbm90IGZvcm0gYSBjeWNsZS5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiVGhpcyBicGYyYnBmIGNhbGwgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gXFxcIlxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlRoZSBjYWxsIGZyb20gJXMoKSB0byAlcygpIHdvdWxkIG1ha2UgdGhlIHN1YnByb2dyYW0gY2FsbCBncmFwaCByZWN1cnNpdmUuIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlRoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YnBmX3N1YnByb2dfbmFtZShlbnYsIGN1ciksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBjYWxsZWUpKTtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdFxcdH1cXG5AQCAtMzgxNywxOSArMzg0Niw0NiBAQCBzdGF0aWMgaW50IG1hcmtfcmVnX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IHNpemUpXFxuK3N0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLCBpbnQgaSwgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gYnBmX3N0YWNrX3Nsb3RfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdGNvbnN0IGNoYXIgKnJlYXNvbjtcXG4rXFx0Y29uc3QgY2hhciAqcHJvYmxlbSwgKnJlYXNvbiwgKnN1Z2dlc3Rpb24sICpraW5kO1xcbitcXG4rXFx0aWYgKHR5cGUgPT0gU1RBQ0tfSU5WQUxJRCkge1xcbitcXHRcXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoXFxuK1xcdFxcdFxcdGVudiwgXFxcIlRoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXFxcIlxcbitcXHRcXHRcXHRcXFwiUHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuXFxcIixcXG4rXFx0XFx0XFx0c2l6ZSwgb2ZmLCBpKTtcXG4rXFx0XFx0YnBmX2RpYWdfbWVtb3J5KFxcbitcXHRcXHRcXHRlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIFxcXCJ1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRcXFwiLCByZWFzb24sXFxuK1xcdFxcdFxcdFxcXCJJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXFxcIlxcbitcXHRcXHRcXHRcXFwib3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsXFxuLVxcdFxcdFxcdCAgICAgIFxcXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgaXMgdW5pbml0aWFsaXplZCBvbiB0aGlzIHBhdGguIFxcXCJcXG4tXFx0XFx0XFxcIlByb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLlxcXCIsXFxuLVxcdFxcdHNpemUsIG9mZiwgaSk7XFxuLVxcdGJwZl9kaWFnX21lbW9yeShcXG4tXFx0XFx0ZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBcXFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXFxcIiwgcmVhc29uLFxcbi1cXHRcXHRcXFwiSW5pdGlhbGl6ZSBldmVyeSBieXRlIGluIHRoZSBzdGFjayByYW5nZSBiZWZvcmUgcmVhZGluZyBpdCwgYWRqdXN0IHRoZSBvZmZzZXQgYW5kIHNpemUgc28gdGhlIHJlYWQgY292ZXJzIG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMsIFxcXCJcXG4tXFx0XFx0XFxcIm9yIGxvYWQgd2l0aCBDQVBfUEVSRk1PTiBpZiB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzIGFyZSBpbnRlbmRlZC5cXFwiKTtcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbitcXHRcXHRraW5kID0gXFxcImR5bnB0clxcXCI7XFxuK1xcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiVXNlIGR5bnB0ciBoZWxwZXJzIG9yIGtmdW5jcyB0byBhY2Nlc3MgdGhlIG9iamVjdCByZXByZXNlbnRlZCBieSB0aGUgZHlucHRyIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZHlucHRyIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNUQUNLX0lURVI6XFxuK1xcdFxcdGtpbmQgPSBcXFwiaXRlcmF0b3JcXFwiO1xcbitcXHRcXHRzdWdnZXN0aW9uID0gXFxcIlVzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbitcXHRcXHRraW5kID0gXFxcIklSUSBmbGFnXFxcIjtcXG4rXFx0XFx0c3VnZ2VzdGlvbiA9IFxcXCJQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuYyBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHByb2JsZW0gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwiZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcXFwiLCBraW5kKTtcXG4rXFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxcbitcXHRcXHRlbnYsIFxcXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgYmVsb25ncyB0byB2ZXJpZmllci1tYW5hZ2VkICVzIHN0YXRlLiBcXFwiXFxuK1xcdFxcdFxcXCJUaGlzIHN0YXRlIGhhcyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IHJlYWQgZGlyZWN0bHkuXFxcIixcXG4rXFx0XFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcXG4rXFx0YnBmX2RpYWdfbWVtb3J5KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTtcXG4gfVxcbiBcXG4gLyogUmVhZCB0aGUgc3RhY2sgYXQgJ29mZicgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcXG5AQCAtMzkyMSw3ICszOTc3LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCslZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmYsIGksIHNpemUpO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRicGZfZGlhZ19zdGFja19yZWFkX3VuaW5pdChlbnYsIG9mZiwgaSwgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdFxcdFxcdH1cXG5AQCAtMzk4MCw3ICs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCslZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRvZmYsIGksIHNpemUpO1xcbi1cXHRcXHRcXHRcXHRicGZfZGlhZ19zdGFja19yZWFkX3VuaW5pdChlbnYsIG9mZiwgaSwgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdH1cXG5AQCAtNDA3OSwxMyArNDEzNSwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0dG51bV9zdHJuKHRuX2J1Ziwgc2l6ZW9mKHRuX2J1ZiksIHJlZy1cXHUwMDNldmFyX29mZik7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvbjsgdmFyX29mZj0lcyBvZmY9JWQgc2l6ZT0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0dG5fYnVmLCBvZmYsIHNpemUpO1xcbi1cXHRcXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoZW52LFxcbi1cXHRcXHRcXHRcXHQgICAgICBcXFwiVGhlIGhlbHBlciB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcXFwiXFxuLVxcdFxcdFxcdFxcXCJIZWxwZXIgc3RhY2sgbWVtb3J5IGFyZ3VtZW50cyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXFxcIixcXG4rXFx0XFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxcbitcXHRcXHRcXHRlbnYsIFxcXCJUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcXFwiXFxuK1xcdFxcdFxcdFxcXCJBdG9taWMgc3RhY2sgb3BlcmF0aW9ucyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXFxcIixcXG4gXFx0XFx0XFx0dG5fYnVmLCBvZmYsIHNpemUpO1xcbiBcXHRcXHRicGZfZGlhZ19tZW1vcnkoXFxuLVxcdFxcdFxcdGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgXFxcInZhcmlhYmxlIHN0YWNrIGFjY2Vzc1xcXCIsIHJlYXNvbixcXG4tXFx0XFx0XFx0XFxcIlVzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgaGVscGVyIG1lbW9yeSBhcmd1bWVudHMsIG9yIGNvcHkgdGhlIG5lZWRlZCBieXRlcyBpbnRvIGEgZml4ZWQgc3RhY2sgc2xvdCBmaXJzdC5cXFwiKTtcXG4rXFx0XFx0XFx0ZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBcXFwidmFyaWFibGUtb2Zmc2V0IGF0b21pYyBzdGFjayBhY2Nlc3NcXFwiLCByZWFzb24sXFxuK1xcdFxcdFxcdFxcXCJVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcdC8qIFZhcmlhYmxlIG9mZnNldCBpcyBwcm9oaWJpdGVkIGZvciB1bnByaXZpbGVnZWQgbW9kZSBmb3Igc2ltcGxpY2l0eVxcbkBAIC05ODgyLDcgKzk5MzgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdHN1Yl9uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XFxuIFxcdFxcdFxcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcXFwiLCBzdWJfbmFtZSk7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbixcXG4tXFx0XFx0XFx0XFx0XFxcIk1vdmUgdGhlIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbGwgdGhlIGZ1bmN0aW9uIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGZ1bmN0aW9uLlxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTA3MDEsNiArMTA3NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbitcXHRpZiAoIWluX3NsZWVwYWJsZShlbnYpKVxcbitcXHRcXHRyZXR1cm4gXFxcIm5vbi1zbGVlcGFibGUgcHJvZ1xcXCI7XFxuIFxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcXG4gXFx0XFx0cmV0dXJuIFxcXCJyY3VfcmVhZF9sb2NrIHJlZ2lvblxcXCI7XFxuIFxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXFxuQEAgLTEwNzA5LDcgKzEwNzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW5cXG4gXFx0XFx0cmV0dXJuIFxcXCJJUlEtZGlzYWJsZWQgcmVnaW9uXFxcIjtcXG4gXFx0aWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfbG9ja3MpXFxuIFxcdFxcdHJldHVybiBcXFwibG9jayByZWdpb25cXFwiO1xcbi1cXHRyZXR1cm4gXFxcIm5vbi1zbGVlcGFibGUgcHJvZ1xcXCI7XFxuK1xcdHJldHVybiBcXFwibm9uLXNsZWVwYWJsZSBjb250ZXh0XFxcIjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbkBAIC0xMDgwNSw3ICsxMDg2Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdFxcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzbGVlcGFibGUgaGVscGVyICVzIyVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0IGZ1bmNfaWRfbmFtZShmdW5jX2lkKSwgZnVuY19pZCk7XFxuIFxcdFxcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLFxcbi1cXHRcXHRcXHRcXFwiTW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXFxcIik7XFxuK1xcdFxcdFxcdFxcXCJDYWxsIHRoZSBoZWxwZXIgZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgaGVscGVyLlxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTA5OTQsMTMgKzExMDUyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcbiBcXHQvKiByZXNldCBjYWxsZXIgc2F2ZWQgcmVncyAqL1xcbiBcXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxuK1xcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuIFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xcbiBcXHRcXHRjaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbiBcXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xcbiBcXHRyZXRfdHlwZSA9IGZuLVxcdTAwM2VyZXRfdHlwZTtcXG4gXFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xcbkBAIC0xMjYyMywxMiArMTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xcbiBcXHRcXHRcXHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xcbiBcXG4tXFx0XFx0XFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcXG4rXFx0XFx0XFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiQWRkIGEgTlVMTCBjaGVjayBhbmQgY2FsbCB0aGUga2Z1bmMgb25seSBvbiB0aGUgbm9uLU5VTEwgcGF0aC5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXFwidGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGJ1dCB0aGlzIGtmdW5jIHJlcXVpcmVzIGEgbm9uLU5VTEwgcG9pbnRlciB0byAlc1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgZXhwZWN0ZWRfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHRcXHR9XFxuQEAgLTEzMDY1LDggKzEzMTIzLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcXG4gXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVJTlZBTClcXG4rXFx0XFx0XFx0XFx0XFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJQYXNzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9yIGEgdmFsdWUgdGhlIHZlcmlmaWVyIGNhbiBwcm92ZSBpcyBjb25zdGFudCBhdCB0aGlzIGNhbGwuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInRoZSBrZnVuYyByZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQsIGJ1dCAlcyBpcyB2YXJpYWJsZSBvbiB0aGlzIHBhdGhcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEtGX0FSR19NRU1fU0laRTpcXG4gXFx0XFx0e1xcbkBAIC0xMzEzMCwxNSArMTMxOTQsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XFxuIFxcdFxcdFxcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcXG4tXFxuLVxcdFxcdFxcdFxcdGV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7XFxuIFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdFxcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUGFzcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG1hdGNoaW5nIEJQRiBvYmplY3QgYWxsb2NhdGlvbiBvciBsb29rdXAgb3BlcmF0aW9uIGZvciB0aGlzIGtmdW5jLlxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXJcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHBlY3RlZF90eXBlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBhc3MgYW4gb3duaW5nIG9yIG5vbi1vd25pbmcgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIG9iamVjdCBjb250YWluaW5nIGEgYnBmX3JlZmNvdW50IGZpZWxkLlxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0ICVzIGlzICVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG5AQCAtMTM3MjYsMTEgKzEzNzg4LDIwIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdH1cXG4gXFxuIFxcdHNsZWVwYWJsZSA9IGJwZl9pc19rZnVuY19zbGVlcGFibGUoXFx1MDAyNm1ldGEpO1xcbi1cXHRpZiAoc2xlZXBhYmxlIFxcdTAwMjZcXHUwMDI2ICFpbl9zbGVlcGFibGUoZW52KSkge1xcbi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXFxcblxcXCIsIGZ1bmNfbmFtZSk7XFxuK1xcdGlmIChzbGVlcGFibGUgXFx1MDAyNlxcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcXG4rXFxuK1xcdFxcdGlmIChpbl9zbGVlcGFibGUoZW52KSkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xcbitcXHRcXHRcXHRzdWdnZXN0aW9uID0gXFxcIk1vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cXFwiO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGZ1bmNfbmFtZSk7XFxuK1xcdFxcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiTWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXFxcIjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwic2xlZXBhYmxlIGtmdW5jICVzXFxcIiwgZnVuY19uYW1lKTtcXG4tXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXFxuLVxcdFxcdFxcdFxcXCJNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cXFwiKTtcXG4rXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sIHN1Z2dlc3Rpb24pO1xcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0fVxcbiBcXG5AQCAtMTM4MzAsMTUgKzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNsZWVwYWJsZSBcXHUwMDI2XFx1MDAyNiAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkge1xcbi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xcbi1cXHRcXHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwic2xlZXBhYmxlIGtmdW5jICVzXFxcIiwgZnVuY19uYW1lKTtcXG4tXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXFxuLVxcdFxcdFxcdFxcXCJNb3ZlIHRoZSBrZnVuYyBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSBcXHUwMDI2XFx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbkBAIC0yMTA4OCwxNyArMjExNTAsMTkgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdC8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi9cXG4rXFx0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi9cXG4gXFx0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XFxuK1xcdGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKGVudik7XFxuK1xcbitcXHQvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqL1xcbitcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxuLVxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4rXFx0cmV0ID0gY2hlY2tfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbmluZGV4IGJlYWE3M2RjMzVmNWQuLjk0MThkZmU0ZDdiN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbkBAIC01NjAsNiArNTYwLDkgQEAgaW50IGdsb2JhbCh2b2lkICpjdHgpXFxuIC8qIEEgZGlyZWN0IHJlYWQgc2hvdWxkIGZhaWwgKi9cXG4gU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIHJlYWQgZnJvbSBzdGFja1xcXCIpXFxuK19fbXNnKFxcXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBkeW5wdHIgc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwiVXNlIGR5bnB0ciBoZWxwZXJzIG9yIGtmdW5jc1xcXCIpXFxuIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuQEAgLTE1OTAsNiArMTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xcbiAvKiBDYW4ndCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXFwiKVxcbitfX21zZyhcXFwicmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50XFxcIilcXG4gaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbkBAIC0xNjA5LDYgKzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gLyogQ2FuJ3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqL1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwibXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxcIilcXG4rX19tc2coXFxcInJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudFxcXCIpXFxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXFxuaW5kZXggYTRhMDA3ODY2YTMzMi4uOGQyYjUwZDExZmE0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcXG5AQCAtMTQsNiArMTQsMTkgQEAgZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJcXG4gc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tBIF9faGlkZGVuIFNFQyhcXFwiLmRhdGEuQVxcXCIpO1xcbiBzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgbG9ja0IgX19oaWRkZW4gU0VDKFxcXCIuZGF0YS5CXFxcIik7XFxuIFxcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcXFwiKVxcbitfX21zZyhcXFwiVmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgSVJRIGZsYWcgc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVxcXCIpXFxuK19fbXNnKFxcXCJQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuY1xcXCIpXFxuK2ludCBpcnFfZmxhZ19kaXJlY3RfcmVhZChzdHJ1Y3QgX19za19idWZmICpjdHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGJwZl9sb2NhbF9pcnFfc2F2ZShcXHUwMDI2ZmxhZ3MpO1xcbitcXHRyZXR1cm4gZmxhZ3M7XFxuK31cXG4rXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBkb2Vzbid0IHBvaW50IHRvIGFuIGlycSBmbGFnIG9uIHN0YWNrXFxcIilcXG4gaW50IGlycV9zYXZlX2JhZF9hcmcoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG5pbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xcbkBAIC0zMzIsNiArMzMyLDkgQEAgaW50IG5leHRfYWZ0ZXJfZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwiP3Jhd190cFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcXFwiKVxcbitfX21zZyhcXFwiVmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgaXRlcmF0b3Igc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVxcXCIpXFxuK19fbXNnKFxcXCJVc2UgaXRlcmF0b3Iga2Z1bmNzXFxcIilcXG4gaW50IF9fbmFrZWQgcmVhZF9mcm9tX2l0ZXJfc2xvdF9mYWlsKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXFxuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODNjOTExNDk0YTM0YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG5AQCAtNiw2ICs2LDggQEBcXG4gI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4gXFxuIGV4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sIHU2NCBmbGFncykgX193ZWFrIF9fa3N5bTtcXG4rZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xcbitleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4gXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJCUEZfRVhJVCBpbnN0cnVjdGlvbiBpbiBtYWluIHByb2cgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9wcmVlbXB0X2Rpc2FibGUtZWQgcmVnaW9uXFxcIilcXG5AQCAtMTI3LDYgKzEyOSwxOSBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/ZmVudHJ5L1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0clxcXCIpXFxuK19fbXNnKFxcXCJjYW5ub3QgYmUgdXNlZCBpbiBub24tc2xlZXBhYmxlIHByb2dyYW1cXFwiKVxcbitpbnQgbm9uX3NsZWVwYWJsZV9rZnVuY19pbl9yY3Uodm9pZCAqY3R4KVxcbit7XFxuK1xcdHUzMiBkYXRhO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0YnBmX2NvcHlfZnJvbV91c2VyX3N0cihcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCAwKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKVxcbiB7XFxuIFxcdHByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCAwMjRlZjJhYWUyMDA4Li5lYWFlZDA4NTlmOTQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtNjMsNiArNjMsNyBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuK19fbXNnKFxcXCJyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcXFwiKVxcbiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07XFxuQEAgLTgwLDYgKzgxLDE0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcXCIpXFxuK19fbXNnKFxcXCJleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgUjEgaXMgYSBjb250ZXh0IHBvaW50ZXJcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldK319XFxcIilcXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jXFxuQEAgLTU1LDYgKzU1LDQ2IEBAIF9fbmFrZWQgdm9pZCBvdXRfb2ZfcmFuZ2VfanVtcDIodm9pZClcXG4gXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGNyb3NzX3N1YnByb2dfdGFyZ2V0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJqdW1wIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJ5XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJqdW1wIG91dCBvZiByYW5nZSBmcm9tIGluc24gMVxcXCIpXFxuK19fbXNnKFxcXCJqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmNcXFwiKVxcbitfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBjcm9zc19zdWJwcm9nX3RhcmdldDtcXHRcXHRcXHRcXFxcXFxuK1xcdGdvdG8gKzE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwic3VicHJvZ3JhbSBmYWxsdGhyb3VnaFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwibGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcXCIpXFxuK19fbXNnKFxcXCJmYWxsdGhyb3VnaF9zdWJwcm9nIEAgdmVyaWZpZXJfY2ZnLmNcXFwiKVxcbitfX25ha2VkIHZvaWQgc3VicHJvZ19mYWxsdGhyb3VnaCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nO1xcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwibG9vcCAoYmFjay1lZGdlKVxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwidW5yZWFjaGFibGUgaW5zbiAxXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xcbmluZGV4IDViMThjOWEyNzcxN2IuLmE4MzVhNDg3MTAyMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xcbkBAIC01Myw5ICs1MywxMSBAQCBERUZJTkVfU0lNUExFX0pVTVBfVEFCTEVfUFJPRyhyZXNlcnZlZF9maWVsZF9ub25femVyb19pbW0sIEJQRl9SRUdfMCwgMCwgMSwgX19mYVxcbiAgKi9cXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIm5vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0IDBcXFwiKVxcbitfX21zZyhcXFwiXFx1MDAzZVxcdTAwM2VcXHUwMDNlIDEgfCAoMGQpIGdvdG94IHIwXFxcIilcXG4gX19uYWtlZCB2b2lkIGp1bXBfdGFibGVfbm9fanVtcF90YWJsZSh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LjhieXRlICVbZ290b3hfcjBdO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjAgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbmluZGV4IGQyNDhjZTg3N2YxNGUuLmQxZWMxOWI3ZjY2YjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXFxuQEAgLTEzOSw2ICsxMzksNyBAQCBTRUMoXFxcInRyYWNlcG9pbnRcXFwiKVxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJib3VuZGVkIHJlY3Vyc2lvblxcXCIpXFxuIF9fZmFpbHVyZVxcbiBfX21zZyhcXFwicmVjdXJzaXZlIGNhbGwgZnJvbVxcXCIpXFxuK19fbXNnKFxcXCJUaGUgY2FsbCBmcm9tIGJvdW5kZWRfcmVjdXJzaW9uX18xKCkgdG8gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB3b3VsZCBtYWtlXFxcIilcXG4gX19uYWtlZCB2b2lkIGJvdW5kZWRfcmVjdXJzaW9uKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmNcXG5pbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xcbkBAIC05Niw2ICs5NiwyNCBAQCBfX25ha2VkIHZvaWQgcHNldWRvX2J0Zl9pZF9sb2dfbWFza3NfYWRkcmVzcyh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBzZXVkb19mdW5jX2NhbGxiYWNrKF9fdTMyIGluZGV4LCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwidW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcXFwiKVxcbitfX3N1Y2Nlc3MgX19mYWlsdXJlX3VucHJpdlxcbitfX21zZ191bnByaXYoXFxcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9uc1xcXCIpXFxuK19fbm90X21zZ191bnByaXYoXFxcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFxcXCIpXFxuK19fbXNnX3VucHJpdihcXFwicG9saWN5IGNoZWNrIGZhaWxlZCBmb3IgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZVxcXCIpXFxuK19fbXNnX3VucHJpdihcXFwiYXZvaWQgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gdW5wcml2aWxlZ2VkXFxcIilcXG4raW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9sb29wKDEsIHBzZXVkb19mdW5jX2NhbGxiYWNrLCBOVUxMLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwidW5wcml2OiByZXR1cm4gcG9pbnRlclxcXCIpXFxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcXFwiUjAgbGVha3MgYWRkclxcXCIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXFxuaW5kZXggMDVhMGE1NWFkYjQ1MS4uZjI0MzBiOWEwMjE4NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xcbkBAIC0xMjEsNCArMTIxLDMxIEBAIGwwXyU9OlxcdHIwID0gNDI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwieGFkZCB3aXRoIHZhcmlhYmxlIHN0YWNrIG9mZnNldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwidmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvblxcXCIpXFxuK19fbXNnKFxcXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1xcXCIpXFxuK19fbXNnKFxcXCJUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrXFxcIilcXG4rX19tc2coXFxcIlVzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb25cXFwiKVxcbitfX25ha2VkIHZvaWQgeGFkZF92YXJpYWJsZV9zdGFja19vZmZzZXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDE2KSA9IHIxO1xcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwMjY9IDg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxICs9IC0xNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxICs9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0bG9jayAqKHU2NCAqKShyMSArIDApICs9IHIyO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjE3Ljc3MDU2NDAxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNjAyOTQxOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTRjODg3MjliNDc2MzQ3Y2JiYzFmMTVlNGM4Mjk0NWI0MTc2NThmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDAyOjEzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMTE2OSwxOSArMTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXG4gXHRcdFx0aWQgPSB0LVx1MDAzZXR5cGU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdGdvdG8gcmVzb2x2ZWQ7XG4gXHRcdH1cbitcdFx0dCA9IGJ0Zl90eXBlX3NraXBfcXVhbGlmaWVycyhzaG93LVx1MDAzZWJ0ZiwgaWQpO1xuIFx0XHRpZiAoIWlkKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctXHUwMDNlYnRmLCBpZCk7XG4gXHR9XG4gXHQvKiBXZSBtYXkgbm90IGJlIGFibGUgdG8gcmVwcmVzZW50IHRoaXMgdHlwZTsgYmFpbCB0byBiZSBzYWZlICovXG4gXHRpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUilcbiBcdFx0cmV0dXJuIFwiXCI7XG4gXG4rcmVzb2x2ZWQ6XG4gXHRpZiAoIW5hbWUpXG4tXHRcdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRuYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/IFwidm9pZFwiIDogYnRmX25hbWVfYnlfb2Zmc2V0KHNob3ctXHUwMDNlYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbiBcdHN3aXRjaCAoQlRGX0lORk9fS0lORCh0LVx1MDAzZWluZm8pKSB7XG4gXHRjYXNlIEJURl9LSU5EX1NUUlVDVDpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggMGYxM2MxM2Y0MTMzNy4uOTVjNTlmNmNmNzBhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbisrKyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0yODcsNyArMjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuICAqIGNvbWJpbmVkIGp1bXAgdGFibGUgaW4ganQtXHUwMDNlaXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbitcdFx0XHRcdFx0ICBpbnQgaW5zbl9pZHgsIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpXG4ge1xuIFx0c3RydWN0IGJwZl9pYXJyYXkgKmp0ID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoIWp0KSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcIm5vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0ICV1XFxuXCIsIHN1YnByb2dfc3RhcnQpO1xuIFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbi1cdFx0XHRlbnYsIHN1YnByb2dfc3RhcnQsIFwibWlzc2luZyBqdW1wIHRhYmxlXCIsXG4rXHRcdFx0ZW52LCBpbnNuX2lkeCwgXCJtaXNzaW5nIGp1bXAgdGFibGVcIixcbiBcdFx0XHRcIk1ha2Ugc3VyZSBzdWJwcm9ncmFtcyBjb250YWluaW5nIGdvdG94IGluc3RydWN0aW9ucyBhcmUgYWNjb21wYW5pZWQgYnkganVtcCB0YWJsZXMgcmVmZXJlbmNpbmcgdGhlc2Ugc3VicHJvZ3JhbXMuXCIsXG4gXHRcdFx0XCJObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXCIsXG4gXHRcdFx0c3VicHJvZ19zdGFydCk7XG5AQCAtMzQ5LDcgKzM0OSw3IEBAIGNyZWF0ZV9qdChpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiBcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nLVx1MDAzZXN0YXJ0O1xuIFx0c3VicHJvZ19lbmQgPSAoc3VicHJvZyArIDEpLVx1MDAzZXN0YXJ0O1xuLVx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4rXHRqdCA9IGp0X2Zyb21fc3VicHJvZyhlbnYsIHQsIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kKTtcbiBcdGlmIChJU19FUlIoanQpKVxuIFx0XHRyZXR1cm4ganQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jIGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG5pbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG4rKysgYi9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcbkBAIC04MzMsMTEgKzgzMyw5IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRsaW5mbyA9IGJwZl9maW5kX2xpbmZvKGVudi1cdTAwM2Vwcm9nLCBpbnNuX2lkeCk7XG4gXHRpZiAoYnRmIFx1MDAyNlx1MDAyNiBsaW5mbylcbiBcdFx0YnBmX2dldF9saW5mb19zb3VyY2UoYnRmLCBsaW5mbywgXHUwMDI2c3JjKTtcbi1cdGlmICghc3JjLmZpbGUgfHwgISpzcmMuZmlsZSB8fCAhc3JjLmxpbmUgfHwgISpzcmMubGluZSkge1xuK1x0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcIiAgaW5zbiAldVxcblwiLCBpbnNuX2lkeCk7XG4tXHRcdGRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTtcbi1cdFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYW5ub3RhdGlvbjtcbiBcdH1cbiBcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBpbnNuX2lkeCk7XG5AQCAtODQ3LDYgKzg0NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcIiAgJXMgQCAlczolZDolZFxcblwiLCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xuIFx0ZWxzZVxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCIgICVzOiVkOiVkXFxuXCIsIHNyYy5maWxlLCBzcmMubGluZV9udW0sIHNyYy5saW5lX2NvbCk7XG4rXHRpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpXG4rXHRcdGdvdG8gb3V0X2Fubm90YXRpb247XG4gXG4gXHRzdGFydF9saW5lID0gc3JjLmxpbmVfbnVtIC0gQlBGX0RJQUdfQ09OVEVYVDtcbiBcdGVuZF9saW5lID0gc3JjLmxpbmVfbnVtICsgQlBGX0RJQUdfQ09OVEVYVDtcbkBAIC04ODksNyArODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIHdpZHRoLCBpbmRlbnQsIGxhYmVsLCBtc2cpO1xuIFx0fVxuIFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbitcdGdvdG8gb3V0X3Jlc3RvcmU7XG4gXG4rb3V0X2Fubm90YXRpb246XG4rXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XG4rXHRkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpO1xuIG91dF9yZXN0b3JlOlxuIFx0ZGlhZ19mbXRfcmVzdG9yZShlbnYsIG1hcmspO1xuIH1cbkBAIC0xMDgzLDcgKzEwODcsOSBAQCB2b2lkIGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0Y29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7XG4gXHR1MzIgZGVwdGg7XG4gXG4tXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzKVxuK1x0aWYgKCFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSlcbitcdFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX05PTkU7XG4rXHRlbHNlIGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4gXHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7XG4gXHRlbHNlIGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9wcmVlbXB0X2xvY2tzKVxuIFx0XHRjdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfUFJFRU1QVDtcbkBAIC0xNTMxLDggKzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0fSBlbHNlIGlmIChkaWFnX21vZF9pbnNuX29yaWdpbihlbnYsIGluc25faWR4LCBcdTAwMjZ0YXJnZXQsIFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XG4gXHRcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xuIFx0fVxuLVx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgfHwgcmVhc29uID09IEJQRl9ESUFHX01PRF9TUElMTCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAob2xkX3JlZyBcdTAwMjZcdTAwMjYgbmV3X3JlZyBcdTAwMjZcdTAwMjYgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhbWVtY21wKFx1MDAyNmV2ZW50Lm1vZC5vbGQsIFx1MDAyNmV2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlhZ19tb2Rfa2VlcHNfbGluZWFnZShlbnYsIFx1MDAyNmV2ZW50KSlcbkBAIC0yMTY0LDcgKzIxNjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGlhZ19tb2RfdGFyZ2V0X2Rlc2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9SRUc6XG4gXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcIlIldVwiLCB0YXJnZXQtXHUwMDNlcmVnbm8pO1xuIFx0Y2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRzpcbi1cdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwic3RhY2sgYXJnJWRcIiwgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtXHUwMDNlc3RhY2tfYXJnKSk7XG4rXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcIiooUjExLSV1KVwiLCAodGFyZ2V0LVx1MDAzZXN0YWNrX2FyZyArIDEpICogQlBGX1JFR19TSVpFKTtcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19TTE9UOlxuIFx0XHRyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgXCJzdGFjayBzbG90IGZwJWRcIiwgLSh0YXJnZXQtXHUwMDNlc3BpICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xuIFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDBiYjdlZTk1YzhiZDIuLjc3MDMzY2YzNzM0YTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTI5MTIsNiArMjkxMiw3IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiwgZXhfY2JfaW5zbjtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbitcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwgKnN1Z2dlc3Rpb247XG4gXG4gXHQvKiBBZGQgZW50cnkgZnVuY3Rpb24uICovXG4gXHRyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApO1xuQEAgLTI5MjMsMTEgKzI5MjQsMTggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbitcdFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4rXHRcdFx0XHRvcGVyYXRpb24gPSBcIkJQRiBmdW5jdGlvbiByZWZlcmVuY2VcIjtcbitcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcIkxvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cIjtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0b3BlcmF0aW9uID0gXCJCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcIjtcbitcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcIkxvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRi10by1CUEYgZnVuY3Rpb24gY2FsbHMgaW4gdW5wcml2aWxlZ2VkIHByb2dyYW1zLlwiO1xuK1x0XHRcdH1cbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXG5cIik7XG4gXHRcdFx0YnBmX2RpYWdfcG9saWN5KFxuLVx0XHRcdFx0ZW52LCBpLCBcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFwiLFxuK1x0XHRcdFx0ZW52LCBpLCBvcGVyYXRpb24sXG4gXHRcdFx0XHRcImxvYWRpbmcgb3IgY2FsbGluZyBvdGhlciBCUEYgZnVuY3Rpb25zIHJlcXVpcmVzIENBUF9CUEYgb3IgQ0FQX1NZU19BRE1JTlwiLFxuLVx0XHRcdFx0XCJMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cIik7XG4rXHRcdFx0XHRzdWdnZXN0aW9uKTtcbiBcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0XHR9XG4gXG5AQCAtMjk5NSwxNSArMzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4rc3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4tXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xuK1x0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXG4tXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXG4tXHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7XG4gXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyspIHtcbiBcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbkBAIC0zMDE3LDYgKzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChCUEZfTU9ERShjb2RlKSA9PSBCUEZfQUJTIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTkQpKVxuIFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlO1xuK1x0XHRpZiAoaSA9PSBzdWJwcm9nX2VuZCAtIDEpIHtcbitcdFx0XHRjdXJfc3VicHJvZysrO1xuK1x0XHRcdGlmIChjdXJfc3VicHJvZyBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250KVxuK1x0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3tcbitcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XG4rXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXG4rXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXG4rXHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7XG4rXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyspIHtcbitcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbitcbiBcdFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFx1MDAyNlx1MDAyNiBCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUDMyKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfQ0FMTClcbkBAIC0zMDM4LDkgKzMwNjUsMTAgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gbmV4dDpcbiBcdFx0aWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7XG4tXHRcdFx0LyogdG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyXG4rXHRcdFx0LypcbitcdFx0XHQgKiBUbyBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIsXG4gXHRcdFx0ICogdGhlIGxhc3QgaW5zbiBvZiB0aGUgc3VicHJvZyBzaG91bGQgYmUgZWl0aGVyIGV4aXRcbi1cdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxuK1x0XHRcdCAqIG9yIHVuY29uZGl0aW9uYWwganVtcCBiYWNrIG9yIGJwZl90aHJvdyBjYWxsLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChjb2RlICE9IChCUEZfSk1QIHwgQlBGX0VYSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFx1MDAyNlx1MDAyNlxuQEAgLTMxMjYsOCArMzE1NCw5IEBAIHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxuIFx0XHRcdFx0XHRcdGVudiwgaWR4LCBcInJlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcIixcbiBcdFx0XHRcdFx0XHRcIlJld3JpdGUgdGhlIHJlY3Vyc2lvbiBhcyBhbiBleHBsaWNpdCBib3VuZGVkIGxvb3AsIG9yIHNwbGl0IHRoZSBsb2dpYyBzbyBzdWJwcm9ncmFtIGNhbGxzIGRvIG5vdCBmb3JtIGEgY3ljbGUuXCIsXG4tXHRcdFx0XHRcdFx0XCJUaGlzIGJwZjJicGYgY2FsbCB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcIlxuLVx0XHRcdFx0XHRcdFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cIik7XG4rXHRcdFx0XHRcdFx0XCJUaGUgY2FsbCBmcm9tICVzKCkgdG8gJXMoKSB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcIlxuK1x0XHRcdFx0XHRcdFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cIixcbitcdFx0XHRcdFx0XHRicGZfc3VicHJvZ19uYW1lKGVudiwgY3VyKSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGNhbGxlZSkpO1xuIFx0XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbkBAIC0zODE3LDE5ICszODQ2LDQ2IEBAIHN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxuLVx0XHRcdFx0ICAgICAgIGludCBzaXplKVxuK3N0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLCBpbnQgaSwgaW50IHNpemUsXG4rXHRcdFx0XHRcdGVudW0gYnBmX3N0YWNrX3Nsb3RfdHlwZSB0eXBlKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnJlYXNvbjtcbitcdGNvbnN0IGNoYXIgKnByb2JsZW0sICpyZWFzb24sICpzdWdnZXN0aW9uLCAqa2luZDtcbitcbitcdGlmICh0eXBlID09IFNUQUNLX0lOVkFMSUQpIHtcbitcdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdGVudiwgXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgaXMgdW5pbml0aWFsaXplZCBvbiB0aGlzIHBhdGguIFwiXG4rXHRcdFx0XCJQcm9ncmFtcyBsb2FkZWQgd2l0aCBDQVBfUEVSRk1PTiBjYW4gYmUgYWxsb3dlZCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMsIGJ1dCB0aGlzIHByb2dyYW0gaXMgYmVpbmcgcmVqZWN0ZWQgd2l0aG91dCB0aGF0IGFsbG93YW5jZS5cIixcbitcdFx0XHRzaXplLCBvZmYsIGkpO1xuK1x0XHRicGZfZGlhZ19tZW1vcnkoXG4rXHRcdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXCIsIHJlYXNvbixcbitcdFx0XHRcIkluaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCBcIlxuK1x0XHRcdFwib3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0cmVhc29uID0gYnBmX2RpYWdfZm10KGVudixcbi1cdFx0XHQgICAgICBcIlRoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXCJcbi1cdFx0XCJQcm9ncmFtcyBsb2FkZWQgd2l0aCBDQVBfUEVSRk1PTiBjYW4gYmUgYWxsb3dlZCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMsIGJ1dCB0aGlzIHByb2dyYW0gaXMgYmVpbmcgcmVqZWN0ZWQgd2l0aG91dCB0aGF0IGFsbG93YW5jZS5cIixcbi1cdFx0c2l6ZSwgb2ZmLCBpKTtcbi1cdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXCIsIHJlYXNvbixcbi1cdFx0XCJJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXCJcbi1cdFx0XCJvciBsb2FkIHdpdGggQ0FQX1BFUkZNT04gaWYgdW5pbml0aWFsaXplZCBzdGFjayByZWFkcyBhcmUgaW50ZW5kZWQuXCIpO1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFNUQUNLX0RZTlBUUjpcbitcdFx0a2luZCA9IFwiZHlucHRyXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlVzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MgdG8gYWNjZXNzIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYnkgdGhlIGR5bnB0ciBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGR5bnB0ciBzdGF0ZSBkaXJlY3RseS5cIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNUQUNLX0lURVI6XG4rXHRcdGtpbmQgPSBcIml0ZXJhdG9yXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlVzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlwiO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1RBQ0tfSVJRX0ZMQUc6XG4rXHRcdGtpbmQgPSBcIklSUSBmbGFnXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlBhc3MgdGhlIHNhdmVkIElSUSBmbGFnIHRvIHRoZSBtYXRjaGluZyByZXN0b3JlIGtmdW5jIGluc3RlYWQgb2YgcmVhZGluZyBpdHMgc3RhdGUgZGlyZWN0bHkuXCI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cHJvYmxlbSA9IGJwZl9kaWFnX2ZtdChlbnYsIFwiZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcIiwga2luZCk7XG4rXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoXG4rXHRcdGVudiwgXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgYmVsb25ncyB0byB2ZXJpZmllci1tYW5hZ2VkICVzIHN0YXRlLiBcIlxuK1x0XHRcIlRoaXMgc3RhdGUgaGFzIGFuIG9wYXF1ZSByZXByZXNlbnRhdGlvbiB0aGF0IEJQRiBwcm9ncmFtcyBjYW5ub3QgcmVhZCBkaXJlY3RseS5cIixcbitcdFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcbitcdGJwZl9kaWFnX21lbW9yeShlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTtcbiB9XG4gXG4gLyogUmVhZCB0aGUgc3RhY2sgYXQgJ29mZicgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcbkBAIC0zOTIxLDcgKzM5NzcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2sgb2ZmICVkKyVkIHNpemUgJWRcXG5cIixcbiBcdFx0XHRcdFx0XHRcdG9mZiwgaSwgc2l6ZSk7XG4tXHRcdFx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuK1x0XHRcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdFx0XHR9XG5AQCAtMzk4MCw3ICs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayBvZmYgJWQrJWQgc2l6ZSAlZFxcblwiLFxuIFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuK1x0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF9pbnZhbGlkKGVudiwgb2ZmLCBpLCBzaXplLCB0eXBlKTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbkBAIC00MDc5LDEzICs0MTM1LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHR0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLVx1MDAzZXZhcl9vZmYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCJ2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uOyB2YXJfb2ZmPSVzIG9mZj0lZCBzaXplPSVkXFxuXCIsXG4gXHRcdFx0dG5fYnVmLCBvZmYsIHNpemUpO1xuLVx0XHRyZWFzb24gPSBicGZfZGlhZ19mbXQoZW52LFxuLVx0XHRcdFx0ICAgICAgXCJUaGUgaGVscGVyIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2sgdGhyb3VnaCB2YXJpYWJsZSBvZmZzZXQgJXMgcGx1cyBmaXhlZCBvZmZzZXQgJWQgYW5kIHNpemUgJWQuIFwiXG4tXHRcdFx0XCJIZWxwZXIgc3RhY2sgbWVtb3J5IGFyZ3VtZW50cyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXCIsXG4rXHRcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbitcdFx0XHRlbnYsIFwiVGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gXCJcbitcdFx0XHRcIkF0b21pYyBzdGFjayBvcGVyYXRpb25zIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS5cIixcbiBcdFx0XHR0bl9idWYsIG9mZiwgc2l6ZSk7XG4gXHRcdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCJ2YXJpYWJsZSBzdGFjayBhY2Nlc3NcIiwgcmVhc29uLFxuLVx0XHRcdFwiVXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciBoZWxwZXIgbWVtb3J5IGFyZ3VtZW50cywgb3IgY29weSB0aGUgbmVlZGVkIGJ5dGVzIGludG8gYSBmaXhlZCBzdGFjayBzbG90IGZpcnN0LlwiKTtcbitcdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCJ2YXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wiLCByZWFzb24sXG4rXHRcdFx0XCJVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXCIpO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcdC8qIFZhcmlhYmxlIG9mZnNldCBpcyBwcm9oaWJpdGVkIGZvciB1bnByaXZpbGVnZWQgbW9kZSBmb3Igc2ltcGxpY2l0eVxuQEAgLTk4ODIsNyArOTkzOCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdHN1Yl9uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4gXHRcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCJzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcIiwgc3ViX25hbWUpO1xuIFx0XHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcdFwiTW92ZSB0aGUgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGZ1bmN0aW9uLlwiKTtcbitcdFx0XHRcdFwiQ2FsbCB0aGUgZnVuY3Rpb24gZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTA3MDEsNiArMTA3NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBzdGF0aWMgY29uc3QgY2hhciAqbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0aWYgKCFpbl9zbGVlcGFibGUoZW52KSlcbitcdFx0cmV0dXJuIFwibm9uLXNsZWVwYWJsZSBwcm9nXCI7XG4gXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzKVxuIFx0XHRyZXR1cm4gXCJyY3VfcmVhZF9sb2NrIHJlZ2lvblwiO1xuIFx0aWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXG5AQCAtMTA3MDksNyArMTA3NjcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplblxuIFx0XHRyZXR1cm4gXCJJUlEtZGlzYWJsZWQgcmVnaW9uXCI7XG4gXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfbG9ja3MpXG4gXHRcdHJldHVybiBcImxvY2sgcmVnaW9uXCI7XG4tXHRyZXR1cm4gXCJub24tc2xlZXBhYmxlIHByb2dcIjtcbitcdHJldHVybiBcIm5vbi1zbGVlcGFibGUgY29udGV4dFwiO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJlbGVhc2VfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5AQCAtMTA4MDUsNyArMTA4NjMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcInNsZWVwYWJsZSBoZWxwZXIgJXMjJWRcIixcbiBcdFx0XHRcdFx0IGZ1bmNfaWRfbmFtZShmdW5jX2lkKSwgZnVuY19pZCk7XG4gXHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLFxuLVx0XHRcdFwiTW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXCIpO1xuK1x0XHRcdFwiQ2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTEwOTk0LDEzICsxMTA1MiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFxuIFx0LyogcmVzZXQgY2FsbGVyIHNhdmVkIHJlZ3MgKi9cbiBcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbitcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbiBcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG4tXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xuIFx0cmV0X3R5cGUgPSBmbi1cdTAwM2VyZXRfdHlwZTtcbiBcdHJldF9mbGFnID0gdHlwZV9mbGFnKHJldF90eXBlKTtcbkBAIC0xMjYyMywxMiArMTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xuIFx0XHRcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XG4gXG4tXHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbitcdFx0XHRleHBlY3RlZF90eXBlID0gYnBmX2RpYWdfZm10X2J0Zl90eXBlKGVudiwgYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiBcdFx0XHRcdFx0ICAgICAgXCJBZGQgYSBOVUxMIGNoZWNrIGFuZCBjYWxsIHRoZSBrZnVuYyBvbmx5IG9uIHRoZSBub24tTlVMTCBwYXRoLlwiLFxuLVx0XHRcdFx0XHQgICAgICBcInRoZSBwb2ludGVyIG1heSBiZSBOVUxMLCBidXQgdGhpcyBrZnVuYyByZXF1aXJlcyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gJXNcIixcbitcdFx0XHRcdFx0ICAgICAgXCJ0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXCIsXG4gXHRcdFx0XHRcdCAgICAgIGV4cGVjdGVkX3R5cGUpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG5AQCAtMTMwNjUsOCArMTMxMjMsMTQgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XG4gXHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdGlmIChyZXQgPT0gLUVJTlZBTClcbitcdFx0XHRcdFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBcIlBhc3MgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb3IgYSB2YWx1ZSB0aGUgdmVyaWZpZXIgY2FuIHByb3ZlIGlzIGNvbnN0YW50IGF0IHRoaXMgY2FsbC5cIixcbitcdFx0XHRcdFx0XHRcdCAgICAgIFwidGhlIGtmdW5jIHJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudCwgYnV0ICVzIGlzIHZhcmlhYmxlIG9uIHRoaXMgcGF0aFwiLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEtGX0FSR19NRU1fU0laRTpcbiBcdFx0e1xuQEAgLTEzMTMwLDE1ICsxMzE5NCwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuIFx0XHRcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSkge1xuLVx0XHRcdFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcbi1cbi1cdFx0XHRcdGV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICAgXCJQYXNzIGEgcG9pbnRlciByZXR1cm5lZCBieSB0aGUgbWF0Y2hpbmcgQlBGIG9iamVjdCBhbGxvY2F0aW9uIG9yIGxvb2t1cCBvcGVyYXRpb24gZm9yIHRoaXMga2Z1bmMuXCIsXG4tXHRcdFx0XHRcdFx0ICAgICAgXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXJcIixcbi1cdFx0XHRcdFx0XHQgICAgICBleHBlY3RlZF90eXBlKTtcbitcdFx0XHRcdFx0XHQgICAgICBcIlBhc3MgYW4gb3duaW5nIG9yIG5vbi1vd25pbmcgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIG9iamVjdCBjb250YWluaW5nIGEgYnBmX3JlZmNvdW50IGZpZWxkLlwiLFxuK1x0XHRcdFx0XHRcdCAgICAgIFwidGhlIGtmdW5jIGV4cGVjdHMgYSBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QsIGJ1dCAlcyBpcyAlc1wiLFxuK1x0XHRcdFx0XHRcdCAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbitcdFx0XHRcdFx0XHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSlcbkBAIC0xMzcyNiwxMSArMTM3ODgsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdH1cbiBcbiBcdHNsZWVwYWJsZSA9IGJwZl9pc19rZnVuY19zbGVlcGFibGUoXHUwMDI2bWV0YSk7XG4tXHRpZiAoc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhaW5fc2xlZXBhYmxlKGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xcblwiLCBmdW5jX25hbWUpO1xuK1x0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbitcdFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcbitcbitcdFx0aWYgKGluX3NsZWVwYWJsZShlbnYpKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwia2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xcblwiLFxuK1x0XHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4rXHRcdFx0c3VnZ2VzdGlvbiA9IFwiTW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwiO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXG5cIixcbitcdFx0XHRcdGZ1bmNfbmFtZSk7XG4rXHRcdFx0c3VnZ2VzdGlvbiA9IFwiTWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXCI7XG4rXHRcdH1cbiBcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCJzbGVlcGFibGUga2Z1bmMgJXNcIiwgZnVuY19uYW1lKTtcbi1cdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCJNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cIik7XG4rXHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLCBzdWdnZXN0aW9uKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG5AQCAtMTM4MzAsMTUgKzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuIFx0fVxuIFxuLVx0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwia2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xcblwiLFxuLVx0XHRcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xuLVx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcInNsZWVwYWJsZSBrZnVuYyAlc1wiLCBmdW5jX25hbWUpO1xuLVx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcIk1vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cIik7XG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0fVxuLVxuIFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgXHUwMDI2XHUwMDI2IChyY3VfbG9jayB8fCByY3VfdW5sb2NrKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtMjEwODgsMTcgKzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4rXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYW5kIGNvbGxlY3QgdGhlIHByb3BlcnRpZXMgbmVlZGVkIGJ5IEJURiB2YWxpZGF0aW9uLiAqL1xuIFx0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbi1cdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4rXHRmaW5kX3N1YnByb2dfcHJvcGVydGllcyhlbnYpO1xuK1xuK1x0LyogVmFsaWRhdGUgQlRGIGFuZCBhcHBseSBDTy1SRSBiZWZvcmUgcmVwb3J0aW5nIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gKi9cbitcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuIFxuLVx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbi1cdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbitcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCBiZWFhNzNkYzM1ZjVkLi45NDE4ZGZlNGQ3YjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtNTYwLDYgKzU2MCw5IEBAIGludCBnbG9iYWwodm9pZCAqY3R4KVxuIC8qIEEgZGlyZWN0IHJlYWQgc2hvdWxkIGZhaWwgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcIilcbitfX21zZyhcIlZlcmlmaWNhdGlvbiBmYWlsZWQ6IE1lbW9yeSBTYWZldHk6IERpcmVjdCByZWFkIG9mIGR5bnB0ciBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGVcIilcbitfX21zZyhcIlVzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3NcIilcbiBpbnQgaW52YWxpZF9yZWFkMSh2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuQEAgLTE1OTAsNiArMTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xuIC8qIENhbid0IHBhc3MgaW4gdmFyaWFibGUtc2l6ZWQgbGVuIHRvIGJwZl9keW5wdHJfc2xpY2UgKi9cbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJtdXN0IGJlIGEga25vd24gY29uc3RhbnRcIilcbitfX21zZyhcInJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudFwiKVxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbkBAIC0xNjA5LDYgKzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiAvKiBDYW4ndCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwibXVzdCBiZSBhIGtub3duIGNvbnN0YW50XCIpXG4rX19tc2coXCJyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnRcIilcbiBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4yKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRjaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGV0aGhkcildID0ge307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXG5pbmRleCBhNGEwMDc4NjZhMzMyLi44ZDJiNTBkMTFmYTRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbkBAIC0xNCw2ICsxNCwxOSBAQCBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0clxuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoXCIuZGF0YS5BXCIpO1xuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQiBfX2hpZGRlbiBTRUMoXCIuZGF0YS5CXCIpO1xuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBJUlEgZmxhZyBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVwiKVxuK19fbXNnKFwiUGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmNcIilcbitpbnQgaXJxX2ZsYWdfZGlyZWN0X3JlYWQoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRicGZfbG9jYWxfaXJxX3NhdmUoXHUwMDI2ZmxhZ3MpO1xuK1x0cmV0dXJuIGZsYWdzO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJSMSBkb2Vzbid0IHBvaW50IHRvIGFuIGlycSBmbGFnIG9uIHN0YWNrXCIpXG4gaW50IGlycV9zYXZlX2JhZF9hcmcoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuaW5kZXggNjQ2MDI2NDMwZTliNS4uNDcyM2FlNTc4ZTUzNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5AQCAtMzMyLDYgKzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4gXG4gU0VDKFwiP3Jhd190cFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVwiKVxuK19fbXNnKFwiVXNlIGl0ZXJhdG9yIGtmdW5jc1wiKVxuIGludCBfX25ha2VkIHJlYWRfZnJvbV9pdGVyX3Nsb3RfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5pbmRleCA2ZDVmY2U3ZTZmZmM5Li44M2M5MTE0OTRhMzRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcbkBAIC02LDYgKzYsOCBAQFxuICNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbiBcbiBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLCB1NjQgZmxhZ3MpIF9fd2VhayBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuIFNFQyhcIj90Y1wiKVxuIF9fZmFpbHVyZSBfX21zZyhcIkJQRl9FWElUIGluc3RydWN0aW9uIGluIG1haW4gcHJvZyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYnBmX3ByZWVtcHRfZGlzYWJsZS1lZCByZWdpb25cIilcbkBAIC0xMjcsNiArMTI5LDE5IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP2ZlbnRyeS9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJcIilcbitfX21zZyhcImNhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbVwiKVxuK2ludCBub25fc2xlZXBhYmxlX2tmdW5jX2luX3JjdSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIGRhdGE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0YnBmX2NvcHlfZnJvbV91c2VyX3N0cihcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSksIE5VTEwsIDApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBfX25vaW5saW5lIHByZWVtcHRfZ2xvYmFsX3N1YnByb2codm9pZClcbiB7XG4gXHRwcmVlbXB0X2JhbGFuY2Vfc3VicHJvZygpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IDAyNGVmMmFhZTIwMDguLmVhYWVkMDg1OWY5NDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC02Myw2ICs2Myw3IEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXG4gXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4rX19tc2coXCJyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcIilcbiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07XG5AQCAtODAsNiArODEsMTQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rX19tc2coXCJleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgUjEgaXMgYSBjb250ZXh0IHBvaW50ZXJcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcbit9XG4rXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cIilcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xuQEAgLTU1LDYgKzU1LDQ2IEBAIF9fbmFrZWQgdm9pZCBvdXRfb2ZfcmFuZ2VfanVtcDIodm9pZClcbiBcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwianVtcCBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyeVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImp1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAxXCIpXG4rX19tc2coXCJqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmNcIilcbitfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgY3Jvc3Nfc3VicHJvZ190YXJnZXQ7XHRcdFx0XFxcbitcdGdvdG8gKzE7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwic3VicHJvZ3JhbSBmYWxsdGhyb3VnaFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImxhc3QgaW5zbiBpcyBub3QgYW4gZXhpdCBvciBqbXBcIilcbitfX21zZyhcImZhbGx0aHJvdWdoX3N1YnByb2cgQCB2ZXJpZmllcl9jZmcuY1wiKVxuK19fbmFrZWQgdm9pZCBzdWJwcm9nX2ZhbGx0aHJvdWdoKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nO1x0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwic29ja2V0XCIpXG4gX19kZXNjcmlwdGlvbihcImxvb3AgKGJhY2stZWRnZSlcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJ1bnJlYWNoYWJsZSBpbnNuIDFcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG5pbmRleCA1YjE4YzlhMjc3MTdiLi5hODM1YTQ4NzEwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG5AQCAtNTMsOSArNTMsMTEgQEAgREVGSU5FX1NJTVBMRV9KVU1QX1RBQkxFX1BST0cocmVzZXJ2ZWRfZmllbGRfbm9uX3plcm9faW1tLCBCUEZfUkVHXzAsIDAsIDEsIF9fZmFcbiAgKi9cbiBTRUMoXCJzb2NrZXRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJubyBqdW1wIHRhYmxlcyBmb3VuZCBmb3Igc3VicHJvZyBzdGFydGluZyBhdCAwXCIpXG4rX19tc2coXCJcdTAwM2VcdTAwM2VcdTAwM2UgMSB8ICgwZCkgZ290b3ggcjBcIilcbiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0LjhieXRlICVbZ290b3hfcjBdO1x0XHRcdFx0XHRcXFxuIFx0cjAgPSAxO1x0XHRcdFx0XHRcdFx0XFxcbiBcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZDFlYzE5YjdmNjZiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMTM5LDYgKzEzOSw3IEBAIFNFQyhcInRyYWNlcG9pbnRcIilcbiBfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCByZWN1cnNpb25cIilcbiBfX2ZhaWx1cmVcbiBfX21zZyhcInJlY3Vyc2l2ZSBjYWxsIGZyb21cIilcbitfX21zZyhcIlRoZSBjYWxsIGZyb20gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB0byBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHdvdWxkIG1ha2VcIilcbiBfX25ha2VkIHZvaWQgYm91bmRlZF9yZWN1cnNpb24odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG5pbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmNcbkBAIC05Niw2ICs5NiwyNCBAQCBfX25ha2VkIHZvaWQgcHNldWRvX2J0Zl9pZF9sb2dfbWFza3NfYWRkcmVzcyh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rc3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwidW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcIilcbitfX3N1Y2Nlc3MgX19mYWlsdXJlX3VucHJpdlxuK19fbXNnX3VucHJpdihcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9uc1wiKVxuK19fbm90X21zZ191bnByaXYoXCJCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcIilcbitfX21zZ191bnByaXYoXCJwb2xpY3kgY2hlY2sgZmFpbGVkIGZvciBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXCIpXG4rX19tc2dfdW5wcml2KFwiYXZvaWQgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gdW5wcml2aWxlZ2VkXCIpXG4raW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9sb29wKDEsIHBzZXVkb19mdW5jX2NhbGxiYWNrLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJzb2NrZXRcIilcbiBfX2Rlc2NyaXB0aW9uKFwidW5wcml2OiByZXR1cm4gcG9pbnRlclwiKVxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcIlIwIGxlYWtzIGFkZHJcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuaW5kZXggMDVhMGE1NWFkYjQ1MS4uZjI0MzBiOWEwMjE4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmNcbkBAIC0xMjEsNCArMTIxLDMxIEBAIGwwXyU9Olx0cjAgPSA0MjtcdFx0XHRcdFx0XFxcbiBcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbitTRUMoXCJ0Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJ4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJ2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wiKVxuK19fbXNnKFwiVGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFja1wiKVxuK19fbXNnKFwiVXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciB0aGUgYXRvbWljIG9wZXJhdGlvblwiKVxuK19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gMTYpID0gcjE7XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRyMCBcdTAwMjY9IDg7XHRcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC0xNjtcdFx0XHRcdFx0XFxcbitcdHIxICs9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRsb2NrICoodTY0ICopKHIxICsgMCkgKz0gcjI7XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzoxNy43NzA1NzM5ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk3NzE4NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgdmVyaWZpZXIgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGEgbWl4IG9mIGRpYWdub3N0aWMgaW1wcm92ZW1lbnRzIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2VzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJ3MgZXJyb3IgbWVzc2FnZXMgYW5kIGhpbnRzLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY2hhbmdlcyB0byB0aGUgdmVyaWZpY2F0aW9uIGxvZ2ljIGl0c2VsZi5cblxuRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvYnRmLmNgLCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgYnRmX3Nob3dfbmFtZWAuIEl0IG5vdyBoYW5kbGVzIHZvaWQgdHlwZXMgY29ycmVjdGx5LiBUaGlzIGlzIGEgbWlub3IgY29ycmVjdGlvbiwgbm90aGluZyB0byBiZSBhbGFybWVkIGFib3V0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgbGVkIHRvIGluY29ycmVjdCB0eXBlIG5hbWUgcmVwcmVzZW50YXRpb24gaW4gc3BlY2lmaWMgY2FzZXMsIHdoaWNoIGlzIG5vdyBmaXhlZC5cblxuVGhlbiwgYGtlcm5lbC9icGYvY2ZnLmNgIGhhcyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGp0X2Zyb21fc3VicHJvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYW4gYGluc25faWR4YCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBpcyBwcm9iYWJseSBqdXN0IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgZm9yIGRpYWdub3N0aWNzLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb24gY2F1c2luZyBpc3N1ZXMuXG5cbmBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgIGhhcyBhIG51bWJlciBvZiB1cGRhdGVzOyBhbGwgb2YgdGhlbSBzZWVtIHRvIGJlIGFib3V0IG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbnRleHQgcmVwb3J0aW5nIGJldHRlci4gTm90aGluZyB0b28gY3JpdGljYWwgaGVyZSwgYnV0IGV2ZXJ5IGJpdCBoZWxwcyB3aXRoIGRlYnVnZ2luZyBCUEYgcHJvZ3JhbXMuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZXMgaW4gdGhlIHByb2dyYW0ncyBvcmRlciBvZiBleGVjdXRpb24uIEkgc2VlIHRoYXQgYGNoZWNrX3N1YnByb2dzYCBpcyBzcGxpdCBpbnRvIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgYW5kIGBjaGVja19zdWJwcm9nc2AsIGFuZCB0aGUgY2FsbGluZyBvcmRlciBvZiB0aGVzZSBhbmQgYGJwZl9jaGVja19idGZfaW5mb2AgaGFzIGNoYW5nZWQuIFRoaXMgaXMgYSBiaWcgcmVkIGZsYWcsIGFuZCBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBjYWxscyBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLCB0aGVuIGBicGZfY2hlY2tfYnRmX2luZm9gLCBhbmQgZmluYWxseSBgY2hlY2tfc3VicHJvZ3NgLiBUaGlzIG1lYW5zIHRoYXQgQlRGIHZhbGlkYXRpb24gaXMgbm93IHBlcmZvcm1lZCAqYmVmb3JlKiB3ZSBjaGVjayBzdWJwcm9ncmFtIGxheW91dCB2YWxpZGl0eS4gUHJldmlvdXNseSwgdGhlIHN1YnByb2dyYW0gc3RydWN0dXJlIHdhcyB2YWxpZGF0ZWQgZmlyc3QuIFRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBzZWN1cml0eSBpbXBsaWNhdGlvbnMhXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCBkb2VzLiBPa2F5LCBpdCdzIGp1c3QgZXh0cmFjdGluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaGFzX2xkX2Fic2AsIG5vdGhpbmcgY3JpdGljYWwgdGhlcmUuXG5cblRoZSByZW9yZGVyaW5nIG1lYW5zIHRoYXQgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGhhcyB0aGUgcG90ZW50aWFsIHRvIHByb2Nlc3MgQlRGIGluZm9ybWF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IG1pZ2h0IGhhdmUgKmludmFsaWQqIHN1YnByb2dyYW0gc3RydWN0dXJlcyAoZS5nLiwganVtcHMgb3V0c2lkZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMsIG9yIGZhbGx0aHJvdWdocykuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBpZiBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBpc24ndCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBpbnZhbGlkIHByb2dyYW0gZmxvdy4gVGhlIGNvZGUgaXMgc3RydWN0dXJlZCBzdWNoIHRoYXQgYGFkZF9zdWJwcm9nc2AgaXMgc3RpbGwgY2FsbGVkIGZpcnN0LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuIFNvIHRoZSBpbnZhbGlkIHByb2dyYW0gc3RpbGwgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGludG8gYSBzZXQgb2Ygc3VicHJvZ3JhbXMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIEJURiBhbmQgc3VicHJvZ3JhbSB2YWxpZGF0aW9uIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGVyZSBtYXkgYmUgc29tZSBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgcGF0aHMuIFxuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIGBicGZfY2hlY2tfYnRmX2luZm9gIHRvIHNlZSBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCBwcm9ncmFtIHN0cnVjdHVyZSB0aGF0IGFyZSBubyBsb25nZXIgZ3VhcmFudGVlZCBieSB0aGUgbmV3IGV4ZWN1dGlvbiBvcmRlci4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIHRob3JvdWdobHkuIFRoaXMgcmVvcmRlcmluZyBvZiB2YWxpZGF0aW9uIGNoZWNrcyBjb3VsZCBpbnRyb2R1Y2UgbmV3LCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSwgYmVoYXZpb3IgaWYgYGJwZl9jaGVja19idGZfaW5mb2Agd2Fzbid0IGRlc2lnbmVkIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGludmFsaWQgc3VicHJvZ3JhbSBsYXlvdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzozMS43NDc3NjM0MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NDY1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja19idGZfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIxMDM3PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYwLVxcdC8qIFZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTYxOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjMyLjA3NDIzMjg0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUwODY5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBmdW5jdGlvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX2NoZWNrX2J0Zl9pbmZvYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGJwZl9jaGVja19idGZfaW5mb2AuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvcmUgcHVycG9zZSBpczogdGhpcyBmdW5jdGlvbiAqaGFzKiB0byBiZSBjb25jZXJuZWQgd2l0aCB2YWxpZGF0aW5nIEJURiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgaXQgd2lsbCBlbnN1cmUgdGhlIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgb2YgdGhlIEJURiBkYXRhIHRoYXQncyBiZWluZyB1c2VkIGJ5IEJQRiBwcm9ncmFtcyBvciBpbmZyYXN0cnVjdHVyZS4gSSB3b3VsZCBhc3N1bWUgaXQncyBjaGVja2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlR5cGUgU2FmZXR5OioqIE1ha2luZyBzdXJlIHRoYXQgdHlwZSBkZWZpbml0aW9ucyByZWZlcmVuY2VkIGluIEJQRiBjb2RlIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB2YWxpZCBpbiB0aGUgQlRGIGRhdGEuIEFueSBtaXNtYXRjaGVzIGluIHNpemVzIG9yIGxheW91dCBzaG91bGQgYmUgY2F1Z2h0LlxuKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIFByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHRoZSBCVEYgZGF0YSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIEJQRiBydW50aW1lIGVudmlyb25tZW50IGl0J3MgcnVubmluZyBpbi4gQSBtaXNtYXRjaCBoZXJlIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IuXG4qICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgcG90ZW50aWFsIGV4cGxvaXRzIGlmIEJURiBpbmZvcm1hdGlvbiBpcyBjb3JydXB0ZWQgb3IgbWFuaXB1bGF0ZWQ/XG4qICAgKipDb21wbGV0ZW5lc3M6KiogQ29uZmlybWluZyB0aGF0IGFsbCByZWZlcmVuY2VkIHR5cGVzIGFyZSBkZWZpbmVkLCBvciB0aGF0IGFueSBwYXJ0aWFsIGRlZmluaXRpb25zIGFyZSBoYW5kbGVkIGluIGEgcmVhc29uYWJsZSB3YXkuXG5cbkknZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgZWFybHksIG9yIGxhdGVyPyBEb2VzIGl0IHJlbGF0ZSB0byB0aGUgQlBGIHZlcmlmaWVyIGluIHNvbWUgd2F5PyBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIGl0IGxpa2VseSBpcyBpbnZva2VkIGR1cmluZyBwcm9ncmFtIGxvYWQgb3IgYXR0YWNoIG9wZXJhdGlvbnMsIHByb2JhYmx5ICpiZWZvcmUqIHRoZSBwcm9ncmFtIGlzIGFsbG93ZWQgdG8gcnVuLiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGludmVzdGlnYXRlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvbzsgd2hhdCBleGFjdGx5IGRvZXMgdGhpcyBmdW5jdGlvbiB0YWtlIGFzIGFyZ3VtZW50czogdGhlIEJURiBkYXRhIGl0c2VsZiwgcG9pbnRlcnMgdG8ga2VybmVsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtPyBUaGlzIGtpbmQgb2YgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgQlBGIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHk7IGlmIGl0IGlzIHBvb3JseSBpbXBsZW1lbnRlZCwgdGhlIHdob2xlIHN5c3RlbSBpcyBhdCByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjczMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjM1Ljg3OTMyMjE0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY4OTczNzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGJwZl9jaGVja19idGZfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjM1Ljk4NjIyNzYyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY2MTI1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgdGhlIEJURiBJc3N1ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gc2VlbXMgbGlrZSB0aGUgcHJvYmxlbSBJJ20gY2hhc2luZyBtaWdodCAqbm90KiBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWxseSBzdGF0aWMuIEkgd2FzIGluaXRpYWxseSBsZWFuaW5nIHRoYXQgd2F5LCBidXQgbm93IEknbSB0aGlua2luZyBtYXliZSB0aGUgZXJyb3IgaXMgZHluYW1pYyBpbiBuYXR1cmUsIGNoYW5naW5nIGluIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBjb2RlLiBPciwgYW5kIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVuZXJneSwgbWF5YmUgdGhlIHJvb3Qgb2YgdGhpcyBiZWhhdmlvciBJJ20gc2VlaW5nIGlzIGhpZGRlbiBhd2F5IGluIGBidGYuY2AuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBkZWJ1Z2dpbmcgbmV4dC4gSSBzaG91bGQgc3RlcCB0aHJvdWdoIGl0IGFuZCBjaGVjayB3aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTk0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MzguODkyODQyNjk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjkzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tfYnRmX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuYz00MTA9aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzozOC45ODcxNDAxMDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwMTg4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIEJURiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBCVEYgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB2YWxpZGF0ZXMgQlRGIGluZm9ybWF0aW9uLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGRlZmluaXRlbHkgdGhlIGBicGZfY2hlY2tfYnRmX2luZm9gIGZ1bmN0aW9uLiBUaGF0J3MgaW4gYGtlcm5lbC9icGYvY2hlY2tfYnRmLmNgLCBzbyBsZXQncyBnbyBhaGVhZCBhbmQgcHVsbCB0aGF0IHVwLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCB3aGF0IGNoZWNrcyB0aGV5J3JlIHBlcmZvcm1pbmcgb24gdGhlIEJURiBkYXRhLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbW1vbiBwaXRmYWxscyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEdldHRpbmcgYSBoYW5kbGUgb24gdGhpcyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgYnVpbGRpbmcgcm9idXN0IGFuZCBzZWN1cmUgQlBGIHByb2dyYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUxNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjQxLjc3NzMzMDE1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Mzg6XFx0aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA0Mzk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbiA0NDA6XFx0XFx0XFx0ICAgICAgIGJwZnB0cl90IHVhdHRyKVxcbiA0NDE6XFx0e1xcbiA0NDI6XFx0XFx0aW50IGVycjtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFhdHRyLVxcdTAwM2VmdW5jX2luZm9fY250IFxcdTAwMjZcXHUwMDI2ICFhdHRyLVxcdTAwM2VsaW5lX2luZm9fY250KSB7XFxuIDQ0NTpcXHRcXHRcXHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXFxuIDQ0NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NDg6XFx0XFx0fVxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRlcnIgPSBjaGVja19idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4gNDUxOlxcdFxcdGlmIChlcnIpXFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHRlcnIgPSBjaGVja19idGZfbGluZShlbnYsIGF0dHIsIHVhdHRyKTtcXG4gNDU1OlxcdFxcdGlmIChlcnIpXFxuIDQ1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHRlcnIgPSBjaGVja19jb3JlX3JlbG8oZW52LCBhdHRyLCB1YXR0cik7XFxuIDQ1OTpcXHRcXHRpZiAoZXJyKVxcbiA0NjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjQxLjc3NzQwMzkwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE1NzM3MDc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IHJlb3JkZXJpbmcgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgdmFsaWRhdGlvbiBhbmQgc3VicHJvZ3JhbSBsYXlvdXQgY2hlY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBtb3RpdmF0aW9uIGlzIHRvIHByaW9yaXRpemUgZXJyb3IgcmVwb3J0aW5nOiBzaG93IEJURi9DTy1SRSAoQ29tcGlsZS1PbmNlLCBSdW4tRXZlcnl3aGVyZSkgZXJyb3JzICpiZWZvcmUqIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcgZXJyb3JzIGNhdXNlZCBieSB0aGUgc3VicHJvZ3JhbSBsYXlvdXQgYmVpbmcgaW5jb3JyZWN0LiBJIG1lYW4sIGl0IG1ha2VzIHNlbnNlOyBpZiBDTy1SRSBpcyBtZXNzaW5nIHdpdGggdGhlIHByb2dyYW0sIGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGtub3cgdGhhdCAqZmlyc3QqIGluc3RlYWQgb2Ygc2VlaW5nIGFuIGVycm9yIGFib3V0IGFuIGludmFsaWQganVtcCB3aXRoaW4gYSBzdWJwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcm9jZXNzIGludm9sdmVzIGBjaGVja19idGZfZnVuY2AsIGBjaGVja19idGZfbGluZWAsIGFuZCBgY2hlY2tfY29yZV9yZWxvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHZhbGlkYXRpbmcgQlRGIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBvZiB0aGUgQlBGIHByb2dyYW0uIFRoZSBrZXkgaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGNoZWNrcyBmb3IganVtcHMgdGhhdCBjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgb3IgZmFsbHRocm91Z2hzICphZnRlciogcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiBgYWRkX3N1YnByb2dzYCBwb3B1bGF0ZXMgYGVudi1cdTAwM2VzdWJwcm9nX2luZm9gICpiZWZvcmUqIGBicGZfY2hlY2tfYnRmX2luZm9gLiBTbywgYGNoZWNrX3N1YnByb2dzYCBjaGVja3MgZm9yIGludmFsaWQgbGF5b3V0cyAqYWZ0ZXIqIHN1YnByb2dyYW1zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGVyZWZvcmUsIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IG1lYW5zIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uIG9uIGEgcHJvZ3JhbSB3aXRoIGFuIGluY29ycmVjdCBzdWJwcm9ncmFtIGxheW91dC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGlzLiBDTy1SRSByZWxvY2F0aW9ucyAqZG8qIG1vZGlmeSBpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgdG8gYXNzdW1lIHRoYXQgdGhleSBkb24ndCBjaGFuZ2UganVtcCAqb2Zmc2V0cyogKHRoZXkgY2hhbmdlIGltbWVkaWF0ZXMgaW5zdGVhZCkuIEhvd2V2ZXIsIEkgYWxzbyBzYXcgdGhlIGNvbW1pdCBtZXNzYWdlOiBcIlZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuXCJcblxuTG9va2luZyBhdCB0aGUgY29kZSwgdGhlcmUgYXJlIG51bWVyb3VzIGRpYWdub3N0aWMgY2hhbmdlcy4gVGhlIGRpYWdub3N0aWMgY2hhbmdlcyBpbmNsdWRlIHRoZSByZW9yZGVyaW5nIG9mIGBicGZfZGlhZ19tb2RfYmVnaW5gLCB0aGUgY29uc29saWRhdGlvbiBhbmQgY2xhcmlmaWNhdGlvbiBvZiBzbGVlcGFibGUga2Z1bmMgY2hlY2tzLCBhbmQgdmFyaW91cyBpbXByb3ZlbWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgaW4gYGNoZWNrX2tmdW5jX2FyZ3NgLiBTcGVjaWZpY2FsbHksIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZSBpbiBgS0ZfQVJHX0NPTlNUX01FTV9TSVpFYCwgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gVGhlc2UgYXJlIGFsbCBhYm91dCBtYWtpbmcgdGhlIHZlcmlmaWVyJ3MgZmVlZGJhY2sgbW9yZSBoZWxwZnVsLCBwcm92aWRpbmcgY2xlYXJlciBzdWdnZXN0aW9ucyB0byB0aGUgdXNlci5cblxuSG93ZXZlciwgdGhlIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbnMgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBTaW5jZSB0aGUgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGV4ZWN1dGVzIG9uIGEgcG90ZW50aWFsbHkgXCJpbnZhbGlkXCIgc3VicHJvZ3JhbSBsYXlvdXQuIENvdWxkIHRoaXMgY2F1c2UgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gSSBzaG91bGQgY2hlY2sgYGNoZWNrX2J0Zl9mdW5jYCB0byBlbnN1cmUgdGhlIHByb2dyYW0gaGFzIGEgdmFsaWQgbGF5b3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzo1Ni45MzQ3NzcwMTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTc1NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTEzMi1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjEzMzpzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzQtXFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6NTcuMDAwNzU3MjEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODEyNzgyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICdjaGVja19idGZfZnVuYycqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2hlY2tfYnRmX2Z1bmNgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGtlcm5lbCBtb2R1bGUsIGEgdXNlci1zcGFjZSB1dGlsaXR5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBCUEYgVHlwZSBGb3JtYXQgKEJURikgY2hlY2tpbmcsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZXRhZGF0YSBhYm91dCBCUEYgcHJvZ3JhbXMsIGFuZCB2ZXJpZnlpbmcgaXRzIGludGVncml0eS5cblxuSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBJcyBpdCBsb29raW5nIGZvciBtYWxmb3JtZWQgQlRGIGRhdGEsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBCVEYgaW5mbyBhbmQgdGhlIGFjdHVhbCBCUEYgcHJvZ3JhbSwgb3IgcGVyaGFwcyB0eXBlIG1pc21hdGNoZXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGFyZWFzIHRoYXQgcmVxdWlyZSBjbG9zZSBpbnNwZWN0aW9uLCBzdWNoIGFzOlxuKiAgICoqQlRGIEhlYWRlciBJbnRlZ3JpdHk6KiogRW5zdXJpbmcgdGhlIEJURiBoZWFkZXIgaXMgd2VsbC1mb3JtZWQgYW5kIHZhbGlkLlxuKiAgICoqVHlwZSBEZXNjcmlwdG9yIENvbnNpc3RlbmN5OioqIFZlcmlmeWluZyB0aGUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHlwZXMgcmVjb3JkZWQgaW4gdGhlIEJURiBkYXRhLlxuKiAgICoqU2l6ZSBhbmQgQWxpZ25tZW50OioqIENvbmZpcm1pbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBtYXRjaCBleHBlY3RhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuXG4qICAgKipEZXBlbmRlbmN5IFJlc29sdXRpb246KiogQXJlIHRoZXJlIGNyb3NzLXJlZmVyZW5jZXMgYmV0d2VlbiB0eXBlcz8gV2UgbmVlZCB0byBlbnN1cmUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgcmVzb2x2ZWQuXG4qICAgKipFcnJvciBSZXBvcnRpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCBsb2csIHJldHVybiBhbiBlcnJvciBjb2RlLCBvciB0cmlnZ2VyIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBIb3cgdGhvcm91Z2ggaXMgaXQ/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY2hlY2tzIHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50aW5nLiBBcmUgd2UgbG9va2luZyBhdCBhIGJhc2ljIHZhbGlkYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBkZXRlY3RpbmcgcG90ZW50aWFsIHR5cGUgY29uZnVzaW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz9cblxuTXkgbWVudGFsIGNoZWNrbGlzdCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gQlRGLXJlbGF0ZWQgaXNzdWVzLiBOb3csIHRoZSBnb2FsIGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZW0uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDowMi40ODIwMzg1NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMzOlxcdHN0YXRpYyBpbnQgY2hlY2tfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gMTM0OlxcdFxcdFxcdFxcdCAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuIDEzNTpcXHRcXHRcXHRcXHQgIGJwZnB0cl90IHVhdHRyKVxcbiAxMzY6XFx0e1xcbiAxMzc6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bywgKnJldF90eXBlO1xcbiAxMzg6XFx0XFx0dTMyIGksIG5mdW5jcywgdXJlY19zaXplO1xcbiAxMzk6XFx0XFx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmtyZWNvcmQ7XFxuIDE0MDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKmluZm9fYXV4ID0gTlVMTDtcXG4gMTQxOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gMTQyOlxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcXG4gMTQzOlxcdFxcdGJwZnB0cl90IHVyZWNvcmQ7XFxuIDE0NDpcXHRcXHRib29sIHNjYWxhcl9yZXR1cm47XFxuIDE0NTpcXHRcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0bmZ1bmNzID0gYXR0ci1cXHUwMDNlZnVuY19pbmZvX2NudDtcXG4gMTQ4OlxcdFxcdGlmICghbmZ1bmNzKSB7XFxuIDE0OTpcXHRcXHRcXHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXFxuIDE1MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTI6XFx0XFx0fVxcbiAxNTM6XFx0XFx0aWYgKG5mdW5jcyAhPSBlbnYtXFx1MDAzZXN1YnByb2dfY250KSB7XFxuIDE1NDpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm51bWJlciBvZiBmdW5jcyBpbiBmdW5jX2luZm8gZG9lc24ndCBtYXRjaCBudW1iZXIgb2Ygc3VicHJvZ3NcXFxcblxcXCIpO1xcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1NjpcXHRcXHR9XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHVyZWNfc2l6ZSA9IGF0dHItXFx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0cHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gMTYxOlxcdFxcdGJ0ZiA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHR1cmVjb3JkID0gbWFrZV9icGZwdHIoYXR0ci1cXHUwMDNlZnVuY19pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRrcmVjb3JkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm87XFxuIDE2NjpcXHRcXHRpbmZvX2F1eCA9IGt6YWxsb2Nfb2JqcygqaW5mb19hdXgsIG5mdW5jcyxcXG4gMTY3OlxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XFxuIDE2ODpcXHRcXHRpZiAoIWluZm9fYXV4KVxcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZnVuY3M7IGkrKykge1xcbiAxNzI6XFx0XFx0XFx0LyogY2hlY2sgaW5zbl9vZmYgKi9cXG4gMTczOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCAhPSBrcmVjb3JkW2ldLmluc25fb2ZmKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZ1bmNfaW5mbyBCVEYgc2VjdGlvbiBkb2Vzbid0IG1hdGNoIHN1YnByb2cgbGF5b3V0IGluIEJQRiBwcm9ncmFtXFxcXG5cXFwiKTtcXG4gMTc3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE3ODpcXHRcXHRcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdFxcdC8qIEFscmVhZHkgY2hlY2tlZCB0eXBlX2lkICovXFxuIDE4MTpcXHRcXHRcXHR0eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBrcmVjb3JkW2ldLnR5cGVfaWQpO1xcbiAxODI6XFx0XFx0XFx0aW5mb19hdXhbaV0ubGlua2FnZSA9IEJURl9JTkZPX1ZMRU4odHlwZS1cXHUwMDNlaW5mbyk7XFxuIDE4MzpcXHRcXHRcXHQvKiBBbHJlYWR5IGNoZWNrZWQgZnVuY19wcm90byAqL1xcbiAxODQ6XFx0XFx0XFx0ZnVuY19wcm90byA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgdHlwZS1cXHUwMDNldHlwZSk7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdFxcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gMTg3OlxcdFxcdFxcdHNjYWxhcl9yZXR1cm4gPVxcbiAxODg6XFx0XFx0XFx0XFx0YnRmX3R5cGVfaXNfc21hbGxfaW50KHJldF90eXBlKSB8fCBidGZfaXNfYW55X2VudW0ocmV0X3R5cGUpO1xcbiAxODk6XFx0XFx0XFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgIXNjYWxhcl9yZXR1cm4gXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uaGFzX2xkX2Ficykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJMRF9BQlMgaXMgb25seSBhbGxvd2VkIGluIGZ1bmN0aW9ucyB0aGF0IHJldHVybiAnaW50Jy5cXFxcblxcXCIpO1xcbiAxOTE6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMTkyOlxcdFxcdFxcdH1cXG4gMTkzOlxcdFxcdFxcdGlmIChpIFxcdTAwMjZcXHUwMDI2ICFzY2FsYXJfcmV0dXJuIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc190YWlsX2NhbGwpIHtcXG4gMTk0OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidGFpbF9jYWxsIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJ2ludCcuXFxcXG5cXFwiKTtcXG4gMTk1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE5NjpcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdFxcdGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLm5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVxcdTAwM2VuYW1lX29mZik7XFxuIDE5OTpcXHRcXHRcXHRicGZwdHJfYWRkKFxcdTAwMjZ1cmVjb3JkLCB1cmVjX3NpemUpO1xcbiAyMDA6XFx0XFx0fVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXggPSBpbmZvX2F1eDtcXG4gMjAzOlxcdFxcdHJldHVybiAwO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRlcnJfZnJlZTpcXG4gMjA2OlxcdFxcdGtmcmVlKGluZm9fYXV4KTtcXG4gMjA3OlxcdFxcdHJldHVybiByZXQ7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdCNkZWZpbmUgTUlOX0JQRl9MSU5FSU5GT19TSVpFXFx0b2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9saW5lX2luZm8sIGxpbmVfY29sKVxcbiAyMTE6XFx0I2RlZmluZSBNQVhfTElORUlORk9fUkVDX1NJWkVcXHRNQVhfRlVOQ0lORk9fUkVDX1NJWkVcXG4gMjEyOlxcdFxcbiAyMTM6XFx0c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAyMTQ6XFx0XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4gMjE1OlxcdFxcdFxcdFxcdCAgYnBmcHRyX3QgdWF0dHIpXFxuIDIxNjpcXHR7XFxuIDIxNzpcXHRcXHR1MzIgaSwgcywgbnJfbGluZm8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSwgcHJldl9vZmZzZXQgPSAwO1xcbiAyMTg6XFx0XFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YjtcXG4gMjE5OlxcdFxcdHN0cnVjdCBicGZfbGluZV9pbmZvICpsaW5mbztcXG4gMjIwOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gMjIxOlxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcXG4gMjIyOlxcdFxcdGJwZnB0cl90IHVsaW5mbztcXG4gMjIzOlxcdFxcdGludCBlcnI7XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdG5yX2xpbmZvID0gYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudDtcXG4gMjI2OlxcdFxcdGlmICghbnJfbGluZm8pXFxuIDIyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjI4OlxcdFxcdGlmIChucl9saW5mbyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9saW5lX2luZm8pKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdHJlY19zaXplID0gYXR0ci1cXHUwMDNlbGluZV9pbmZvX3JlY19zaXplO1xcbiAyMzI6XFx0XFx0aWYgKHJlY19zaXplIFxcdTAwM2MgTUlOX0JQRl9MSU5FSU5GT19TSVpFIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjAyLjQ4MjEzMjk2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA3NzkxNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBCVEYgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBjaGVja19idGZfZnVuY2AgaXMgcmVseWluZyBvbiBgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfbGRfYWJzYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gQWgsIHRoYXQncyB3aHkgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCB3YXMgc3BsaXQgb2ZmIGZyb20gYGNoZWNrX3N1YnByb2dzYCBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBmbGFnIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgYWxsb3dzIGBjaGVja19idGZfZnVuY2AgdG8gZWZmaWNpZW50bHkgdXNlIHRoZSBwcmVjb21wdXRlZCBpbmZvcm1hdGlvbi5cblxuSG93ZXZlciwgYSBwb3RlbnRpYWwgcHJvYmxlbSBpcyB0aGF0IGBjaGVja19zdWJwcm9nc2AgYWxzbyBwZXJmb3JtcyBlc3NlbnRpYWwgdmFsaWRhdGlvbiBsaWtlIGNoZWNraW5nIGZvciBpbnZhbGlkIGp1bXBzIGFuZCBmYWxsdGhyb3VnaHMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlmIEkgbW92ZSBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AsIHdpbGwgdGhhdCBjcmVhdGUgYW4gaXNzdWU/IFdvdWxkIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IHByb2Nlc3MgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgaW52YWxpZCBqdW1wIGluc3RydWN0aW9ucz8gSSBuZWVkIHRvIGtub3cgaWYgYGJwZl9jaGVja19idGZfaW5mb2AgY2FyZXMgYWJvdXQgdGhvc2UgcGFydGljdWxhciBjaGVja3MuXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHdoYXQgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgZG9lcy4gYGNoZWNrX2J0Zl9mdW5jYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBgbmZ1bmNzYCwgY2hlY2tpbmcgdGhlIGBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0YCB2YWx1ZS4gVGhlbiwgSSBzZWUgYGNoZWNrX2J0Zl9saW5lYCBpdGVyYXRlcyB0aHJvdWdoIGBucl9saW5mb2AgYW5kIGZvY3VzZXMgb24gdmVyaWZ5aW5nIGBsaW5mb1tpXS5pbnNuX29mZmAuIExldCBtZSBub3cgY2hlY2sgYGNoZWNrX2J0Zl9saW5lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDowNi45ODk5MjcxMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMzOlxcdFxcdCAgICByZWNfc2l6ZSBcXHUwMDNlIE1BWF9MSU5FSU5GT19SRUNfU0laRSB8fFxcbiAyMzQ6XFx0XFx0ICAgIHJlY19zaXplIFxcdTAwMjYgKHNpemVvZih1MzIpIC0gMSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0LyogTmVlZCB0byB6ZXJvIGl0IGluIGNhc2UgdGhlIHVzZXJzcGFjZSBtYXlcXG4gMjM4OlxcdFxcdCAqIHBhc3MgaW4gYSBzbWFsbGVyIGJwZl9saW5lX2luZm8gb2JqZWN0LlxcbiAyMzk6XFx0XFx0ICovXFxuIDI0MDpcXHRcXHRsaW5mbyA9IGt2emFsbG9jX29ianMoc3RydWN0IGJwZl9saW5lX2luZm8sIG5yX2xpbmZvLFxcbiAyNDE6XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gMjQyOlxcdFxcdGlmICghbGluZm8pXFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gMjQ2OlxcdFxcdGJ0ZiA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRzID0gMDtcXG4gMjQ5OlxcdFxcdHN1YiA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiAyNTA6XFx0XFx0dWxpbmZvID0gbWFrZV9icGZwdHIoYXR0ci1cXHUwMDNlbGluZV9pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAyNTE6XFx0XFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbyk7XFxuIDI1MjpcXHRcXHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAyNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2xpbmZvOyBpKyspIHtcXG4gMjU0OlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG4gMjU1OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMjU2OlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUUyQklHKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm5vbnplcm8gdGFpbGluZyByZWNvcmQgaW4gbGluZV9pbmZvXFxcIik7XFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRpZiAoY29weV90b19icGZwdHJfb2Zmc2V0KHVhdHRyLFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZih1bmlvbiBicGZfYXR0ciwgbGluZV9pbmZvX3JlY19zaXplKSxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmV4cGVjdGVkX3NpemUsIHNpemVvZihleHBlY3RlZF9zaXplKSkpXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiAyNjI6XFx0XFx0XFx0XFx0fVxcbiAyNjM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjY0OlxcdFxcdFxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXFx1MDAyNmxpbmZvW2ldLCB1bGluZm8sIG5jb3B5KSkge1xcbiAyNjc6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gMjY4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDI2OTpcXHRcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdFxcdC8qXFxuIDI3MjpcXHRcXHRcXHQgKiBDaGVjayBpbnNuX29mZiB0byBlbnN1cmVcXG4gMjczOlxcdFxcdFxcdCAqIDEpIHN0cmljdGx5IGluY3JlYXNpbmcgQU5EXFxuIDI3NDpcXHRcXHRcXHQgKiAyKSBib3VuZGVkIGJ5IHByb2ctXFx1MDAzZWxlblxcbiAyNzU6XFx0XFx0XFx0ICpcXG4gMjc2OlxcdFxcdFxcdCAqIFRoZSBsaW5mb1swXS5pbnNuX29mZiA9PSAwIGNoZWNrIGxvZ2ljYWxseSBmYWxscyBpbnRvXFxuIDI3NzpcXHRcXHRcXHQgKiB0aGUgbGF0ZXIgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgZnVuYy4uLlxcXCIgY2FzZVxcbiAyNzg6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgZmlyc3QgbGluZm9bMF0uaW5zbl9vZmYgbXVzdCBiZSB0aGVcXG4gMjc5OlxcdFxcdFxcdCAqIGZpcnN0IHN1YiBhbHNvIGFuZCB0aGUgZmlyc3Qgc3ViIG11c3QgaGF2ZVxcbiAyODA6XFx0XFx0XFx0ICogc3VicHJvZ19pbmZvWzBdLnN0YXJ0ID09IDAuXFxuIDI4MTpcXHRcXHRcXHQgKi9cXG4gMjgyOlxcdFxcdFxcdGlmICgoaSBcXHUwMDI2XFx1MDAyNiBsaW5mb1tpXS5pbnNuX29mZiBcXHUwMDNjPSBwcmV2X29mZnNldCkgfHxcXG4gMjgzOlxcdFxcdFxcdCAgICBsaW5mb1tpXS5pbnNuX29mZiBcXHUwMDNlPSBwcm9nLVxcdTAwM2VsZW4pIHtcXG4gMjg0OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCBsaW5lX2luZm9bJXVdLmluc25fb2ZmOiV1IChwcmV2X29mZnNldDoldSBwcm9nLVxcdTAwM2VsZW46JXUpXFxcXG5cXFwiLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0aSwgbGluZm9baV0uaW5zbl9vZmYsIHByZXZfb2Zmc2V0LFxcbiAyODY6XFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbGVuKTtcXG4gMjg3OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDI4ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyODk6XFx0XFx0XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRcXHRpZiAoIXByb2ctXFx1MDAzZWluc25zaVtsaW5mb1tpXS5pbnNuX29mZl0uY29kZSkge1xcbiAyOTI6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXFwiSW52YWxpZCBpbnNuIGNvZGUgYXQgbGluZV9pbmZvWyV1XS5pbnNuX29mZlxcXFxuXFxcIixcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdGkpO1xcbiAyOTU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMjk2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDI5NzpcXHRcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdGlmICghYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0ubGluZV9vZmYpIHx8XFxuIDMwMDpcXHRcXHRcXHQgICAgIWJ0Zl9uYW1lX2J5X29mZnNldChidGYsIGxpbmZvW2ldLmZpbGVfbmFtZV9vZmYpKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkludmFsaWQgbGluZV9pbmZvWyV1XS5saW5lX29mZiBvciAuZmlsZV9uYW1lX29mZlxcXFxuXFxcIiwgaSk7XFxuIDMwMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMDM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMzA0OlxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0XFx0aWYgKHMgIT0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCkge1xcbiAzMDc6XFx0XFx0XFx0XFx0aWYgKGxpbmZvW2ldLmluc25fb2ZmID09IHN1YltzXS5zdGFydCkge1xcbiAzMDg6XFx0XFx0XFx0XFx0XFx0c3ViW3NdLmxpbmZvX2lkeCA9IGk7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRzKys7XFxuIDMxMDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHN1YltzXS5zdGFydCBcXHUwMDNjIGxpbmZvW2ldLmluc25fb2ZmKSB7XFxuIDMxMTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgZnVuYyMldVxcXFxuXFxcIiwgcyk7XFxuIDMxMjpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMTM6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMzE0OlxcdFxcdFxcdFxcdH1cXG4gMzE1OlxcdFxcdFxcdH1cXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0XFx0cHJldl9vZmZzZXQgPSBsaW5mb1tpXS5pbnNuX29mZjtcXG4gMzE4OlxcdFxcdFxcdGJwZnB0cl9hZGQoXFx1MDAyNnVsaW5mbywgcmVjX3NpemUpO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRpZiAocyAhPSBlbnYtXFx1MDAzZXN1YnByb2dfY250KSB7XFxuIDMyMjpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgJXUgZnVuY3Mgc3RhcnRpbmcgZnJvbSBmdW5jIyV1XFxcXG5cXFwiLFxcbiAzMjM6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIHMsIHMpO1xcbiAzMjQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzI1OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbGluZm8gPSBsaW5mbztcXG4gMzI5OlxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbnJfbGluZm8gPSBucl9saW5mbztcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDMzMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6MDYuOTkwMDA5OTQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3MjIwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBDb2RlIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBhIGNlcnRhaW4gY2hlY2sgaXMgaGFwcGVuaW5nIHdoZXJlIGl0IGlzLiBJdCBsb29rcyBsaWtlIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzbid0IGNvbmNlcm5lZCB3aXRoIGp1bXBzIG9yIGhvdyB0aGUgY29kZSBmbG93cyB3aXRoaW4gdGhlIHN1YnByb2dyYW1zLiBJdHMgcHJpbWFyeSBqb2Igc2VlbXMgdG8gYmUgdmFsaWRhdGluZyB0aGF0IHRoZSBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggdGhlIHN1YnByb2dyYW0gYm91bmRhcmllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpZGVudGlmaWVkIGJ5IGBhZGRfc3VicHJvZ3NgLiBTbywgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2Ug4oCTIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzIGludGVuZGVkIHRvIHByaW9yaXRpemUgcmVwb3J0aW5nIEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBzdWJwcm9ncmFtIGxheW91dC4gSXQgbWFrZXMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZXMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuXG5cbkJ1dCB3YWl0LCBhIG5hZ2dpbmcgcXVlc3Rpb246IGRvZXMgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgKmFwcGx5KiBDTy1SRSByZWxvY2F0aW9uPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBvcmRlcmluZyBpcyBldmVuIG1vcmUgY3JpdGljYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIGBjaGVja19jb3JlX3JlbG9gIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU0OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjEwLjM2NjczNDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzM6XFx0ZXJyX2ZyZWU6XFxuIDMzNDpcXHRcXHRrdmZyZWUobGluZm8pO1xcbiAzMzU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzM2OlxcdH1cXG4gMzM3OlxcdFxcbiAzMzg6XFx0I2RlZmluZSBNSU5fQ09SRV9SRUxPX1NJWkVcXHRzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pXFxuIDMzOTpcXHQjZGVmaW5lIE1BWF9DT1JFX1JFTE9fU0laRVxcdE1BWF9GVU5DSU5GT19SRUNfU0laRVxcbiAzNDA6XFx0XFxuIDM0MTpcXHRzdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAzNDI6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuIDM0MzpcXHRcXHRcXHRcXHQgICBicGZwdHJfdCB1YXR0cilcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHUzMiBpLCBucl9jb3JlX3JlbG8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBicGZfY29yZV9yZWxvIGNvcmVfcmVsbyA9IHt9O1xcbiAzNDc6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVxcdTAwM2Vwcm9nO1xcbiAzNDg6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VidGY7XFxuIDM0OTpcXHRcXHRzdHJ1Y3QgYnBmX2NvcmVfY3R4IGN0eCA9IHtcXG4gMzUwOlxcdFxcdFxcdC5sb2cgPSBcXHUwMDI2ZW52LVxcdTAwM2Vsb2csXFxuIDM1MTpcXHRcXHRcXHQuYnRmID0gYnRmLFxcbiAzNTI6XFx0XFx0fTtcXG4gMzUzOlxcdFxcdGJwZnB0cl90IHVfY29yZV9yZWxvO1xcbiAzNTQ6XFx0XFx0aW50IGVycjtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0bnJfY29yZV9yZWxvID0gYXR0ci1cXHUwMDNlY29yZV9yZWxvX2NudDtcXG4gMzU3OlxcdFxcdGlmICghbnJfY29yZV9yZWxvKVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1OTpcXHRcXHRpZiAobnJfY29yZV9yZWxvIFxcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpXFxuIDM2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0cmVjX3NpemUgPSBhdHRyLVxcdTAwM2Vjb3JlX3JlbG9fcmVjX3NpemU7XFxuIDM2MzpcXHRcXHRpZiAocmVjX3NpemUgXFx1MDAzYyBNSU5fQ09SRV9SRUxPX1NJWkUgfHxcXG4gMzY0OlxcdFxcdCAgICByZWNfc2l6ZSBcXHUwMDNlIE1BWF9DT1JFX1JFTE9fU0laRSB8fFxcbiAzNjU6XFx0XFx0ICAgIHJlY19zaXplICUgc2l6ZW9mKHUzMikpXFxuIDM2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0XFx0dV9jb3JlX3JlbG8gPSBtYWtlX2JwZnB0cihhdHRyLVxcdTAwM2Vjb3JlX3JlbG9zLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAzNjk6XFx0XFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbyk7XFxuIDM3MDpcXHRcXHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHQvKiBVbmxpa2UgZnVuY19pbmZvIGFuZCBsaW5lX2luZm8sIGNvcHkgYW5kIGFwcGx5IGVhY2ggQ08tUkVcXG4gMzczOlxcdFxcdCAqIHJlbG9jYXRpb24gcmVjb3JkIG9uZSBhdCBhIHRpbWUuXFxuIDM3NDpcXHRcXHQgKi9cXG4gMzc1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jb3JlX3JlbG87IGkrKykge1xcbiAzNzY6XFx0XFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG4gMzc3OlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAzNzg6XFx0XFx0XFx0aWYgKGVycikge1xcbiAzNzk6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcXG4gMzgwOlxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibm9uemVybyB0YWlsaW5nIHJlY29yZCBpbiBjb3JlX3JlbG9cXFwiKTtcXG4gMzgxOlxcdFxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX2JwZnB0cl9vZmZzZXQodWF0dHIsXFxuIDM4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG9mZnNldG9mKHVuaW9uIGJwZl9hdHRyLCBjb3JlX3JlbG9fcmVjX3NpemUpLFxcbiAzODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZXhwZWN0ZWRfc2l6ZSwgc2l6ZW9mKGV4cGVjdGVkX3NpemUpKSlcXG4gMzg0OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIDM4NTpcXHRcXHRcXHRcXHR9XFxuIDM4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzg3OlxcdFxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXFx1MDAyNmNvcmVfcmVsbywgdV9jb3JlX3JlbG8sIG5jb3B5KSkge1xcbiAzOTA6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gMzkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzOTI6XFx0XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRcXHRpZiAoY29yZV9yZWxvLmluc25fb2ZmICUgOCB8fCBjb3JlX3JlbG8uaW5zbl9vZmYgLyA4IFxcdTAwM2U9IHByb2ctXFx1MDAzZWxlbikge1xcbiAzOTU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJJbnZhbGlkIGNvcmVfcmVsb1sldV0uaW5zbl9vZmY6JXUgcHJvZy1cXHUwMDNlbGVuOiV1XFxcXG5cXFwiLFxcbiAzOTY6XFx0XFx0XFx0XFx0XFx0aSwgY29yZV9yZWxvLmluc25fb2ZmLCBwcm9nLVxcdTAwM2VsZW4pO1xcbiAzOTc6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzOTk6XFx0XFx0XFx0fVxcbiA0MDA6XFx0XFxuIDQwMTpcXHRcXHRcXHRlcnIgPSBicGZfY29yZV9hcHBseShcXHUwMDI2Y3R4LCBcXHUwMDI2Y29yZV9yZWxvLCBpLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZy1cXHUwMDNlaW5zbnNpW2NvcmVfcmVsby5pbnNuX29mZiAvIDhdKTtcXG4gNDAzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDA1OlxcdFxcdFxcdGJwZnB0cl9hZGQoXFx1MDAyNnVfY29yZV9yZWxvLCByZWNfc2l6ZSk7XFxuIDQwNjpcXHRcXHR9XFxuIDQwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MDg6XFx0fVxcbiA0MDk6XFx0XFxuIDQxMDpcXHRpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gNDExOlxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4gNDEyOlxcdFxcdFxcdFxcdCBicGZwdHJfdCB1YXR0cilcXG4gNDEzOlxcdHtcXG4gNDE0OlxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gNDE1OlxcdFxcdGludCBlcnI7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdGlmICghYXR0ci1cXHUwMDNlZnVuY19pbmZvX2NudCBcXHUwMDI2XFx1MDAyNiAhYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCkge1xcbiA0MTg6XFx0XFx0XFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxcbiA0MTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDIxOlxcdFxcdH1cXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVxcdTAwM2Vwcm9nX2J0Zl9mZCk7XFxuIDQyNDpcXHRcXHRpZiAoSVNfRVJSKGJ0ZikpXFxuIDQyNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihidGYpO1xcbiA0MjY6XFx0XFx0aWYgKGJ0Zl9pc19rZXJuZWwoYnRmKSkge1xcbiA0Mjc6XFx0XFx0XFx0YnRmX3B1dChidGYpO1xcbiA0Mjg6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDQyOTpcXHRcXHR9XFxuIDQzMDpcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmID0gYnRmO1xcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDoxMC4zNjY4NjI1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM3ODEzNTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgRGlhZ25vc3RpYyBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBgYnBmX2NvcmVfYXBwbHlgIGNvdWxkIGltcGFjdCBgY2hlY2tfc3VicHJvZ3NgLCB3aGljaCBkZWFscyB3aXRoIHN1YnByb2dyYW0gYm91bmRhcmllcyBhbmQganVtcHMuIFNpbmNlIENPLVJFIHJlbG9jYXRpb25zIHByaW1hcmlseSB0b3VjaCB0aGUgYGltbWAgZmllbGQgYW5kIG5vdCBqdW1wIG9mZnNldHMgb3Igb3Bjb2RlcyAoZXhjZXB0IGZvciBOT1BzIG9yIGRpcmVjdCB2YWx1ZSBsb2FkcyksIEkgZmlndXJlZCBgY2hlY2tfc3VicHJvZ3NgIHNob3VsZCBzdGlsbCBiZSBzYWZlIHRvIHJ1biBhZnRlciBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4gVGhlIHBvdGVudGlhbCBmb3IgYSBOT1AsIHdoaWxlIGEgdmFsaWQgYWx0ZXJhdGlvbiwgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWx0ZXIganVtcHMuXG5cbk5leHQsIEkgbG9va2VkIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGJleW9uZCB0aGlzIHJlb3JkZXJpbmcuIFRoZSBjb21taXQgbG9nIGFuZCB0aGUgY29kZSBjaGFuZ2VzIHBvaW50IGFsbW9zdCBlbnRpcmVseSB0b3dhcmQgaW1wcm92ZWQgZGlhZ25vc3RpY3Mg4oCTIGJldHRlciBlcnJvciBtZXNzYWdlcywgY2xlYXJlciBoaW50cywgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGUgbWFpbiBzdHJ1Y3R1cmFsIHNoaWZ0IGlzIHRoZSBtb3ZlIG9mIGBjaGVja19zdWJwcm9nc2AgKmFmdGVyKiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC5cblxuVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgY29uc3RpdHV0ZSBhIFwic2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VcIiB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRoZSBoaW50IGlzIGhlbHBmdWwuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBlc3NlbnRpYWxseSBpbXByb3ZlZCBsb2dnaW5nIGFuZCBlcnJvciByZXBvcnRpbmcsIGFuZCB0aGV5IGRvbid0IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiAqdmFsaWQqIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb24gaW52YWxpZCBwcm9ncmFtcyBhbmQgdGhlIHZlcmlmaWVyIGl0c2VsZi4gVGhlIGNoYW5nZSBhbHRlcnMgdGhlIHZlcmlmaWVyJ3MgZmFpbHVyZSBwYXRoLCBidXQgdGhlIGZ1bmRhbWVudGFsIGNoZWNrcyByZW1haW4gdGhlIHNhbWUuXG5cbkEga2V5IHBvaW50IGlzIHRoZSByYXRpb25hbGUgZm9yIHRoZSByZW9yZGVyaW5nOiBwcmlvcml0aXplIEJURiBhbmQgQ08tUkUgZXJyb3JzICpiZWZvcmUqIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlIGlkZWEgaXMgdG8gZ2l2ZSB1c2VycyB0aGUgbW9zdCByZWxldmFudCBlcnJvciBtZXNzYWdlcyBmaXJzdC4gVGhpcyBtYWtlcyB0aGUgdXNlciBleHBlcmllbmNlIGJldHRlciB3aXRoIGVycm9yIG1lc3NhZ2VzLiBFdmVuIGlmIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggc3VicHJvZ3JhbSBsYXlvdXQgYW5kIENPLVJFL0JURiwgdGhpcyBwcmlvcml0aXplcyB0aGUgQ08tUkUvQlRGIGVycm9yLiBUaGUgdmVyaWZpZXIncyBleGVjdXRpb24gcGF0aCBpcyBkaWZmZXJlbnQgaW4gdGhhdCBpdCB3aWxsIHJldHVybiBhIGRpZmZlcmVudCBlcnJvciBhbmQgcHJvZHVjZSBhIGRpZmZlcmVudCBsb2cgb3V0cHV0LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55ICpwb3RlbnRpYWwqIGZvciBjcmFzaGVzLiBJIHJldmlld2VkIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBCVEYgY2hlY2tpbmcgY29kZSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHNwZWNpZmljIHN0cnVjdHVyYWwgY2hlY2tzIHBlcmZvcm1lZCBieSBgY2hlY2tfc3VicHJvZ3NgLCBzbyBtb3ZpbmcgYGNoZWNrX3N1YnByb2dzYCBkb2Vzbid0IGludHJvZHVjZSBhIHJpc2sgb2YgYSBjcmFzaCBpbiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC5cblxuR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBleHBsaWNpdCBndWlkYW5jZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIGRpYWdub3N0aWMgYW5kIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzLCBJIHRoaW5rIHRoZSBhbnN3ZXIgaXMgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjI2Ljc0NTAwMTg1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDMzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAzMzpcXHRcXG4zMDM0OlxcdHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4zMDM1OlxcdHtcXG4zMDM2OlxcdFxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuMzAzNzpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjMwMzg6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuMzAzOTpcXHRcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4zMDQwOlxcdFxcbjMwNDE6XFx0XFx0Lyogbm93IGNoZWNrIHRoYXQgYWxsIGp1bXBzIGFyZSB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZyAqL1xcbjMwNDI6XFx0XFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2dbY3VyX3N1YnByb2ddLnN0YXJ0O1xcbjMwNDM6XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzA0NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKykge1xcbjMwNDU6XFx0XFx0XFx0dTggY29kZSA9IGluc25baV0uY29kZTtcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0XFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFxcdTAwMjZcXHUwMDI2IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpXFxuMzA0ODpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMzA0OTpcXHRcXHRcXHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxcbjMwNTA6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjMwNTE6XFx0XFx0XFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfRVhJVCkge1xcbjMwNTI6XFx0XFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uZXhpdF9pZHggPSBpO1xcbjMwNTM6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjMwNTQ6XFx0XFx0XFx0fVxcbjMwNTU6XFx0XFx0XFx0b2ZmID0gaSArIGJwZl9qbXBfb2Zmc2V0KFxcdTAwMjZpbnNuW2ldKSArIDE7XFxuMzA1NjpcXHRcXHRcXHRpZiAob2ZmIFxcdTAwM2Mgc3VicHJvZ19zdGFydCB8fCBvZmYgXFx1MDAzZT0gc3VicHJvZ19lbmQpIHtcXG4zMDU3OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwianVtcCBvdXQgb2YgcmFuZ2UgZnJvbSBpbnNuICVkIHRvICVkXFxcXG5cXFwiLCBpLCBvZmYpO1xcbjMwNTg6XFx0XFx0XFx0XFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXFxuMzA1OTpcXHRcXHRcXHRcXHRcXHRlbnYsIGksIFxcXCJqdW1wIG91dCBvZiByYW5nZVxcXCIsXFxuMzA2MDpcXHRcXHRcXHRcXHRcXHRcXFwiS2VlcCBicmFuY2ggdGFyZ2V0cyB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZ3JhbSwgb3IgdXNlIGFuIGV4cGxpY2l0IHN1YnByb2dyYW0gY2FsbC5cXFwiLFxcbjMwNjE6XFx0XFx0XFx0XFx0XFx0XFxcIkluc3RydWN0aW9uICVkIGp1bXBzIHRvIGluc3RydWN0aW9uICVkLCBidXQgc3VicHJvZ3JhbSAlZCBvbmx5IGNvbnRhaW5zIGluc3RydWN0aW9ucyAlZCB0aHJvdWdoICVkLiBcXFwiXFxuMzA2MjpcXHRcXHRcXHRcXHRcXHRcXFwiQSBicmFuY2ggdGFyZ2V0IG11c3Qgc3RheSBpbnNpZGUgdGhlIHNhbWUgc3VicHJvZ3JhbS5cXFwiLFxcbjMwNjM6XFx0XFx0XFx0XFx0XFx0aSwgb2ZmLCBjdXJfc3VicHJvZywgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQgLSAxKTtcXG4zMDY0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNjU6XFx0XFx0XFx0fVxcbjMwNjY6XFx0bmV4dDpcXG4zMDY3OlxcdFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbjMwNjg6XFx0XFx0XFx0XFx0LypcXG4zMDY5OlxcdFxcdFxcdFxcdCAqIFRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlcixcXG4zMDcwOlxcdFxcdFxcdFxcdCAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0XFxuMzA3MTpcXHRcXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cXG4zMDcyOlxcdFxcdFxcdFxcdCAqL1xcbjMwNzM6XFx0XFx0XFx0XFx0aWYgKGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkgXFx1MDAyNlxcdTAwMjZcXG4zMDc0OlxcdFxcdFxcdFxcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFxcdTAwMjZcXHUwMDI2XFxuMzA3NTpcXHRcXHRcXHRcXHQgICAgY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9KQSkpIHtcXG4zMDc2OlxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcXFxuXFxcIik7XFxuMzA3NzpcXHRcXHRcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4zMDc4OlxcdFxcdFxcdFxcdFxcdFxcdGVudiwgaSwgXFxcInN1YnByb2dyYW0gY2FuIGZhbGwgdGhyb3VnaFxcXCIsXFxuMzA3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiRW5kIGVhY2ggc3VicHJvZ3JhbSB3aXRoIGFuIGV4aXQgb3IgYW4gZXhwbGljaXQganVtcCB0aGF0IGtlZXBzIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIHN1YnByb2dyYW0uXFxcIixcXG4zMDgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJTdWJwcm9ncmFtICVkIHJlYWNoZXMgaXRzIGxhc3QgaW5zdHJ1Y3Rpb24gJWQgd2l0aG91dCBhbiBleGl0IG9yIGp1bXAsIHNvIGNvbnRyb2wgY291bGQgY29udGludWUgaW50byB0aGUgbmV4dCBzdWJwcm9ncmFtLlxcXCIsXFxuMzA4MTpcXHRcXHRcXHRcXHRcXHRcXHRjdXJfc3VicHJvZywgaSk7XFxuMzA4MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDgzOlxcdFxcdFxcdFxcdH1cXG4zMDg0OlxcdFxcdFxcdFxcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nX2VuZDtcXG4zMDg1OlxcdFxcdFxcdFxcdGN1cl9zdWJwcm9nKys7XFxuMzA4NjpcXHRcXHRcXHRcXHRpZiAoY3VyX3N1YnByb2cgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250KVxcbjMwODc6XFx0XFx0XFx0XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzA4ODpcXHRcXHRcXHR9XFxuMzA4OTpcXHRcXHR9XFxuMzA5MDpcXHRcXHRyZXR1cm4gMDtcXG4zMDkxOlxcdH1cXG4zMDkyOlxcdFxcbjMwOTM6XFx0LypcXG4zMDk0OlxcdCAqIFNvcnQgc3VicHJvZ3MgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgc28gdGhhdCBsZWFmIHN1YnByb2dzIGNvbWUgZmlyc3QgYW5kXFxuMzA5NTpcXHQgKiB0aGVpciBjYWxsZXJzIGNvbWUgbGF0ZXIuIFRoaXMgaXMgYSBERlMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIGNhbGxcXG4zMDk2OlxcdCAqIGdyYXBoLiBTY2FuIG9ubHkgcmVhY2hhYmxlIGluc3RydWN0aW9ucyAodGhvc2UgaW4gdGhlIGNvbXB1dGVkIHBvc3RvcmRlcikgb2ZcXG4zMDk3OlxcdCAqIHRoZSBjdXJyZW50IHN1YnByb2cgdG8gZGlzY292ZXIgY2FsbGVlcyAoZGlyZWN0IHN1YnByb2dzIGFuZCBzeW5jXFxuMzA5ODpcXHQgKiBjYWxsYmFja3MpLlxcbjMwOTk6XFx0ICovXFxuMzEwMDpcXHRzdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMxMDE6XFx0e1xcbjMxMDI6XFx0XFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnNpID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm87XFxuMzEwMzpcXHRcXHRpbnQgKmluc25fcG9zdG9yZGVyID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XFxuMzEwNDpcXHRcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4zMTA1OlxcdFxcdGludCBjbnQgPSBlbnYtXFx1MDAzZXN1YnByb2dfY250O1xcbjMxMDY6XFx0XFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xcbjMxMDc6XFx0XFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcXG4zMTA4OlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjMxMDk6XFx0XFx0dTggKmNvbG9yID0gTlVMTDtcXG4zMTEwOlxcdFxcbjMxMTE6XFx0XFx0Y29sb3IgPSBrdnphbGxvY19vYmpzKCpjb2xvciwgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjMxMTI6XFx0XFx0ZGZzX3N0YWNrID0ga3ZtYWxsb2Nfb2JqcygqZGZzX3N0YWNrLCBjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMzExMzpcXHRcXHRpZiAoIWNvbG9yIHx8ICFkZnNfc3RhY2spIHtcXG4zMTE0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMzExNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTE2OlxcdFxcdH1cXG4zMTE3OlxcdFxcbjMxMTg6XFx0XFx0LypcXG4zMTE5OlxcdFxcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cXG4zMTIwOlxcdFxcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cXG4zMTIxOlxcdFxcdCAqL1xcbjMxMjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuMzEyMzpcXHRcXHRcXHRpZiAoY29sb3JbaV0pXFxuMzEyNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMTI1OlxcdFxcdFxcdGNvbG9yW2ldID0gMTtcXG4zMTI2OlxcdFxcdFxcdGRmc19zdGFja1t0b3ArK10gPSBpO1xcbjMxMjc6XFx0XFxuMzEyODpcXHRcXHRcXHR3aGlsZSAodG9wIFxcdTAwM2UgMCkge1xcbjMxMjk6XFx0XFx0XFx0XFx0aW50IGN1ciA9IGRmc19zdGFja1t0b3AgLSAxXTtcXG4zMTMwOlxcdFxcdFxcdFxcdGludCBwb19zdGFydCA9IHNpW2N1cl0ucG9zdG9yZGVyX3N0YXJ0O1xcbjMxMzE6XFx0XFx0XFx0XFx0aW50IHBvX2VuZCA9IHNpW2N1ciArIDFdLnBvc3RvcmRlcl9zdGFydDtcXG4zMTMyOlxcdFxcdFxcdFxcdGJvb2wgcHVzaGVkID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjI2Ljc0NjUxODUzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQzNzIzNDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1bmN0aW9uYWwgSW1wYWN0KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgYSBCUEYgdmVyaWZpZXIgcGF0Y2ggdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gdGhlIGRpZmYsIGlzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IGFib3V0IGRpYWdub3N0aWNzIGFuZCBlcnJvciByZXBvcnRpbmcsIHdpdGggc29tZSBjb2RlIHJlb3JnYW5pemF0aW9uIHRvIHN1cHBvcnQgdGhpcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LlxuXG5GaXJzdCwgdGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVvcmRlcmluZyBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuICBgY2hlY2tfc3VicHJvZ3NgIHZhbGlkYXRlcyBqdW1wIGJvdW5kYXJpZXMgd2l0aGluIHN1YnByb2dyYW1zLCB3aGlsZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB1c2VzIEJURiBpbmZvcm1hdGlvbiB0byBlbnN1cmUgY29ycmVjdG5lc3MuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHJlb3JkZXJpbmcgKmNoYW5nZXMqIGhvdyB2YWxpZCBwcm9ncmFtcyBhcmUgdHJlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgKmludHJvZHVjZSogbmV3IGNoZWNrcyB3aXRoaW4gYGJwZl9jaGVja19idGZfaW5mb2AsIGl0J3MgcHJpbWFyaWx5IGVuc3VyaW5nIHRoYXQgQlRGIGluZm9ybWF0aW9uIGFsaWducyB3aXRoIHN1YnByb2dyYW0gZGVmaW5pdGlvbnMgZGlzY292ZXJlZCBpbiBgYWRkX3N1YnByb2dzYCwgd2hpY2ggaW4gdHVybiBpcyBiYXNlZCBvbiBgQ0FMTGAgaW5zdHJ1Y3Rpb25zLiBUaGVyZWZvcmUsIGFzc3VtaW5nIHRoZSBCVEYgbWV0YWRhdGEgcmVtYWlucyBjb25zaXN0ZW50IGFuZCB0aGUgcmVvcmRlcmluZyBkb2Vzbid0IGV4cG9zZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyByZWFkL2ludGVycHJldGVkLCB0aGlzIHJlb3JkZXJpbmcgc2hvdWxkbid0IGFmZmVjdCB0aGUgYWNjZXB0YW5jZSBvZiB2YWxpZCBwcm9ncmFtcy4gSSdtIGZvY3VzaW5nIG9uIFwiZG9lc24ndCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgKnZhbGlkKiBwcm9ncmFtc1wiLCBhcyB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBkaWFnbm9zdGljcyBtaWdodCBpbmNyZWFzZSB0aGUgcmVqZWN0aW9uIG9mICppbnZhbGlkKiBwcm9ncmFtcyBvciwgbW9yZSBsaWtlbHksIHByb3ZpZGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciByZWplY3RlZCAqaW52YWxpZCogcHJvZ3JhbXMuXG5cbk5leHQsIEkgc2VlIHNldmVyYWwgZGlhZ25vc3RpYyBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGVzZSBhcHBlYXIgdG8gYmUgcmVmaW5lbWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgZm9yIHNwZWNpZmljIGtmdW5jIGFyZ3VtZW50IGNoZWNrcy4gVGhpcyBpcyBiYXNpY2FsbHkgbG9nZ2luZyBhbmQgZG9lc24ndCBjaGFuZ2Ugd2hhdCBpcyBhbmQgaXNuJ3QgYWNjZXB0ZWQgYXMgdmFsaWQgQlBGIGNvZGUuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgb3Igc3BlY2lmaWMgYWJvdXQgKndoeSogYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGlzIGZhaWxpbmcgdmFsaWRhdGlvbi5cblxuSSdtIGFsc28gc2VlaW5nIGltcHJvdmVtZW50cyB0byB0aGUgZXJyb3IgbWVzc2FnZXMgYXJvdW5kIHNsZWVwYWJsZSBrZnVuYyBjYWxscyBpbiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHRocm93aW5nIGFuIGAtRUFDQ0VTYCBlcnJvciBpbiBtdWx0aXBsZSBwbGFjZXMgZm9yIHZhcmlvdXMgc2NlbmFyaW9zIChhIHByb2dyYW0gdGhhdCB3YXNuJ3Qgc2xlZXBhYmxlIGNhbGxpbmcgYSBzbGVlcGFibGUga2Z1bmMsIGEgcHJvZ3JhbSBjYWxsaW5nIGl0IGZyb20gaW5zaWRlIGFuIFJDVSByZWFkIGxvY2ssIGV0Yy4pLiBUaGVzZSBjaGFuZ2VzIGNvbnNvbGlkYXRlIHRoZSBjaGVja3MgYXJvdW5kIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCB0byBoYW5kbGUgYWxsIHRob3NlIHNpdHVhdGlvbnMgaW4gb25lIHBsYWNlLiBJIGR1ZyBpbiBhbmQgdmVyaWZpZWQgdGhhdCB0aGUgYmVoYXZpb3IgcmVtYWlucyB0aGUgc2FtZTogdGhlIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZC4gTm93IGl0IGlzIGp1c3QgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBzb21lIGNoZWNrcyBhcmUgc2tpcHBlZCB0aGF0IGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIGFueXdheS4gVGhlICpvcmRlciogb2YgZXJyb3IgcmVwb3J0aW5nICppcyogY2hhbmdlZCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgcmVmaW5lZCB0byBzdWdnZXN0IGhvdyB0byBmaXggdGhlIHByb2JsZW0gbW9yZSBjbGVhcmx5LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHRoZSBhY2NlcHRhbmNlIG9mIHZhbGlkIHByb2dyYW1zLlxuXG5JIHdlbnQgYmFjayBhbmQgY2hlY2tlZCBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgIGJlY2F1c2UgaXQgd2FzIG5ldyBpbiB0aGUgZGlmZi4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYGhhc19sZF9hYnNgIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgaXMgcmVxdWlyZWQgYnkgYGNoZWNrX2J0Zl9mdW5jYCBzbyB0aGF0IGl0IGRvZXNuJ3QgYWxsb3cgTERfQUJTIGluc3RydWN0aW9ucyBpbiBmdW5jdGlvbnMgdGhhdCBkb24ndCByZXR1cm4gYW4gaW50LiBUaGUgbmV3IGZ1bmN0aW9uIGlzICpleGFjdGx5KiB0aGUgc2FtZSBsb2dpYyBhcyB3aGF0IHdhcyBpbiBgY2hlY2tfc3VicHJvZ3NgIG9yaWdpbmFsbHkuIEl0cyBwdXJwb3NlIGlzIHRvIHByZS1jYWxjdWxhdGUgYGhhc19sZF9hYnNgIGJlZm9yZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBpcyBydW4gdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSByZW9yZGVyaW5nLlxuXG5CYXNlZCBvbiBhbGwgdGhpcywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IG9mIHRoZSBmdW5kYW1lbnRhbCBjaGVja3MgdGhhdCAqd291bGQgYWxsb3cqIHZhbGlkIHByb2dyYW1zIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlamVjdGVkLCBvciAqcmVqZWN0KiBwcm9ncmFtcyB0aGF0IHdlcmUgcHJldmlvdXNseSB2YWxpZC4gQWxsIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGZvciBpbXByb3ZlZCBkaWFnbm9zdGljIG1lc3NhZ2luZyBhbmQgaW1wcm92ZWQgY29kZSBzdHJ1Y3R1cmUgdG8gZW5zdXJlIHRoYXQgYmV0dGVyIGVycm9yIG1lc3NhZ2luZyBjYW4gYmUgcHJvdmlkZWQuIFRoaXMgcGF0Y2ggaXMgdGhlcmVmb3JlIGFib3V0IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZVwiLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDo0OC4xODM3NTU1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMxNDk0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzX3RhaWxfY2FsbCA9IHRydWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTMwMDY9c3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE5LVxcdFxcdCAgICBpbnNuW2ldLmltbSA9PSBCUEZfRlVOQ190YWlsX2NhbGwpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzAyMDpcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS5oYXNfdGFpbF9jYWxsID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAyMS1cXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6NDkuNDk2OTA4NTE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjgyMjYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGhhc190YWlsX2NhbGxgIEZsYWcgaW4gQlBGIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIHJlYWxpemVkIEkgbWlzc2VkIHNvbWV0aGluZy4gSSB0aG91Z2h0IGBoYXNfdGFpbF9jYWxsYCB3YXMgcG9wdWxhdGVkIHdpdGhpbiBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBkaWZmIGZvciBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgICpkb2Vzbid0KiBhY3R1YWxseSBzaG93IGl0IGJlaW5nIHNldCB0aGVyZSEgSSB3YXMgc28gc3VyZSBJIGhhZCBzZWVuIHRoYXQgZmxhZyBiZWluZyBwb3B1bGF0ZWQgZHVyaW5nIHRoYXQgZnVuY3Rpb24uXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaC4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgZm9yIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgZXhwbGljaXRseSBzaG93cyBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGhhc190YWlsX2NhbGxgLiBUaGlzIGlzIHN0cmFuZ2UuXG5cbk5vdyBJIGFtIGN1cmlvdXMuIFdoZXJlIGlzIGBoYXNfdGFpbF9jYWxsYCBhY3R1YWxseSBiZWluZyBzZXQ/IFRpbWUgdG8gbG9vayBhdCB0aGUgcmVhbCBzb3VyY2UgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB3b3JraW5nLiBJJ2xsIG5lZWQgdG8gZ28gdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDMwMjAgYW5kIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6NTQuMzI1MTM5MDA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwNjpcXHRzdGF0aWMgdm9pZCBmaW5kX3N1YnByb2dfcHJvcGVydGllcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMwMDc6XFx0e1xcbjMwMDg6XFx0XFx0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XFxuMzAwOTpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjMwMTA6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuMzAxMTpcXHRcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4zMDEyOlxcdFxcbjMwMTM6XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzAxNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKykge1xcbjMwMTU6XFx0XFx0XFx0dTggY29kZSA9IGluc25baV0uY29kZTtcXG4zMDE2OlxcdFxcbjMwMTc6XFx0XFx0XFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXFx1MDAyNlxcdTAwMjZcXG4zMDE4OlxcdFxcdFxcdCAgICBpbnNuW2ldLnNyY19yZWcgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjMwMTk6XFx0XFx0XFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xcbjMwMjA6XFx0XFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX3RhaWxfY2FsbCA9IHRydWU7XFxuMzAyMTpcXHRcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcXG4zMDIyOlxcdFxcdFxcdH1cXG4zMDIzOlxcdFxcdFxcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuMzAyNDpcXHRcXHRcXHQgICAgKEJQRl9NT0RFKGNvZGUpID09IEJQRl9BQlMgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX0lORCkpXFxuMzAyNTpcXHRcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS5oYXNfbGRfYWJzID0gdHJ1ZTtcXG4zMDI2OlxcdFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbjMwMjc6XFx0XFx0XFx0XFx0Y3VyX3N1YnByb2crKztcXG4zMDI4OlxcdFxcdFxcdFxcdGlmIChjdXJfc3VicHJvZyBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQpXFxuMzAyOTpcXHRcXHRcXHRcXHRcXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcXG4zMDMwOlxcdFxcdFxcdH1cXG4zMDMxOlxcdFxcdH1cXG4zMDMyOlxcdH1cXG4zMDMzOlxcdFxcbjMwMzQ6XFx0c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMwMzU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDo1NC4zMjYwMDkzNTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ3Mzk0ODQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aHJvd24gb2ZmIGEgYml0LiBJIHRob3VnaHQgdGhlIGBoYXNfdGFpbF9jYWxsYCBjaGVjayB3YXMgbWlzc2luZywgYnV0IG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBjb2RlLiBUaGUga2V5IGlzIHRvIHNlZSB0aGF0IHRoZSBgaGFzX3RhaWxfY2FsbGAgcGFydCB3YXMgKmFscmVhZHkqIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIGBjaGVja19zdWJwcm9nc2AgZnVuY3Rpb24gYW5kIHNpbXBseSBtb3ZlZCBhbG9uZyB3aXRoIGBoYXNfbGRfYWJzYCBkdXJpbmcgdGhlIHJlZmFjdG9yIHRvIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AuIEl0IHdhc24ndCBhY3R1YWxseSBhIG5ldyBhZGRpdGlvbi4gSSBtaXNzZWQgaXQgYXQgZmlyc3QgYmVjYXVzZSBpdCB3YXNuJ3QgZXhwbGljaXRseSBzaG93biBpbiB0aGUgZGlmZiwgYW5kIHdhcyBzaW1wbHkgcGFydCBvZiB0aGUgbG9vcC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZSwgdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBhYm91dCBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJ3MgZGlhZ25vc3RpY3MuIFRoZSBjaGFuZ2VzIGluIGBicGZfY2hlY2tgIGFyZSBqdXN0IGFib3V0IHJlb3JkZXJpbmcgY2hlY2tzIGFuZCBpbiBgaW5fc2xlZXBhYmxlX2NvbnRleHRgIGlzIGFib3V0IHRoZSBlcnJvciByZXBvcnRpbmcgcGF0aCwgYW5kIGBicGZfZGlhZ18qYCBhcmUgcHVyZWx5IGNvc21ldGljLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24gaXRzZWxmLiBWYWxpZCBwcm9ncmFtcyB3aWxsIHN0aWxsIHdvcmsgYXMgYmVmb3JlLCBhbmQgdGhlIHNldCBvZiBhY2NlcHRlZCBwcm9ncmFtcyBpcyB1bmNoYW5nZWQuIFRoaXMgaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlxuXG5UaGUgZm9jdXMgaGVyZSBpcyBlcnJvciBtZXNzYWdlIGNsYXJpdHkgYW5kIG9yZGVyLCB3aGljaCBpcyByZWFsbHkganVzdCBhbiBpbXByb3ZlbWVudCBpbiBkZWJ1Z2dpbmcsIHJhdGhlciB0aGFuIGZ1bmN0aW9uYWxpdHkuIFNvLCB0aGUgY2hhbmdlcyBoZXJlIGFyZSBlZmZlY3RpdmVseSBqdXN0IGxvZ2dpbmcvZXJyb3IgcmVwb3J0aW5nIGVuaGFuY2VtZW50cy4gTXkgdW5kZXJzdGFuZGluZyBvZiBmdXp6aW5nIGlzIHRoYXQgaXQncyBtZWFudCB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyBvciBidWdzLCBzdWNoIGFzIG1lbW9yeSBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBsb2dpYyBmbGF3cyBpbiAqZXhlY3V0aW9uKi5cblxuSSB3ZW50IGJhY2sgYW5kIHJldmlld2VkIHRoZSBwcm9tcHQsIGp1c3QgdG8gZG91YmxlLWNoZWNrLiBJdCBzYWlkIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZXJlIGFyZTpcbiogRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudCBjaGFuZ2VzXG4qIExvZ2dpbmcgb3IgdHJhY2Vwb2ludCBjaGFuZ2VzXG4qIE51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvIGNoYW5nZXMgdGhhdCAqZG9uJ3QqIGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuXG5JbiB0aGlzIGNhc2UsIHRoZSB2ZXJpZmllciBkaWFnbm9zdGljcyBhcmUgZXNzZW50aWFsbHkgbG9nZ2luZy9lcnJvciByZXBvcnRpbmcuIENoYW5naW5nIHRoZSAqdGV4dCogb2YgYW4gZXJyb3IgbWVzc2FnZSBvciB0aGUgb3JkZXIgaW4gd2hpY2ggdHdvIHZhbGlkYXRpb24gc3RlcHMgYXJlIHBlcmZvcm1lZCB3aGVuIGJvdGggbXVzdCBwYXNzIGFueXdheSAocmVnYXJkbGVzcyBvZiBvcmRlcikgZG9lc24ndCBjcmVhdGUgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJpY2F0ZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emluZy4gVGhlcmVmb3JlLCBubyBuZXcgYXR0YWNrIHN1cmZhY2UuXG5cblRodXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEzOCwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTU6MDMuNzk5OTYwMDM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTU6MDMuNzk5OTg1MzU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9x4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 02:09:38 +0000 UTC FinishedAt: 2026-08-16 02:15:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE0Yzg4NzI5YjQ3NjM0N2NiYmMxZjE1ZTRjODI5NDViNDE3NjU4ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWI5ZDc2Nzg5NWM5MS4uNjk2N2Q0OGJiYTQ5ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC0xMTY5LDE5ICYjNDM7MTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXG4gXHRcdFx0aWQgPSB0LVx1MDAzZXR5cGU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRnb3RvIHJlc29sdmVkO1xuIFx0XHR9XG4mIzQzO1x0XHR0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctXHUwMDNlYnRmLCBpZCk7XG4gXHRcdGlmICghaWQpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy1cdTAwM2VidGYsIGlkKTtcbiBcdH1cbiBcdC8qIFdlIG1heSBub3QgYmUgYWJsZSB0byByZXByZXNlbnQgdGhpcyB0eXBlOyBiYWlsIHRvIGJlIHNhZmUgKi9cbiBcdGlmIChpID09IEJURl9TSE9XX01BWF9JVEVSKVxuIFx0XHRyZXR1cm4gXCYjMzQ7XCYjMzQ7O1xuIFxuJiM0MztyZXNvbHZlZDpcbiBcdGlmICghbmFtZSlcbi1cdFx0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzaG93LVx1MDAzZWJ0ZiwgdC1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHRuYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/IFwmIzM0O3ZvaWRcJiMzNDsgOiBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuIFxuIFx0c3dpdGNoIChCVEZfSU5GT19LSU5EKHQtXHUwMDNlaW5mbykpIHtcbiBcdGNhc2UgQlRGX0tJTkRfU1RSVUNUOlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCAwZjEzYzEzZjQxMzM3Li45NWM1OWY2Y2Y3MGFlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTI4Nyw3ICYjNDM7Mjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuICAqIGNvbWJpbmVkIGp1bXAgdGFibGUgaW4ganQtXHUwMDNlaXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbiYjNDM7XHRcdFx0XHRcdCAgaW50IGluc25faWR4LCBpbnQgc3VicHJvZ19zdGFydCwgaW50IHN1YnByb2dfZW5kKVxuIHtcbiBcdHN0cnVjdCBicGZfaWFycmF5ICpqdCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuQEAgLTMyNyw3ICYjNDM7MzI3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICghanQpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O25vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0ICV1XFxuXCYjMzQ7LCBzdWJwcm9nX3N0YXJ0KTtcbiBcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4tXHRcdFx0ZW52LCBzdWJwcm9nX3N0YXJ0LCBcJiMzNDttaXNzaW5nIGp1bXAgdGFibGVcJiMzNDssXG4mIzQzO1x0XHRcdGVudiwgaW5zbl9pZHgsIFwmIzM0O21pc3NpbmcganVtcCB0YWJsZVwmIzM0OyxcbiBcdFx0XHRcJiMzNDtNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLlwmIzM0OyxcbiBcdFx0XHRcJiMzNDtObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXCYjMzQ7LFxuIFx0XHRcdHN1YnByb2dfc3RhcnQpO1xuQEAgLTM0OSw3ICYjNDM7MzQ5LDcgQEAgY3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuIFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2ctXHUwMDNlc3RhcnQ7XG4gXHRzdWJwcm9nX2VuZCA9IChzdWJwcm9nICYjNDM7IDEpLVx1MDAzZXN0YXJ0O1xuLVx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4mIzQzO1x0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCB0LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4gXHRpZiAoSVNfRVJSKGp0KSlcbiBcdFx0cmV0dXJuIGp0O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xuaW5kZXggMzNiN2Q5ZThlMmMzYS4uNDRkMGI3YzVmMDVmNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG5AQCAtODMzLDExICYjNDM7ODMzLDkgQEAgc3RhdGljIHZvaWQgYnBmX2RpYWdfc291cmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgY29uc3QgY2hcbiBcdGxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LVx1MDAzZXByb2csIGluc25faWR4KTtcbiBcdGlmIChidGYgXHUwMDI2XHUwMDI2IGxpbmZvKVxuIFx0XHRicGZfZ2V0X2xpbmZvX3NvdXJjZShidGYsIGxpbmZvLCBcdTAwMjZzcmMpO1xuLVx0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlIHx8ICFzcmMubGluZSB8fCAhKnNyYy5saW5lKSB7XG4mIzQzO1x0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcJiMzNDsgIGluc24gJXVcXG5cJiMzNDssIGluc25faWR4KTtcbi1cdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIDAsIDAsIGxhYmVsLCBtc2cpO1xuLVx0XHRkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuJiM0MztcdFx0Z290byBvdXRfYW5ub3RhdGlvbjtcbiBcdH1cbiBcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBpbnNuX2lkeCk7XG5AQCAtODQ3LDYgJiM0Mzs4NDUsOCBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaFxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCYjMzQ7ICAlcyBAICVzOiVkOiVkXFxuXCYjMzQ7LCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xuIFx0ZWxzZVxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCYjMzQ7ICAlczolZDolZFxcblwmIzM0Oywgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTtcbiYjNDM7XHRpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpXG4mIzQzO1x0XHRnb3RvIG91dF9hbm5vdGF0aW9uO1xuIFxuIFx0c3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7XG4gXHRlbmRfbGluZSA9IHNyYy5saW5lX251bSAmIzQzOyBCUEZfRElBR19DT05URVhUO1xuQEAgLTg4OSw3ICYjNDM7ODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIHdpZHRoLCBpbmRlbnQsIGxhYmVsLCBtc2cpO1xuIFx0fVxuIFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbiYjNDM7XHRnb3RvIG91dF9yZXN0b3JlO1xuIFxuJiM0MztvdXRfYW5ub3RhdGlvbjpcbiYjNDM7XHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XG4mIzQzO1x0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbiBvdXRfcmVzdG9yZTpcbiBcdGRpYWdfZm10X3Jlc3RvcmUoZW52LCBtYXJrKTtcbiB9XG5AQCAtMTA4Myw3ICYjNDM7MTA4Nyw5IEBAIHZvaWQgYnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsXG4gXHRjb25zdCBjaGFyICpjb25zdHJhaW50LCAqY29udGV4dDtcbiBcdHUzMiBkZXB0aDtcbiBcbi1cdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4mIzQzO1x0aWYgKCFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSlcbiYjNDM7XHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9OT05FO1xuJiM0MztcdGVsc2UgaWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcbiBcdFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX1JDVTtcbiBcdGVsc2UgaWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXG4gXHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9QUkVFTVBUO1xuQEAgLTE1MzEsOCAmIzQzOzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0fSBlbHNlIGlmIChkaWFnX21vZF9pbnNuX29yaWdpbihlbnYsIGluc25faWR4LCBcdTAwMjZ0YXJnZXQsIFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XG4gXHRcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xuIFx0fVxuLVx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgfHwgcmVhc29uID09IEJQRl9ESUFHX01PRF9TUElMTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW1lbWNtcChcdTAwMjZldmVudC5tb2Qub2xkLCBcdTAwMjZldmVudC5tb2QubmV3LCBzaXplb2YoZXZlbnQubW9kLm9sZCkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFldmVudC5tb2Qub3JpZ2luX3ZhbGlkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGRpYWdfbW9kX2tlZXBzX2xpbmVhZ2UoZW52LCBcdTAwMjZldmVudCkpXG5AQCAtMjE2NCw3ICYjNDM7MjE2OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpkaWFnX21vZF90YXJnZXRfZGVzYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Y2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1JFRzpcbiBcdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O1IldVwmIzM0OywgdGFyZ2V0LVx1MDAzZXJlZ25vKTtcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19BUkc6XG4tXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzdGFjayBhcmclZFwmIzM0OywgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtXHUwMDNlc3RhY2tfYXJnKSk7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7KihSMTEtJXUpXCYjMzQ7LCAodGFyZ2V0LVx1MDAzZXN0YWNrX2FyZyAmIzQzOyAxKSAqIEJQRl9SRUdfU0laRSk7XG4gXHRjYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVDpcbiBcdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O3N0YWNrIHNsb3QgZnAlZFwmIzM0OywgLSh0YXJnZXQtXHUwMDNlc3BpICYjNDM7IDEpICogQlBGX1JFR19TSVpFKTtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAwYmI3ZWU5NWM4YmQyLi43NzAzM2NmMzczNGE1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yOTEyLDYgJiM0MzsyOTEyLDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiBcdGludCBpLCByZXQsIGluc25fY250ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuJiM0MztcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwgKnN1Z2dlc3Rpb247XG4gXG4gXHQvKiBBZGQgZW50cnkgZnVuY3Rpb24uICovXG4gXHRyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApO1xuQEAgLTI5MjMsMTEgJiM0MzsyOTI0LDE4IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICghZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4mIzQzO1x0XHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbiYjNDM7XHRcdFx0XHRvcGVyYXRpb24gPSBcJiMzNDtCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXCYjMzQ7O1xuJiM0MztcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXCYjMzQ7O1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdG9wZXJhdGlvbiA9IFwmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbFwmIzM0OztcbiYjNDM7XHRcdFx0XHRzdWdnZXN0aW9uID0gXCYjMzQ7TG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXCYjMzQ7O1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2xvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCBmb3IgQ0FQX0JQRiBhbmQgQ0FQX1NZU19BRE1JTlxcblwmIzM0Oyk7XG4gXHRcdFx0YnBmX2RpYWdfcG9saWN5KFxuLVx0XHRcdFx0ZW52LCBpLCBcJiMzNDtCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcJiMzNDssXG4mIzQzO1x0XHRcdFx0ZW52LCBpLCBvcGVyYXRpb24sXG4gXHRcdFx0XHRcJiMzNDtsb2FkaW5nIG9yIGNhbGxpbmcgb3RoZXIgQlBGIGZ1bmN0aW9ucyByZXF1aXJlcyBDQVBfQlBGIG9yIENBUF9TWVNfQURNSU5cJiMzNDssXG4tXHRcdFx0XHRcJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHN1Z2dlc3Rpb24pO1xuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbkBAIC0yOTk1LDE1ICYjNDM7MzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4mIzQzO3N0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuLVx0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbiYjNDM7XHRpbnQgaSwgc3VicHJvZ19lbmQsIGN1cl9zdWJwcm9nID0gMDtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcbi1cdC8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi9cbi1cdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbiBcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuQEAgLTMwMTcsNiAmIzQzOzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChCUEZfTU9ERShjb2RlKSA9PSBCUEZfQUJTIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTkQpKVxuIFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlO1xuJiM0MztcdFx0aWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7XG4mIzQzO1x0XHRcdGN1cl9zdWJwcm9nJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKGN1cl9zdWJwcm9nIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQpXG4mIzQzO1x0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuJiM0MztcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0Lyogbm93IGNoZWNrIHRoYXQgYWxsIGp1bXBzIGFyZSB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZyAqL1xuJiM0MztcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbiYjNDM7XHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5zbl9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuJiM0MztcbiBcdFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFx1MDAyNlx1MDAyNiBCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUDMyKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfQ0FMTClcbkBAIC0zMDM4LDkgJiM0MzszMDY1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0fVxuIG5leHQ6XG4gXHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuLVx0XHRcdC8qIHRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlclxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUbyBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIsXG4gXHRcdFx0ICogdGhlIGxhc3QgaW5zbiBvZiB0aGUgc3VicHJvZyBzaG91bGQgYmUgZWl0aGVyIGV4aXRcbi1cdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxuJiM0MztcdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9FWElUKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgY29kZSAhPSAoQlBGX0pNUDMyIHwgQlBGX0pBKSBcdTAwMjZcdTAwMjZcbkBAIC0zMTI2LDggJiM0MzszMTU0LDkgQEAgc3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4gXHRcdFx0XHRcdFx0ZW52LCBpZHgsIFwmIzM0O3JlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcJiMzNDssXG4gXHRcdFx0XHRcdFx0XCYjMzQ7UmV3cml0ZSB0aGUgcmVjdXJzaW9uIGFzIGFuIGV4cGxpY2l0IGJvdW5kZWQgbG9vcCwgb3Igc3BsaXQgdGhlIGxvZ2ljIHNvIHN1YnByb2dyYW0gY2FsbHMgZG8gbm90IGZvcm0gYSBjeWNsZS5cJiMzNDssXG4tXHRcdFx0XHRcdFx0XCYjMzQ7VGhpcyBicGYyYnBmIGNhbGwgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gXCYjMzQ7XG4tXHRcdFx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0XHRcJiMzNDtUaGUgY2FsbCBmcm9tICVzKCkgdG8gJXMoKSB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdGJwZl9zdWJwcm9nX25hbWUoZW52LCBjdXIpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgY2FsbGVlKSk7XG4gXHRcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdFx0fVxuQEAgLTM4MTcsMTkgJiM0MzszODQ2LDQ2IEBAIHN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxuLVx0XHRcdFx0ICAgICAgIGludCBzaXplKVxuJiM0MztzdGF0aWMgdm9pZCBicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZiwgaW50IGksIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ZW51bSBicGZfc3RhY2tfc2xvdF90eXBlIHR5cGUpXG4ge1xuLVx0Y29uc3QgY2hhciAqcmVhc29uO1xuJiM0MztcdGNvbnN0IGNoYXIgKnByb2JsZW0sICpyZWFzb24sICpzdWdnZXN0aW9uLCAqa2luZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHR5cGUgPT0gU1RBQ0tfSU5WQUxJRCkge1xuJiM0MztcdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxuJiM0MztcdFx0XHRlbnYsIFwmIzM0O1RoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O1Byb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLlwmIzM0OyxcbiYjNDM7XHRcdFx0c2l6ZSwgb2ZmLCBpKTtcbiYjNDM7XHRcdGJwZl9kaWFnX21lbW9yeShcbiYjNDM7XHRcdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwmIzM0O3VuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZFwmIzM0OywgcmVhc29uLFxuJiM0MztcdFx0XHRcJiMzNDtJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O29yIGxvYWQgd2l0aCBDQVBfUEVSRk1PTiBpZiB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzIGFyZSBpbnRlbmRlZC5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiBcJiMzNDtcbi1cdFx0XCYjMzQ7UHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuXCYjMzQ7LFxuLVx0XHRzaXplLCBvZmYsIGkpO1xuLVx0YnBmX2RpYWdfbWVtb3J5KFxuLVx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7dW5pbml0aWFsaXplZCBzdGFjayByZWFkXCYjMzQ7LCByZWFzb24sXG4tXHRcdFwmIzM0O0luaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCBcJiMzNDtcbi1cdFx0XCYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlwmIzM0Oyk7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBTVEFDS19EWU5QVFI6XG4mIzQzO1x0XHRraW5kID0gXCYjMzQ7ZHlucHRyXCYjMzQ7O1xuJiM0MztcdFx0c3VnZ2VzdGlvbiA9IFwmIzM0O1VzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MgdG8gYWNjZXNzIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYnkgdGhlIGR5bnB0ciBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGR5bnB0ciBzdGF0ZSBkaXJlY3RseS5cJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNUQUNLX0lURVI6XG4mIzQzO1x0XHRraW5kID0gXCYjMzQ7aXRlcmF0b3JcJiMzNDs7XG4mIzQzO1x0XHRzdWdnZXN0aW9uID0gXCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jcyB0byBhZHZhbmNlIG9yIGRlc3Ryb3kgdGhlIGl0ZXJhdG9yIGluc3RlYWQgb2YgcmVhZGluZyBpdHMgc3RhdGUgZGlyZWN0bHkuXCYjMzQ7O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbiYjNDM7XHRcdGtpbmQgPSBcJiMzNDtJUlEgZmxhZ1wmIzM0OztcbiYjNDM7XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuYyBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlwmIzM0OztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcm9ibGVtID0gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7ZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcJiMzNDssIGtpbmQpO1xuJiM0MztcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdGVudiwgXCYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGJlbG9uZ3MgdG8gdmVyaWZpZXItbWFuYWdlZCAlcyBzdGF0ZS4gXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtUaGlzIHN0YXRlIGhhcyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IHJlYWQgZGlyZWN0bHkuXCYjMzQ7LFxuJiM0MztcdFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcbiYjNDM7XHRicGZfZGlhZ19tZW1vcnkoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHByb2JsZW0sIHJlYXNvbiwgc3VnZ2VzdGlvbik7XG4gfVxuIFxuIC8qIFJlYWQgdGhlIHN0YWNrIGF0ICYjMzk7b2ZmJiMzOTsgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcbkBAIC0zOTIxLDcgJiM0MzszOTc3LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayBvZmYgJWQmIzQzOyVkIHNpemUgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KGVudiwgb2ZmLCBpLCBzaXplKTtcbiYjNDM7XHRcdFx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF9pbnZhbGlkKGVudiwgb2ZmLCBpLCBzaXplLCB0eXBlKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0XHRcdH1cbkBAIC0zOTgwLDcgJiM0Mzs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7aW52YWxpZCByZWFkIGZyb20gc3RhY2sgb2ZmICVkJiM0MzslZCBzaXplICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuJiM0MztcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG5AQCAtNDA3OSwxMyAmIzQzOzQxMzUsMTMgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHRudW1fc3Rybih0bl9idWYsIHNpemVvZih0bl9idWYpLCByZWctXHUwMDNldmFyX29mZik7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uOyB2YXJfb2ZmPSVzIG9mZj0lZCBzaXplPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdHRuX2J1Ziwgb2ZmLCBzaXplKTtcbi1cdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KGVudixcbi1cdFx0XHRcdCAgICAgIFwmIzM0O1RoZSBoZWxwZXIgd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7SGVscGVyIHN0YWNrIG1lbW9yeSBhcmd1bWVudHMgcmVxdWlyZSBhIGNvbnN0YW50IHN0YWNrIG9mZnNldCBhbmQgYSBwcmVjaXNlIGluaXRpYWxpemVkIHJhbmdlLlwmIzM0OyxcbiYjNDM7XHRcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdFx0ZW52LCBcJiMzNDtUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7QXRvbWljIHN0YWNrIG9wZXJhdGlvbnMgcmVxdWlyZSBhIGNvbnN0YW50IHN0YWNrIG9mZnNldCBhbmQgYSBwcmVjaXNlIGluaXRpYWxpemVkIHJhbmdlLlwmIzM0OyxcbiBcdFx0XHR0bl9idWYsIG9mZiwgc2l6ZSk7XG4gXHRcdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7dmFyaWFibGUgc3RhY2sgYWNjZXNzXCYjMzQ7LCByZWFzb24sXG4tXHRcdFx0XCYjMzQ7VXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciBoZWxwZXIgbWVtb3J5IGFyZ3VtZW50cywgb3IgY29weSB0aGUgbmVlZGVkIGJ5dGVzIGludG8gYSBmaXhlZCBzdGFjayBzbG90IGZpcnN0LlwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVudiwgZW52LVx1MDAzZWluc25faWR4LCBcJiMzNDt2YXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wmIzM0OywgcmVhc29uLFxuJiM0MztcdFx0XHRcJiMzNDtVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXHQvKiBWYXJpYWJsZSBvZmZzZXQgaXMgcHJvaGliaXRlZCBmb3IgdW5wcml2aWxlZ2VkIG1vZGUgZm9yIHNpbXBsaWNpdHlcbkBAIC05ODgyLDcgJiM0Mzs5OTM4LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0c3ViX25hbWUsIG5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihlbnYpKTtcbiBcdFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcJiMzNDssIHN1Yl9uYW1lKTtcbiBcdFx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgKmluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XHRcJiMzNDtNb3ZlIHRoZSBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRcJiMzNDtDYWxsIHRoZSBmdW5jdGlvbiBmcm9tIGEgc2xlZXBhYmxlIHByb2dyYW0gb3V0c2lkZSBhbnkgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTA3MDEsNiAmIzQzOzEwNzU3LDggQEAgc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiYjNDM7XHRpZiAoIWluX3NsZWVwYWJsZShlbnYpKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O25vbi1zbGVlcGFibGUgcHJvZ1wmIzM0OztcbiBcdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4gXHRcdHJldHVybiBcJiMzNDtyY3VfcmVhZF9sb2NrIHJlZ2lvblwmIzM0OztcbiBcdGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9wcmVlbXB0X2xvY2tzKVxuQEAgLTEwNzA5LDcgJiM0MzsxMDc2Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVuXG4gXHRcdHJldHVybiBcJiMzNDtJUlEtZGlzYWJsZWQgcmVnaW9uXCYjMzQ7O1xuIFx0aWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX2xvY2tzKVxuIFx0XHRyZXR1cm4gXCYjMzQ7bG9jayByZWdpb25cJiMzNDs7XG4tXHRyZXR1cm4gXCYjMzQ7bm9uLXNsZWVwYWJsZSBwcm9nXCYjMzQ7O1xuJiM0MztcdHJldHVybiBcJiMzNDtub24tc2xlZXBhYmxlIGNvbnRleHRcJiMzNDs7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbkBAIC0xMDgwNSw3ICYjNDM7MTA4NjMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcJiMzNDtzbGVlcGFibGUgaGVscGVyICVzIyVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZnVuY19pZF9uYW1lKGZ1bmNfaWQpLCBmdW5jX2lkKTtcbiBcdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCYjMzQ7TW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XCYjMzQ7Q2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMDk5NCwxMyAmIzQzOzExMDUyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gXHQvKiByZXNldCBjYWxsZXIgc2F2ZWQgcmVncyAqL1xuIFx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xuJiM0MztcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xuIFx0XHRjaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XG4gXHR9XG4gXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbiBcbi1cdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXG4gXHRyZXRfdHlwZSA9IGZuLVx1MDAzZXJldF90eXBlO1xuIFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xuQEAgLTEyNjIzLDEyICYjNDM7MTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xuIFx0XHRcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XG4gXG4tXHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbiYjNDM7XHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7QWRkIGEgTlVMTCBjaGVjayBhbmQgY2FsbCB0aGUga2Z1bmMgb25seSBvbiB0aGUgbm9uLU5VTEwgcGF0aC5cJiMzNDssXG4tXHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBwb2ludGVyIG1heSBiZSBOVUxMLCBidXQgdGhpcyBrZnVuYyByZXF1aXJlcyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICAgICBleHBlY3RlZF90eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuQEAgLTEzMDY1LDggJiM0MzsxMzEyMywxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcbiBcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRpZiAocmV0ID09IC1FSU5WQUwpXG4mIzQzO1x0XHRcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtQYXNzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9yIGEgdmFsdWUgdGhlIHZlcmlmaWVyIGNhbiBwcm92ZSBpcyBjb25zdGFudCBhdCB0aGlzIGNhbGwuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBrZnVuYyByZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQsIGJ1dCAlcyBpcyB2YXJpYWJsZSBvbiB0aGlzIHBhdGhcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4gXHRcdHtcbkBAIC0xMzEzMCwxNSAmIzQzOzEzMTk0LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4tXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuLVxuLVx0XHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O1Bhc3MgYSBwb2ludGVyIHJldHVybmVkIGJ5IHRoZSBtYXRjaGluZyBCUEYgb2JqZWN0IGFsbG9jYXRpb24gb3IgbG9va3VwIG9wZXJhdGlvbiBmb3IgdGhpcyBrZnVuYy5cJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7dGhlIGtmdW5jIGV4cGVjdHMgYSBwb2ludGVyIHRvIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0IHR5cGUgJXMsIGJ1dCB0aGlzIGFyZ3VtZW50IGlzIG5vdCBzdWNoIGFuIG9iamVjdCBwb2ludGVyXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdCAgICAgIGV4cGVjdGVkX3R5cGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtQYXNzIGFuIG93bmluZyBvciBub24tb3duaW5nIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCBvYmplY3QgY29udGFpbmluZyBhIGJwZl9yZWZjb3VudCBmaWVsZC5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFwmIzM0O3RoZSBrZnVuYyBleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgJXMgaXMgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG5AQCAtMTM3MjYsMTEgJiM0MzsxMzc4OCwyMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0c2xlZXBhYmxlID0gYnBmX2lzX2tmdW5jX3NsZWVwYWJsZShcdTAwMjZtZXRhKTtcbi1cdGlmIChzbGVlcGFibGUgXHUwMDI2XHUwMDI2ICFpbl9zbGVlcGFibGUoZW52KSkge1xuLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xcblwmIzM0OywgZnVuY19uYW1lKTtcbiYjNDM7XHRpZiAoc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5fc2xlZXBhYmxlKGVudikpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4mIzQzO1x0XHRcdHN1Z2dlc3Rpb24gPSBcJiMzNDtNb3ZlIHRoZSBrZnVuYyBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXCYjMzQ7O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3Byb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZnVuY19uYW1lKTtcbiYjNDM7XHRcdFx0c3VnZ2VzdGlvbiA9IFwmIzM0O01hcmsgdGhlIHByb2dyYW0gc2xlZXBhYmxlIGlmIHRoZSBwcm9ncmFtIHR5cGUgYWxsb3dzIGl0LCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwmIzM0OztcbiYjNDM7XHRcdH1cbiBcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCYjMzQ7c2xlZXBhYmxlIGtmdW5jICVzXCYjMzQ7LCBmdW5jX25hbWUpO1xuLVx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcJiMzNDtNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cJiMzNDspO1xuJiM0MztcdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sIHN1Z2dlc3Rpb24pO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbkBAIC0xMzgzMCwxNSAmIzQzOzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuIFx0fVxuIFxuLVx0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXG5cJiMzNDssXG4tXHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4tXHRcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFwmIzM0O3NsZWVwYWJsZSBrZnVuYyAlc1wmIzM0OywgZnVuY19uYW1lKTtcbi1cdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCYjMzQ7TW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0fVxuLVxuIFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgXHUwMDI2XHUwMDI2IChyY3VfbG9jayB8fCByY3VfdW5sb2NrKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Q2FsbGluZyBicGZfcmN1X3JlYWRfe2xvY2ssdW5sb2NrfSBpbiB1bm5lY2Vzc2FyeSByYnRyZWUgY2FsbGJhY2tcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC0yMTA4OCwxNyAmIzQzOzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4mIzQzO1x0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi9cbiBcdHJldCA9IGFkZF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBjaGVja19zdWJwcm9ncyhlbnYpO1xuJiM0MztcdGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKGVudik7XG4mIzQzO1xuJiM0MztcdC8qIFZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuICovXG4mIzQzO1x0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xuLVx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuJiM0MztcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCBiZWFhNzNkYzM1ZjVkLi45NDE4ZGZlNGQ3YjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtNTYwLDYgJiM0Mzs1NjAsOSBAQCBpbnQgZ2xvYmFsKHZvaWQgKmN0eClcbiAvKiBBIGRpcmVjdCByZWFkIHNob3VsZCBmYWlsICovXG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBkeW5wdHIgc3RhY2sgc3RhdGVcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O3ZlcmlmaWVyLW1hbmFnZWQgZHlucHRyIHN0YXRlXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtVc2UgZHlucHRyIGhlbHBlcnMgb3Iga2Z1bmNzXCYjMzQ7KVxuIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG5AQCAtMTU5MCw2ICYjNDM7MTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xuIC8qIENhbiYjMzk7dCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSBhIGtub3duIGNvbnN0YW50XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnRcJiMzNDspXG4gaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuQEAgLTE2MDksNiAmIzQzOzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiAvKiBDYW4mIzM5O3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqL1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O211c3QgYmUgYSBrbm93biBjb25zdGFudFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7cmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50XCYjMzQ7KVxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbmluZGV4IGE0YTAwNzg2NmEzMzIuLjhkMmI1MGQxMWZhNGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuY1xuQEAgLTE0LDYgJiM0MzsxNCwxOSBAQCBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0clxuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoXCYjMzQ7LmRhdGEuQVwmIzM0Oyk7XG4gc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tCIF9faGlkZGVuIFNFQyhcJiMzNDsuZGF0YS5CXCYjMzQ7KTtcbiBcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBJUlEgZmxhZyBzdGFjayBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7UGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmNcJiMzNDspXG4mIzQzO2ludCBpcnFfZmxhZ19kaXJlY3RfcmVhZChzdHJ1Y3QgX19za19idWZmICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRicGZfbG9jYWxfaXJxX3NhdmUoXHUwMDI2ZmxhZ3MpO1xuJiM0MztcdHJldHVybiBmbGFncztcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBkb2VzbiYjMzk7dCBwb2ludCB0byBhbiBpcnEgZmxhZyBvbiBzdGFja1wmIzM0OylcbiBpbnQgaXJxX3NhdmVfYmFkX2FyZyhzdHJ1Y3QgX19za19idWZmICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5pbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbkBAIC0zMzIsNiAmIzQzOzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jc1wmIzM0OylcbiBpbnQgX19uYWtlZCByZWFkX2Zyb21faXRlcl9zbG90X2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODNjOTExNDk0YTM0YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtNiw2ICYjNDM7Niw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4gXG4gZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKSBfX3dlYWsgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O0JQRl9FWElUIGluc3RydWN0aW9uIGluIG1haW4gcHJvZyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYnBmX3ByZWVtcHRfZGlzYWJsZS1lZCByZWdpb25cJiMzNDspXG5AQCAtMTI3LDYgJiM0MzsxMjksMTkgQEAgaW50IHByZWVtcHRfc2xlZXBhYmxlX2tmdW5jKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkvXCYjMzQ7IFNZU19QUkVGSVggXCYjMzQ7c3lzX2dldHBnaWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2Nhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbVwmIzM0OylcbiYjNDM7aW50IG5vbl9zbGVlcGFibGVfa2Z1bmNfaW5fcmN1KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiBkYXRhO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIoXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCAwKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKVxuIHtcbiBcdHByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwOC4uZWFhZWQwODU5Zjk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDtyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcJiMzNDspXG4gbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm4sICptO1xuQEAgLTgwLDYgJiM0Mzs4MSwxNCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7ZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0IFIxIGlzIGEgY29udGV4dCBwb2ludGVyXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xuQEAgLTU1LDYgJiM0Mzs1NSw0NiBAQCBfX25ha2VkIHZvaWQgb3V0X29mX3JhbmdlX2p1bXAyKHZvaWQpXG4gXCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtqdW1wIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJ5XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7anVtcCBvdXQgb2YgcmFuZ2UgZnJvbSBpbnNuIDFcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2p1bXBfYWNyb3NzX3N1YnByb2dfYm91bmRhcnkgQCB2ZXJpZmllcl9jZmcuY1wmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGp1bXBfYWNyb3NzX3N1YnByb2dfYm91bmRhcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCBjcm9zc19zdWJwcm9nX3RhcmdldDtcdFx0XHRcXFxuJiM0MztcdGdvdG8gJiM0MzsxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkIGludCBmYWxsdGhyb3VnaF9zdWJwcm9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtzdWJwcm9ncmFtIGZhbGx0aHJvdWdoXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7ZmFsbHRocm91Z2hfc3VicHJvZyBAIHZlcmlmaWVyX2NmZy5jXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgc3VicHJvZ19mYWxsdGhyb3VnaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGZhbGx0aHJvdWdoX3N1YnByb2c7XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtsb29wIChiYWNrLWVkZ2UpXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDt1bnJlYWNoYWJsZSBpbnNuIDFcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuaW5kZXggNWIxOGM5YTI3NzE3Yi4uYTgzNWE0ODcxMDIxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTUzLDkgJiM0Mzs1MywxMSBAQCBERUZJTkVfU0lNUExFX0pVTVBfVEFCTEVfUFJPRyhyZXNlcnZlZF9maWVsZF9ub25femVyb19pbW0sIEJQRl9SRUdfMCwgMCwgMSwgX19mYVxuICAqL1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O25vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0IDBcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1x1MDAzZVx1MDAzZVx1MDAzZSAxIHwgKDBkKSBnb3RveCByMFwmIzM0OylcbiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4gXHQuOGJ5dGUgJVtnb3RveF9yMF07XHRcdFx0XHRcdFxcXG4gXHRyMCA9IDE7XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZXhpdDtcdFx0XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5pbmRleCBkMjQ4Y2U4NzdmMTRlLi5kMWVjMTliN2Y2NmIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmNcbkBAIC0xMzksNiAmIzQzOzEzOSw3IEBAIFNFQyhcJiMzNDt0cmFjZXBvaW50XCYjMzQ7KVxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7Ym91bmRlZCByZWN1cnNpb25cJiMzNDspXG4gX19mYWlsdXJlXG4gX19tc2coXCYjMzQ7cmVjdXJzaXZlIGNhbGwgZnJvbVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VGhlIGNhbGwgZnJvbSBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHRvIGJvdW5kZWRfcmVjdXJzaW9uX18xKCkgd291bGQgbWFrZVwmIzM0OylcbiBfX25ha2VkIHZvaWQgYm91bmRlZF9yZWN1cnNpb24odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xuaW5kZXggNDJkZTVjZmY3ZTUyYS4uMzA2OWU3MGZiY2JkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG5AQCAtOTYsNiAmIzQzOzk2LDI0IEBAIF9fbmFrZWQgdm9pZCBwc2V1ZG9fYnRmX2lkX2xvZ19tYXNrc19hZGRyZXNzKHZvaWQpXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7dW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2XG4mIzQzO19fbXNnX3VucHJpdihcJiMzNDtsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnNcJiMzNDspXG4mIzQzO19fbm90X21zZ191bnByaXYoXCYjMzQ7QlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsXCYjMzQ7KVxuJiM0MztfX21zZ191bnByaXYoXCYjMzQ7cG9saWN5IGNoZWNrIGZhaWxlZCBmb3IgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZVwmIzM0OylcbiYjNDM7X19tc2dfdW5wcml2KFwmIzM0O2F2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZFwmIzM0OylcbiYjNDM7aW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2xvb3AoMSwgcHNldWRvX2Z1bmNfY2FsbGJhY2ssIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDt1bnByaXY6IHJldHVybiBwb2ludGVyXCYjMzQ7KVxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcJiMzNDtSMCBsZWFrcyBhZGRyXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXG5pbmRleCAwNWEwYTU1YWRiNDUxLi5mMjQzMGI5YTAyMTg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuQEAgLTEyMSw0ICYjNDM7MTIxLDMxIEBAIGwwXyU9Olx0cjAgPSA0MjtcdFx0XHRcdFx0XFxcbiBcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDt4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7dmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvblwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7VmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogVmFyaWFibGUtb2Zmc2V0IGF0b21pYyBzdGFjayBhY2Nlc3NcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1RoZSBhdG9taWMgb3BlcmF0aW9uIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2tcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb25cJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSAxNikgPSByMTtcdFx0XHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHIwIFx1MDAyNj0gODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSAmIzQzOz0gLTE2O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxICYjNDM7PSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRsb2NrICoodTY0ICopKHIxICYjNDM7IDApICYjNDM7PSByMjtcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0Yzg4NzI5YjQ3NjM0N2NiYmMxZjE1ZTRjODI5NDViNDE3NjU4ZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtMTE2OSwxOSAmIzQzOzExNjksMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJ0Zl9zaG93X25hbWUoc3RydWN0IGJ0Zl9zaG93ICpzaG93KQogCQkJaWQgPSB0LSZndDt0eXBlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZCA9IDA7Ci0JCQlicmVhazsKJiM0MzsJCQlnb3RvIHJlc29sdmVkOwogCQl9CiYjNDM7CQl0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctJmd0O2J0ZiwgaWQpOwogCQlpZiAoIWlkKQogCQkJYnJlYWs7Ci0JCXQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy0mZ3Q7YnRmLCBpZCk7CiAJfQogCS8qIFdlIG1heSBub3QgYmUgYWJsZSB0byByZXByZXNlbnQgdGhpcyB0eXBlOyBiYWlsIHRvIGJlIHNhZmUgKi8KIAlpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUikKIAkJcmV0dXJuICYjMzQ7JiMzNDs7CiAKJiM0MztyZXNvbHZlZDoKIAlpZiAoIW5hbWUpCi0JCW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy0mZ3Q7YnRmLCB0LSZndDtuYW1lX29mZik7CiYjNDM7CQluYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/ICYjMzQ7dm9pZCYjMzQ7IDogYnRmX25hbWVfYnlfb2Zmc2V0KHNob3ctJmd0O2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpOwogCiAJc3dpdGNoIChCVEZfSU5GT19LSU5EKHQtJmd0O2luZm8pKSB7CiAJY2FzZSBCVEZfS0lORF9TVFJVQ1Q6CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuYwppbmRleCAwZjEzYzEzZjQxMzM3Li45NWM1OWY2Y2Y3MGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmMKQEAgLTI4Nyw3ICYjNDM7Mjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKQogICogY29tYmluZWQganVtcCB0YWJsZSBpbiBqdC0mZ3Q7aXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKQogICovCiBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCQkgIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpCiYjNDM7CQkJCQkgIGludCBpbnNuX2lkeCwgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZCkKIHsKIAlzdHJ1Y3QgYnBmX2lhcnJheSAqanQgPSBOVUxMOwogCXN0cnVjdCBicGZfbWFwICptYXA7CkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKCFqdCkgewogCQl2ZXJib3NlKGVudiwgJiMzNDtubyBqdW1wIHRhYmxlcyBmb3VuZCBmb3Igc3VicHJvZyBzdGFydGluZyBhdCAldVxuJiMzNDssIHN1YnByb2dfc3RhcnQpOwogCQlicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZSgKLQkJCWVudiwgc3VicHJvZ19zdGFydCwgJiMzNDttaXNzaW5nIGp1bXAgdGFibGUmIzM0OywKJiM0MzsJCQllbnYsIGluc25faWR4LCAmIzM0O21pc3NpbmcganVtcCB0YWJsZSYjMzQ7LAogCQkJJiMzNDtNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLiYjMzQ7LAogCQkJJiMzNDtObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuJiMzNDssCiAJCQlzdWJwcm9nX3N0YXJ0KTsKQEAgLTM0OSw3ICYjNDM7MzQ5LDcgQEAgY3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTsKIAlzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZy0mZ3Q7c3RhcnQ7CiAJc3VicHJvZ19lbmQgPSAoc3VicHJvZyAmIzQzOyAxKS0mZ3Q7c3RhcnQ7Ci0JanQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7CiYjNDM7CWp0ID0ganRfZnJvbV9zdWJwcm9nKGVudiwgdCwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQpOwogCWlmIChJU19FUlIoanQpKQogCQlyZXR1cm4ganQ7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYwppbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jCkBAIC04MzMsMTEgJiM0Mzs4MzMsOSBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaAogCWxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LSZndDtwcm9nLCBpbnNuX2lkeCk7CiAJaWYgKGJ0ZiAmYW1wOyZhbXA7IGxpbmZvKQogCQlicGZfZ2V0X2xpbmZvX3NvdXJjZShidGYsIGxpbmZvLCAmYW1wO3NyYyk7Ci0JaWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlIHx8ICFzcmMubGluZSB8fCAhKnNyYy5saW5lKSB7CiYjNDM7CWlmICghc3JjLmZpbGUgfHwgISpzcmMuZmlsZSkgewogCQlkaWFnX3dyaXRlKGVudiwgJiMzNDsgIGluc24gJXVcbiYjMzQ7LCBpbnNuX2lkeCk7Ci0JCWRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTsKLQkJZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2Fubm90YXRpb247CiAJfQogCiAJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIGluc25faWR4KTsKQEAgLTg0Nyw2ICYjNDM7ODQ1LDggQEAgc3RhdGljIHZvaWQgYnBmX2RpYWdfc291cmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCwgY29uc3QgY2gKIAkJZGlhZ193cml0ZShlbnYsICYjMzQ7ICAlcyBAICVzOiVkOiVkXG4mIzM0OywgZnVuYywgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTsKIAllbHNlCiAJCWRpYWdfd3JpdGUoZW52LCAmIzM0OyAgJXM6JWQ6JWRcbiYjMzQ7LCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpOwomIzQzOwlpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpCiYjNDM7CQlnb3RvIG91dF9hbm5vdGF0aW9uOwogCiAJc3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7CiAJZW5kX2xpbmUgPSBzcmMubGluZV9udW0gJiM0MzsgQlBGX0RJQUdfQ09OVEVYVDsKQEAgLTg4OSw3ICYjNDM7ODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoCiAJCQlkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgd2lkdGgsIGluZGVudCwgbGFiZWwsIG1zZyk7CiAJfQogCWRpYWdfcHJpbnRfaW5zbl9jb250ZXh0KGVudiwgaW5zbl9pZHgsIGRpc2FzbV9saW5lcyk7CiYjNDM7CWdvdG8gb3V0X3Jlc3RvcmU7CiAKJiM0MztvdXRfYW5ub3RhdGlvbjoKJiM0MzsJZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIDAsIDAsIGxhYmVsLCBtc2cpOwomIzQzOwlkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpOwogb3V0X3Jlc3RvcmU6CiAJZGlhZ19mbXRfcmVzdG9yZShlbnYsIG1hcmspOwogfQpAQCAtMTA4Myw3ICYjNDM7MTA4Nyw5IEBAIHZvaWQgYnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsCiAJY29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7CiAJdTMyIGRlcHRoOwogCi0JaWYgKGVudi0mZ3Q7Y3VyX3N0YXRlLSZndDthY3RpdmVfcmN1X2xvY2tzKQomIzQzOwlpZiAoIWVudi0mZ3Q7Y3VyX3N0YXRlLSZndDtpbl9zbGVlcGFibGUpCiYjNDM7CQljdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfTk9ORTsKJiM0MzsJZWxzZSBpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9yY3VfbG9ja3MpCiAJCWN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7CiAJZWxzZSBpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9wcmVlbXB0X2xvY2tzKQogCQljdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfUFJFRU1QVDsKQEAgLTE1MzEsOCAmIzQzOzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LAogCX0gZWxzZSBpZiAoZGlhZ19tb2RfaW5zbl9vcmlnaW4oZW52LCBpbnNuX2lkeCwgJmFtcDt0YXJnZXQsICZhbXA7ZXZlbnQubW9kLm9yaWdpbikpIHsKIAkJZXZlbnQubW9kLm9yaWdpbl92YWxpZCA9IHRydWU7CiAJfQotCWlmIChvbGRfcmVnICZhbXA7JmFtcDsgbmV3X3JlZyAmYW1wOyZhbXA7Ci0JICAgIChyZWFzb24gPT0gQlBGX0RJQUdfTU9EX1dSSVRFIHx8IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfU1BJTEwpICZhbXA7JmFtcDsKJiM0MzsJaWYgKG9sZF9yZWcgJmFtcDsmYW1wOyBuZXdfcmVnICZhbXA7JmFtcDsgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSAmYW1wOyZhbXA7CiAJICAgICFtZW1jbXAoJmFtcDtldmVudC5tb2Qub2xkLCAmYW1wO2V2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgJmFtcDsmYW1wOwogCSAgICAhZXZlbnQubW9kLm9yaWdpbl92YWxpZCAmYW1wOyZhbXA7CiAJICAgIGRpYWdfbW9kX2tlZXBzX2xpbmVhZ2UoZW52LCAmYW1wO2V2ZW50KSkKQEAgLTIxNjQsNyAmIzQzOzIxNjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGlhZ19tb2RfdGFyZ2V0X2Rlc2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAljYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfUkVHOgogCQlyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgJiMzNDtSJXUmIzM0OywgdGFyZ2V0LSZndDtyZWdubyk7CiAJY2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRzoKLQkJcmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c3RhY2sgYXJnJWQmIzM0OywgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtJmd0O3N0YWNrX2FyZykpOwomIzQzOwkJcmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7KihSMTEtJXUpJiMzNDssICh0YXJnZXQtJmd0O3N0YWNrX2FyZyAmIzQzOyAxKSAqIEJQRl9SRUdfU0laRSk7CiAJY2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX1NMT1Q6CiAJCXJldHVybiBicGZfZGlhZ19mbXQoZW52LCAmIzM0O3N0YWNrIHNsb3QgZnAlZCYjMzQ7LCAtKHRhcmdldC0mZ3Q7c3BpICYjNDM7IDEpICogQlBGX1JFR19TSVpFKTsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDBiYjdlZTk1YzhiZDIuLjc3MDMzY2YzNzM0YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTI5MTIsNiAmIzQzOzI5MTIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LSZndDtzdWJwcm9nX2luZm87CiAJaW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbiwgZXhfY2JfaW5zbjsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJY29uc3QgY2hhciAqb3BlcmF0aW9uLCAqc3VnZ2VzdGlvbjsKIAogCS8qIEFkZCBlbnRyeSBmdW5jdGlvbi4gKi8KIAlyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApOwpAQCAtMjkyMywxMSAmIzQzOzI5MjQsMTggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghZW52LSZndDticGZfY2FwYWJsZSkgewomIzQzOwkJCWlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHsKJiM0MzsJCQkJb3BlcmF0aW9uID0gJiMzNDtCUEYgZnVuY3Rpb24gcmVmZXJlbmNlJiMzNDs7CiYjNDM7CQkJCXN1Z2dlc3Rpb24gPSAmIzM0O0xvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0OzsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlvcGVyYXRpb24gPSAmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbCYjMzQ7OwomIzQzOwkJCQlzdWdnZXN0aW9uID0gJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0OzsKJiM0MzsJCQl9CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cbiYjMzQ7KTsKIAkJCWJwZl9kaWFnX3BvbGljeSgKLQkJCQllbnYsIGksICYjMzQ7QlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsJiMzNDssCiYjNDM7CQkJCWVudiwgaSwgb3BlcmF0aW9uLAogCQkJCSYjMzQ7bG9hZGluZyBvciBjYWxsaW5nIG90aGVyIEJQRiBmdW5jdGlvbnMgcmVxdWlyZXMgQ0FQX0JQRiBvciBDQVBfU1lTX0FETUlOJiMzNDssCi0JCQkJJiMzNDtMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy4mIzM0Oyk7CiYjNDM7CQkJCXN1Z2dlc3Rpb24pOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCkBAIC0yOTk1LDE1ICYjNDM7MzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3N0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7Ci0JaW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDsKJiM0MzsJaW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtJmd0O3N1YnByb2dfaW5mbzsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlpbnQgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIAotCS8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi8KLQlzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7CiAJc3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0OwogCWZvciAoaSA9IDA7IGkgJmx0OyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHsKIAkJdTggY29kZSA9IGluc25baV0uY29kZTsKQEAgLTMwMTcsNiAmIzQzOzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCAmYW1wOyZhbXA7CiAJCSAgICAoQlBGX01PREUoY29kZSkgPT0gQlBGX0FCUyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU5EKSkKIAkJCXN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlOwomIzQzOwkJaWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7CiYjNDM7CQkJY3VyX3N1YnByb2cmIzQzOyYjNDM7OwomIzQzOwkJCWlmIChjdXJfc3VicHJvZyAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQpCiYjNDM7CQkJCXN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiYjNDM7ewomIzQzOwlpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwOwomIzQzOwlzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi0mZ3Q7c3VicHJvZ19pbmZvOwomIzQzOwlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJaW50IGluc25fY250ID0gZW52LSZndDtwcm9nLSZndDtsZW47CiYjNDM7CiYjNDM7CS8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi8KJiM0MzsJc3VicHJvZ19zdGFydCA9IHN1YnByb2dbY3VyX3N1YnByb2ddLnN0YXJ0OwomIzQzOwlzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7CiYjNDM7CiAJCWlmIChCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUCAmYW1wOyZhbXA7IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpCiAJCQlnb3RvIG5leHQ7CiAJCWlmIChCUEZfT1AoY29kZSkgPT0gQlBGX0NBTEwpCkBAIC0zMDM4LDkgJiM0MzszMDY1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJfQogbmV4dDoKIAkJaWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7Ci0JCQkvKiB0byBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlciwKIAkJCSAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0Ci0JCQkgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbAomIzQzOwkJCSAqIG9yIHVuY29uZGl0aW9uYWwganVtcCBiYWNrIG9yIGJwZl90aHJvdyBjYWxsLgogCQkJICovCiAJCQlpZiAoY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9FWElUKSAmYW1wOyZhbXA7CiAJCQkgICAgY29kZSAhPSAoQlBGX0pNUDMyIHwgQlBGX0pBKSAmYW1wOyZhbXA7CkBAIC0zMTI2LDggJiM0MzszMTU0LDkgQEAgc3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJYnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoCiAJCQkJCQllbnYsIGlkeCwgJiMzNDtyZWN1cnNpdmUgc3VicHJvZ3JhbSBjYWxsJiMzNDssCiAJCQkJCQkmIzM0O1Jld3JpdGUgdGhlIHJlY3Vyc2lvbiBhcyBhbiBleHBsaWNpdCBib3VuZGVkIGxvb3AsIG9yIHNwbGl0IHRoZSBsb2dpYyBzbyBzdWJwcm9ncmFtIGNhbGxzIGRvIG5vdCBmb3JtIGEgY3ljbGUuJiMzNDssCi0JCQkJCQkmIzM0O1RoaXMgYnBmMmJwZiBjYWxsIHdvdWxkIG1ha2UgdGhlIHN1YnByb2dyYW0gY2FsbCBncmFwaCByZWN1cnNpdmUuICYjMzQ7Ci0JCQkJCQkmIzM0O1RoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuJiMzNDspOwomIzQzOwkJCQkJCSYjMzQ7VGhlIGNhbGwgZnJvbSAlcygpIHRvICVzKCkgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gJiMzNDsKJiM0MzsJCQkJCQkmIzM0O1RoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuJiMzNDssCiYjNDM7CQkJCQkJYnBmX3N1YnByb2dfbmFtZShlbnYsIGN1ciksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBjYWxsZWUpKTsKIAkJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQpAQCAtMzgxNywxOSAmIzQzOzM4NDYsNDYgQEAgc3RhdGljIGludCBtYXJrX3JlZ19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLAotCQkJCSAgICAgICBpbnQgc2l6ZSkKJiM0MztzdGF0aWMgdm9pZCBicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZiwgaW50IGksIGludCBzaXplLAomIzQzOwkJCQkJZW51bSBicGZfc3RhY2tfc2xvdF90eXBlIHR5cGUpCiB7Ci0JY29uc3QgY2hhciAqcmVhc29uOwomIzQzOwljb25zdCBjaGFyICpwcm9ibGVtLCAqcmVhc29uLCAqc3VnZ2VzdGlvbiwgKmtpbmQ7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IFNUQUNLX0lOVkFMSUQpIHsKJiM0MzsJCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQllbnYsICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiAmIzM0OwomIzQzOwkJCSYjMzQ7UHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuJiMzNDssCiYjNDM7CQkJc2l6ZSwgb2ZmLCBpKTsKJiM0MzsJCWJwZl9kaWFnX21lbW9yeSgKJiM0MzsJCQllbnYsIGVudi0mZ3Q7aW5zbl9pZHgsICYjMzQ7dW5pbml0aWFsaXplZCBzdGFjayByZWFkJiMzNDssIHJlYXNvbiwKJiM0MzsJCQkmIzM0O0luaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCAmIzM0OwomIzQzOwkJCSYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JcmVhc29uID0gYnBmX2RpYWdfZm10KGVudiwKLQkJCSAgICAgICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhpcyBwYXRoLiAmIzM0OwotCQkmIzM0O1Byb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLiYjMzQ7LAotCQlzaXplLCBvZmYsIGkpOwotCWJwZl9kaWFnX21lbW9yeSgKLQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3VuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZCYjMzQ7LCByZWFzb24sCi0JCSYjMzQ7SW5pdGlhbGl6ZSBldmVyeSBieXRlIGluIHRoZSBzdGFjayByYW5nZSBiZWZvcmUgcmVhZGluZyBpdCwgYWRqdXN0IHRoZSBvZmZzZXQgYW5kIHNpemUgc28gdGhlIHJlYWQgY292ZXJzIG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMsICYjMzQ7Ci0JCSYjMzQ7b3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLiYjMzQ7KTsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgU1RBQ0tfRFlOUFRSOgomIzQzOwkJa2luZCA9ICYjMzQ7ZHlucHRyJiMzNDs7CiYjNDM7CQlzdWdnZXN0aW9uID0gJiMzNDtVc2UgZHlucHRyIGhlbHBlcnMgb3Iga2Z1bmNzIHRvIGFjY2VzcyB0aGUgb2JqZWN0IHJlcHJlc2VudGVkIGJ5IHRoZSBkeW5wdHIgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBkeW5wdHIgc3RhdGUgZGlyZWN0bHkuJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTVEFDS19JVEVSOgomIzQzOwkJa2luZCA9ICYjMzQ7aXRlcmF0b3ImIzM0OzsKJiM0MzsJCXN1Z2dlc3Rpb24gPSAmIzM0O1VzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LiYjMzQ7OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1RBQ0tfSVJRX0ZMQUc6CiYjNDM7CQlraW5kID0gJiMzNDtJUlEgZmxhZyYjMzQ7OwomIzQzOwkJc3VnZ2VzdGlvbiA9ICYjMzQ7UGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmMgaW5zdGVhZCBvZiByZWFkaW5nIGl0cyBzdGF0ZSBkaXJlY3RseS4mIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2JsZW0gPSBicGZfZGlhZ19mbXQoZW52LCAmIzM0O2RpcmVjdCByZWFkIG9mICVzIHN0YWNrIHN0YXRlJiMzNDssIGtpbmQpOwomIzQzOwlyZWFzb24gPSBicGZfZGlhZ19mbXQoCiYjNDM7CQllbnYsICYjMzQ7VGhpcyByZWplY3RlZCByZWFkIHVzZXMgJWQgYnl0ZXMgYXQgc3RhY2sgb2Zmc2V0ICVkLCBidXQgYnl0ZSAlZCBpbiB0aGF0IHJhbmdlIGJlbG9uZ3MgdG8gdmVyaWZpZXItbWFuYWdlZCAlcyBzdGF0ZS4gJiMzNDsKJiM0MzsJCSYjMzQ7VGhpcyBzdGF0ZSBoYXMgYW4gb3BhcXVlIHJlcHJlc2VudGF0aW9uIHRoYXQgQlBGIHByb2dyYW1zIGNhbm5vdCByZWFkIGRpcmVjdGx5LiYjMzQ7LAomIzQzOwkJc2l6ZSwgb2ZmLCBpLCBraW5kKTsKJiM0MzsJYnBmX2RpYWdfbWVtb3J5KGVudiwgZW52LSZndDtpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTsKIH0KIAogLyogUmVhZCB0aGUgc3RhY2sgYXQgJiMzOTtvZmYmIzM5OyBhbmQgcHV0IHRoZSByZXN1bHRzIGludG8gdGhlIHJlZ2lzdGVyIGluZGljYXRlZCBieQpAQCAtMzkyMSw3ICYjNDM7Mzk3Nyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCXZlcmJvc2UoZW52LCAmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCYjNDM7JWQgc2l6ZSAlZFxuJiMzNDssCiAJCQkJCQkJb2ZmLCBpLCBzaXplKTsKLQkJCQkJCWJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KGVudiwgb2ZmLCBpLCBzaXplKTsKJiM0MzsJCQkJCQlicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoZW52LCBvZmYsIGksIHNpemUsIHR5cGUpOwogCQkJCQl9CiAJCQkJCXJldHVybiAtRUFDQ0VTOwogCQkJCX0KQEAgLTM5ODAsNyAmIzQzOzQwMzYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQl9IGVsc2UgewogCQkJCXZlcmJvc2UoZW52LCAmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCYjNDM7JWQgc2l6ZSAlZFxuJiMzNDssCiAJCQkJCW9mZiwgaSwgc2l6ZSk7Ci0JCQkJYnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpOwomIzQzOwkJCQlicGZfZGlhZ19zdGFja19yZWFkX2ludmFsaWQoZW52LCBvZmYsIGksIHNpemUsIHR5cGUpOwogCQkJfQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KQEAgLTQwNzksMTMgJiM0Mzs0MTM1LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQl0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLSZndDt2YXJfb2ZmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7dmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvbjsgdmFyX29mZj0lcyBvZmY9JWQgc2l6ZT0lZFxuJiMzNDssCiAJCQl0bl9idWYsIG9mZiwgc2l6ZSk7Ci0JCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsCi0JCQkJICAgICAgJiMzNDtUaGUgaGVscGVyIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2sgdGhyb3VnaCB2YXJpYWJsZSBvZmZzZXQgJXMgcGx1cyBmaXhlZCBvZmZzZXQgJWQgYW5kIHNpemUgJWQuICYjMzQ7Ci0JCQkmIzM0O0hlbHBlciBzdGFjayBtZW1vcnkgYXJndW1lbnRzIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS4mIzM0OywKJiM0MzsJCXJlYXNvbiA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQllbnYsICYjMzQ7VGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gJiMzNDsKJiM0MzsJCQkmIzM0O0F0b21pYyBzdGFjayBvcGVyYXRpb25zIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS4mIzM0OywKIAkJCXRuX2J1Ziwgb2ZmLCBzaXplKTsKIAkJYnBmX2RpYWdfbWVtb3J5KAotCQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3ZhcmlhYmxlIHN0YWNrIGFjY2VzcyYjMzQ7LCByZWFzb24sCi0JCQkmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgaGVscGVyIG1lbW9yeSBhcmd1bWVudHMsIG9yIGNvcHkgdGhlIG5lZWRlZCBieXRlcyBpbnRvIGEgZml4ZWQgc3RhY2sgc2xvdCBmaXJzdC4mIzM0Oyk7CiYjNDM7CQkJZW52LCBlbnYtJmd0O2luc25faWR4LCAmIzM0O3ZhcmlhYmxlLW9mZnNldCBhdG9taWMgc3RhY2sgYWNjZXNzJiMzNDssIHJlYXNvbiwKJiM0MzsJCQkmIzM0O1VzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb24sIHNlbGVjdGluZyB0aGUgdGFyZ2V0IHN0YWNrIHNsb3Qgb24gc2VwYXJhdGUgY29udHJvbC1mbG93IHBhdGhzIGlmIG5lY2Vzc2FyeS4mIzM0Oyk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAkvKiBWYXJpYWJsZSBvZmZzZXQgaXMgcHJvaGliaXRlZCBmb3IgdW5wcml2aWxlZ2VkIG1vZGUgZm9yIHNpbXBsaWNpdHkKQEAgLTk4ODIsNyAmIzQzOzk5MzgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkJc3ViX25hbWUsIG5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihlbnYpKTsKIAkJCW9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c2xlZXBhYmxlIGdsb2JhbCBmdW5jdGlvbiAlcygpJiMzNDssIHN1Yl9uYW1lKTsKIAkJCWJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCQkmIzM0O01vdmUgdGhlIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi4mIzM0Oyk7CiYjNDM7CQkJCSYjMzQ7Q2FsbCB0aGUgZnVuY3Rpb24gZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMTA3MDEsNiAmIzQzOzEwNzU3LDggQEAgc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJaWYgKCFpbl9zbGVlcGFibGUoZW52KSkKJiM0MzsJCXJldHVybiAmIzM0O25vbi1zbGVlcGFibGUgcHJvZyYjMzQ7OwogCWlmIChlbnYtJmd0O2N1cl9zdGF0ZS0mZ3Q7YWN0aXZlX3JjdV9sb2NrcykKIAkJcmV0dXJuICYjMzQ7cmN1X3JlYWRfbG9jayByZWdpb24mIzM0OzsKIAlpZiAoZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9wcmVlbXB0X2xvY2tzKQpAQCAtMTA3MDksNyAmIzQzOzEwNzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW4KIAkJcmV0dXJuICYjMzQ7SVJRLWRpc2FibGVkIHJlZ2lvbiYjMzQ7OwogCWlmIChlbnYtJmd0O2N1cl9zdGF0ZS0mZ3Q7YWN0aXZlX2xvY2tzKQogCQlyZXR1cm4gJiMzNDtsb2NrIHJlZ2lvbiYjMzQ7OwotCXJldHVybiAmIzM0O25vbi1zbGVlcGFibGUgcHJvZyYjMzQ7OwomIzQzOwlyZXR1cm4gJiMzNDtub24tc2xlZXBhYmxlIGNvbnRleHQmIzM0OzsKIH0KIAogc3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLApAQCAtMTA4MDUsNyAmIzQzOzEwODYzLDcgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAkJb3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgJiMzNDtzbGVlcGFibGUgaGVscGVyICVzIyVkJiMzNDssCiAJCQkJCSBmdW5jX2lkX25hbWUoZnVuY19pZCksIGZ1bmNfaWQpOwogCQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCSYjMzQ7TW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuJiMzNDspOwomIzQzOwkJCSYjMzQ7Q2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTA5OTQsMTMgJiM0MzsxMTA1MiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbgogCiAJLyogcmVzZXQgY2FsbGVyIHNhdmVkIHJlZ3MgKi8KIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiYjNDM7CWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2NhbGxlcl9zYXZlZFtpXV0pOwogCQljaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7CiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJLyogdXBkYXRlIHJldHVybiByZWdpc3RlciAoYWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZSkgKi8KIAlyZXRfdHlwZSA9IGZuLSZndDtyZXRfdHlwZTsKIAlyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7CkBAIC0xMjYyMywxMiAmIzQzOzEyNjgxLDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCSAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHsKIAkJCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7CiAKLQkJCWV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7CiYjNDM7CQkJZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTsKIAkJCXZlcmJvc2UoZW52LCAmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCWJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLAogCQkJCQkgICAgICAmIzM0O0FkZCBhIE5VTEwgY2hlY2sgYW5kIGNhbGwgdGhlIGtmdW5jIG9ubHkgb24gdGhlIG5vbi1OVUxMIHBhdGguJiMzNDssCi0JCQkJCSAgICAgICYjMzQ7dGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGJ1dCB0aGlzIGtmdW5jIHJlcXVpcmVzIGEgbm9uLU5VTEwgcG9pbnRlciB0byAlcyYjMzQ7LAomIzQzOwkJCQkJICAgICAgJiMzNDt0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzJiMzNDssCiAJCQkJCSAgICAgIGV4cGVjdGVkX3R5cGUpOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KQEAgLTEzMDY1LDggJiM0MzsxMzEyMywxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJYnJlYWs7CiAJCWNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOgogCQkJcmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCWlmIChyZXQgPT0gLUVJTlZBTCkKJiM0MzsJCQkJCWJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLAomIzQzOwkJCQkJCQkgICAgICAmIzM0O1Bhc3MgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb3IgYSB2YWx1ZSB0aGUgdmVyaWZpZXIgY2FuIHByb3ZlIGlzIGNvbnN0YW50IGF0IHRoaXMgY2FsbC4mIzM0OywKJiM0MzsJCQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgcmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50LCBidXQgJXMgaXMgdmFyaWFibGUgb24gdGhpcyBwYXRoJiMzNDssCiYjNDM7CQkJCQkJCSAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCQlmYWxsdGhyb3VnaDsKIAkJY2FzZSBLRl9BUkdfTUVNX1NJWkU6CiAJCXsKQEAgLTEzMTMwLDE1ICYjNDM7MTMxOTQsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCWJyZWFrOwogCQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgogCQkJaWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLSZndDt0eXBlKSkgewotCQkJCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7Ci0KLQkJCQlleHBlY3RlZF90eXBlID0gYnBmX2RpYWdfZm10X2J0Zl90eXBlKGVudiwgYnRmLCByZWZfaWQpOwogCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXG4mIzM0OywKIAkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCQlicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSwKLQkJCQkJCSAgICAgICYjMzQ7UGFzcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG1hdGNoaW5nIEJQRiBvYmplY3QgYWxsb2NhdGlvbiBvciBsb29rdXAgb3BlcmF0aW9uIGZvciB0aGlzIGtmdW5jLiYjMzQ7LAotCQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXImIzM0OywKLQkJCQkJCSAgICAgIGV4cGVjdGVkX3R5cGUpOwomIzQzOwkJCQkJCSAgICAgICYjMzQ7UGFzcyBhbiBvd25pbmcgb3Igbm9uLW93bmluZyBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgb2JqZWN0IGNvbnRhaW5pbmcgYSBicGZfcmVmY291bnQgZmllbGQuJiMzNDssCiYjNDM7CQkJCQkJICAgICAgJiMzNDt0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0ICVzIGlzICVzJiMzNDssCiYjNDM7CQkJCQkJICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLAomIzQzOwkJCQkJCSAgICAgIGJwZl9kaWFnX3JlZ190eXBlX3BsYWluKGVudiwgcmVnLSZndDt0eXBlKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKQEAgLTEzNzI2LDExICYjNDM7MTM3ODgsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAl9CiAKIAlzbGVlcGFibGUgPSBicGZfaXNfa2Z1bmNfc2xlZXBhYmxlKCZhbXA7bWV0YSk7Ci0JaWYgKHNsZWVwYWJsZSAmYW1wOyZhbXA7ICFpbl9zbGVlcGFibGUoZW52KSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jICVzXG4mIzM0OywgZnVuY19uYW1lKTsKJiM0MzsJaWYgKHNsZWVwYWJsZSAmYW1wOyZhbXA7ICFpbl9zbGVlcGFibGVfY29udGV4dChlbnYpKSB7CiYjNDM7CQljb25zdCBjaGFyICpzdWdnZXN0aW9uOwomIzQzOwomIzQzOwkJaWYgKGluX3NsZWVwYWJsZShlbnYpKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7a2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpOwomIzQzOwkJCXN1Z2dlc3Rpb24gPSAmIzM0O01vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy4mIzM0OzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7cHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSk7CiYjNDM7CQkJc3VnZ2VzdGlvbiA9ICYjMzQ7TWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuJiMzNDs7CiYjNDM7CQl9CiAJCW9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsICYjMzQ7c2xlZXBhYmxlIGtmdW5jICVzJiMzNDssIGZ1bmNfbmFtZSk7Ci0JCWJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLAotCQkJJiMzNDtNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy4mIzM0Oyk7CiYjNDM7CQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwgc3VnZ2VzdGlvbik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtMTM4MzAsMTUgJiM0MzsxMzkwMSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQlpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpOwogCX0KIAotCWlmIChzbGVlcGFibGUgJmFtcDsmYW1wOyAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDtrZXJuZWwgZnVuYyAlcyBpcyBzbGVlcGFibGUgd2l0aGluICVzXG4mIzM0OywKLQkJCWZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpOwotCQlvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCAmIzM0O3NsZWVwYWJsZSBrZnVuYyAlcyYjMzQ7LCBmdW5jX25hbWUpOwotCQlicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbiwKLQkJCSYjMzQ7TW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLiYjMzQ7KTsKLQkJcmV0dXJuIC1FQUNDRVM7Ci0JfQotCiAJaWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgJmFtcDsmYW1wOyAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHsKIAkJdmVyYm9zZShlbnYsICYjMzQ7Q2FsbGluZyBicGZfcmN1X3JlYWRfe2xvY2ssdW5sb2NrfSBpbiB1bm5lY2Vzc2FyeSByYnRyZWUgY2FsbGJhY2tcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0yMTA4OCwxNyAmIzQzOzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAotCS8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi8KJiM0MzsJLyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi8KIAlyZXQgPSBhZGRfc3VicHJvZ3MoZW52KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBza2lwX2Z1bGxfY2hlY2s7CiAKLQlyZXQgPSBjaGVja19zdWJwcm9ncyhlbnYpOwomIzQzOwlmaW5kX3N1YnByb2dfcHJvcGVydGllcyhlbnYpOwomIzQzOwomIzQzOwkvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqLwomIzQzOwlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCi0JLyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi8KLQlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiYjNDM7CXJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCmluZGV4IGJlYWE3M2RjMzVmNWQuLjk0MThkZmU0ZDdiN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCkBAIC01NjAsNiAmIzQzOzU2MCw5IEBAIGludCBnbG9iYWwodm9pZCAqY3R4KQogLyogQSBkaXJlY3QgcmVhZCBzaG91bGQgZmFpbCAqLwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCByZWFkIGZyb20gc3RhY2smIzM0OykKJiM0MztfX21zZygmIzM0O1ZlcmlmaWNhdGlvbiBmYWlsZWQ6IE1lbW9yeSBTYWZldHk6IERpcmVjdCByZWFkIG9mIGR5bnB0ciBzdGFjayBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O1VzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MmIzM0OykKIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eCkKIHsKIAlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CkBAIC0xNTkwLDYgJiM0MzsxNTkzLDcgQEAgX191MzIgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGV0aGhkcik7CiAvKiBDYW4mIzM5O3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqLwogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDttdXN0IGJlIGEga25vd24gY29uc3RhbnQmIzM0OykKJiM0MztfX21zZygmIzM0O3JlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudCYjMzQ7KQogaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGJwZl9keW5wdHIgcHRyOwpAQCAtMTYwOSw2ICYjNDM7MTYxMyw3IEBAIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogLyogQ2FuJiMzOTt0IHBhc3MgaW4gdmFyaWFibGUtc2l6ZWQgbGVuIHRvIGJwZl9keW5wdHJfc2xpY2UgKi8KIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7bXVzdCBiZSBhIGtub3duIGNvbnN0YW50JiMzNDspCiYjNDM7X19tc2coJiMzNDtyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQmIzM0OykKIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pcnEuYwppbmRleCBhNGEwMDc4NjZhMzMyLi44ZDJiNTBkMTFmYTRlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jCkBAIC0xNCw2ICYjNDM7MTQsMTkgQEAgZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHIKIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoJiMzNDsuZGF0YS5BJiMzNDspOwogc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tCIF9faGlkZGVuIFNFQygmIzM0Oy5kYXRhLkImIzM0Oyk7CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgSVJRIGZsYWcgc3RhY2sgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O3ZlcmlmaWVyLW1hbmFnZWQgSVJRIGZsYWcgc3RhdGUmIzM0OykKJiM0MztfX21zZygmIzM0O1Bhc3MgdGhlIHNhdmVkIElSUSBmbGFnIHRvIHRoZSBtYXRjaGluZyByZXN0b3JlIGtmdW5jJiMzNDspCiYjNDM7aW50IGlycV9mbGFnX2RpcmVjdF9yZWFkKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CWJwZl9sb2NhbF9pcnFfc2F2ZSgmYW1wO2ZsYWdzKTsKJiM0MzsJcmV0dXJuIGZsYWdzOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgZG9lc24mIzM5O3QgcG9pbnQgdG8gYW4gaXJxIGZsYWcgb24gc3RhY2smIzM0OykKIGludCBpcnFfc2F2ZV9iYWRfYXJnKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwppbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCkBAIC0zMzIsNiAmIzQzOzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpCiAKIFNFQygmIzM0Oz9yYXdfdHAmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgcmVhZCBmcm9tIHN0YWNrJiMzNDspCiYjNDM7X19tc2coJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VXNlIGl0ZXJhdG9yIGtmdW5jcyYjMzQ7KQogaW50IF9fbmFrZWQgcmVhZF9mcm9tX2l0ZXJfc2xvdF9mYWlsKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlICgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwppbmRleCA2ZDVmY2U3ZTZmZmM5Li44M2M5MTE0OTRhMzRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oJiMzNDsKIAogZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKSBfX3dlYWsgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTsKIAogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtCUEZfRVhJVCBpbnN0cnVjdGlvbiBpbiBtYWluIHByb2cgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9wcmVlbXB0X2Rpc2FibGUtZWQgcmVnaW9uJiMzNDspCkBAIC0xMjcsNiAmIzQzOzEyOSwxOSBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P2ZlbnRyeS8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHImIzM0OykKJiM0MztfX21zZygmIzM0O2Nhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSYjMzQ7KQomIzQzO2ludCBub25fc2xlZXBhYmxlX2tmdW5jX2luX3JjdSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgZGF0YTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJYnBmX2NvcHlfZnJvbV91c2VyX3N0cigmYW1wO2RhdGEsIHNpemVvZihkYXRhKSwgTlVMTCwgMCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKQogewogCXByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDAyNGVmMmFhZTIwMDguLmVhYWVkMDg1OWY5NDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCkBAIC02Myw2ICYjNDM7NjMsNyBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KQogCiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7cmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICh2b2lkICopJiMzNDspCiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpCiB7CiAJc3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07CkBAIC04MCw2ICYjNDM7ODEsMTQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWYmIzM0OykKJiM0MztfX21zZygmIzM0O2V4cGVjdHMgYSBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QsIGJ1dCBSMSBpcyBhIGNvbnRleHQgcG9pbnRlciYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P3RjJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSYjNDM7fX0mIzM0OykKIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jCmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMKQEAgLTU1LDYgJiM0Mzs1NSw0NiBAQCBfX25ha2VkIHZvaWQgb3V0X29mX3JhbmdlX2p1bXAyKHZvaWQpCiAmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7anVtcCBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyeSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2p1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAxJiMzNDspCiYjNDM7X19tc2coJiMzNDtqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmMmIzM0OykKJiM0MztfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsIGNyb3NzX3N1YnByb2dfdGFyZ2V0OwkJCVwKJiM0MzsJZ290byAmIzQzOzE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtzdWJwcm9ncmFtIGZhbGx0aHJvdWdoJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7ZmFsbHRocm91Z2hfc3VicHJvZyBAIHZlcmlmaWVyX2NmZy5jJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHN1YnByb2dfZmFsbHRocm91Z2godm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nOwkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O2xvb3AgKGJhY2stZWRnZSkmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O3VucmVhY2hhYmxlIGluc24gMSYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwppbmRleCA1YjE4YzlhMjc3MTdiLi5hODM1YTQ4NzEwMjEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYwpAQCAtNTMsOSAmIzQzOzUzLDExIEBAIERFRklORV9TSU1QTEVfSlVNUF9UQUJMRV9QUk9HKHJlc2VydmVkX2ZpZWxkX25vbl96ZXJvX2ltbSwgQlBGX1JFR18wLCAwLCAxLCBfX2ZhCiAgKi8KIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7bm8ganVtcCB0YWJsZXMgZm91bmQgZm9yIHN1YnByb2cgc3RhcnRpbmcgYXQgMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7Jmd0OyZndDsmZ3Q7IDEgfCAoMGQpIGdvdG94IHIwJiMzNDspCiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCQlcCiAJLjhieXRlICVbZ290b3hfcjBdOwkJCQkJXAogCXIwID0gMTsJCQkJCQkJXAogCWV4aXQ7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYwppbmRleCBkMjQ4Y2U4NzdmMTRlLi5kMWVjMTliN2Y2NmIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9vcHMxLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jCkBAIC0xMzksNiAmIzQzOzEzOSw3IEBAIFNFQygmIzM0O3RyYWNlcG9pbnQmIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtib3VuZGVkIHJlY3Vyc2lvbiYjMzQ7KQogX19mYWlsdXJlCiBfX21zZygmIzM0O3JlY3Vyc2l2ZSBjYWxsIGZyb20mIzM0OykKJiM0MztfX21zZygmIzM0O1RoZSBjYWxsIGZyb20gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB0byBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHdvdWxkIG1ha2UmIzM0OykKIF9fbmFrZWQgdm9pZCBib3VuZGVkX3JlY3Vyc2lvbih2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuYwppbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jCkBAIC05Niw2ICYjNDM7OTYsMjQgQEAgX19uYWtlZCB2b2lkIHBzZXVkb19idGZfaWRfbG9nX21hc2tzX2FkZHJlc3Modm9pZCkKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7c3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDt1bnByaXY6IHBzZXVkbyBmdW5jdGlvbiBwb2xpY3kgZGlhZ25vc3RpYyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2CiYjNDM7X19tc2dfdW5wcml2KCYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zJiMzNDspCiYjNDM7X19ub3RfbXNnX3VucHJpdigmIzM0O0JQRi10by1CUEYgZnVuY3Rpb24gY2FsbCYjMzQ7KQomIzQzO19fbXNnX3VucHJpdigmIzM0O3BvbGljeSBjaGVjayBmYWlsZWQgZm9yIEJQRiBmdW5jdGlvbiByZWZlcmVuY2UmIzM0OykKJiM0MztfX21zZ191bnByaXYoJiMzNDthdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQmIzM0OykKJiM0MztpbnQgdW5wcml2X3BzZXVkb19mdW5jX3BvbGljeSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBwc2V1ZG9fZnVuY19jYWxsYmFjaywgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NvY2tldCYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O3VucHJpdjogcmV0dXJuIHBvaW50ZXImIzM0OykKIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdigmIzM0O1IwIGxlYWtzIGFkZHImIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jCmluZGV4IDA1YTBhNTVhZGI0NTEuLmYyNDMwYjlhMDIxODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuYwpAQCAtMTIxLDQgJiM0MzsxMjEsMzEgQEAgbDBfJT06CXIwID0gNDI7CQkJCQlcCiAmIzM0Owk6OjogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDt4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDt2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uJiMzNDspCiYjNDM7X19tc2coJiMzNDtWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2VzcyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7VXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciB0aGUgYXRvbWljIG9wZXJhdGlvbiYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwkqKHU2NCAqKShyMTAgLSAxNikgPSByMTsJCQlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gcjE7CQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjAgJmFtcDs9IDg7CQkJCQlcCiYjNDM7CXIxID0gcjEwOwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gLTE2OwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gcjA7CQkJCQlcCiYjNDM7CXIyID0gMTsJCQkJCQlcCiYjNDM7CWxvY2sgKih1NjQgKikocjEgJiM0MzsgMCkgJiM0Mzs9IHIyOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgdmVyaWZpZXIgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGEgbWl4IG9mIGRpYWdub3N0aWMgaW1wcm92ZW1lbnRzIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2VzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGVycm9yIG1lc3NhZ2VzIGFuZCBoaW50cy4gSG93ZXZlciwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWNhdGlvbiBsb2dpYyBpdHNlbGYuCgpGaXJzdCwgbG9va2luZyBhdCBga2VybmVsL2JwZi9idGYuY2AsIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBidGZfc2hvd19uYW1lYC4gSXQgbm93IGhhbmRsZXMgdm9pZCB0eXBlcyBjb3JyZWN0bHkuIFRoaXMgaXMgYSBtaW5vciBjb3JyZWN0aW9uLCBub3RoaW5nIHRvIGJlIGFsYXJtZWQgYWJvdXQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBsZWQgdG8gaW5jb3JyZWN0IHR5cGUgbmFtZSByZXByZXNlbnRhdGlvbiBpbiBzcGVjaWZpYyBjYXNlcywgd2hpY2ggaXMgbm93IGZpeGVkLgoKVGhlbiwgYGtlcm5lbC9icGYvY2ZnLmNgIGhhcyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGp0X2Zyb21fc3VicHJvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYW4gYGluc25faWR4YCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBpcyBwcm9iYWJseSBqdXN0IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgZm9yIGRpYWdub3N0aWNzLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb24gY2F1c2luZyBpc3N1ZXMuCgpga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCBoYXMgYSBudW1iZXIgb2YgdXBkYXRlczsgYWxsIG9mIHRoZW0gc2VlbSB0byBiZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIGFuZCBjb250ZXh0IHJlcG9ydGluZyBiZXR0ZXIuIE5vdGhpbmcgdG9vIGNyaXRpY2FsIGhlcmUsIGJ1dCBldmVyeSBiaXQgaGVscHMgd2l0aCBkZWJ1Z2dpbmcgQlBGIHByb2dyYW1zLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZXMgaW4gdGhlIHByb2dyYW0mIzM5O3Mgb3JkZXIgb2YgZXhlY3V0aW9uLiBJIHNlZSB0aGF0IGBjaGVja19zdWJwcm9nc2AgaXMgc3BsaXQgaW50byBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgIGFuZCBgY2hlY2tfc3VicHJvZ3NgLCBhbmQgdGhlIGNhbGxpbmcgb3JkZXIgb2YgdGhlc2UgYW5kIGBicGZfY2hlY2tfYnRmX2luZm9gIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIGEgYmlnIHJlZCBmbGFnLCBhbmQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbi4KClNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNhbGxzIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AsIHRoZW4gYGJwZl9jaGVja19idGZfaW5mb2AsIGFuZCBmaW5hbGx5IGBjaGVja19zdWJwcm9nc2AuIFRoaXMgbWVhbnMgdGhhdCBCVEYgdmFsaWRhdGlvbiBpcyBub3cgcGVyZm9ybWVkICpiZWZvcmUqIHdlIGNoZWNrIHN1YnByb2dyYW0gbGF5b3V0IHZhbGlkaXR5LiBQcmV2aW91c2x5LCB0aGUgc3VicHJvZ3JhbSBzdHJ1Y3R1cmUgd2FzIHZhbGlkYXRlZCBmaXJzdC4gVGhpcyBpcyBhIHBvdGVudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIHNlY3VyaXR5IGltcGxpY2F0aW9ucyEKCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCBkb2VzLiBPa2F5LCBpdCYjMzk7cyBqdXN0IGV4dHJhY3RpbmcgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gYGhhc19sZF9hYnNgLCBub3RoaW5nIGNyaXRpY2FsIHRoZXJlLgoKVGhlIHJlb3JkZXJpbmcgbWVhbnMgdGhhdCBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBub3cgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJvY2VzcyBCVEYgaW5mb3JtYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgbWlnaHQgaGF2ZSAqaW52YWxpZCogc3VicHJvZ3JhbSBzdHJ1Y3R1cmVzIChlLmcuLCBqdW1wcyBvdXRzaWRlIHN1YnByb2dyYW0gYm91bmRhcmllcywgb3IgZmFsbHRocm91Z2hzKS4gVGhpcyBpcyBhIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9yIGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzbiYjMzk7dCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBpbnZhbGlkIHByb2dyYW0gZmxvdy4gVGhlIGNvZGUgaXMgc3RydWN0dXJlZCBzdWNoIHRoYXQgYGFkZF9zdWJwcm9nc2AgaXMgc3RpbGwgY2FsbGVkIGZpcnN0LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuIFNvIHRoZSBpbnZhbGlkIHByb2dyYW0gc3RpbGwgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGludG8gYSBzZXQgb2Ygc3VicHJvZ3JhbXMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIEJURiBhbmQgc3VicHJvZ3JhbSB2YWxpZGF0aW9uIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGVyZSBtYXkgYmUgc29tZSBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgcGF0aHMuIAoKSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB0byBzZWUgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgcHJvZ3JhbSBzdHJ1Y3R1cmUgdGhhdCBhcmUgbm8gbG9uZ2VyIGd1YXJhbnRlZWQgYnkgdGhlIG5ldyBleGVjdXRpb24gb3JkZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgd29ydGggZnV6emluZyB0aG9yb3VnaGx5LiBUaGlzIHJlb3JkZXJpbmcgb2YgdmFsaWRhdGlvbiBjaGVja3MgY291bGQgaW50cm9kdWNlIG5ldywgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUsIGJlaGF2aW9yIGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIHdhc24mIzM5O3QgZGVzaWduZWQgdG8gaGFuZGxlIHByb2dyYW1zIHdpdGggaW52YWxpZCBzdWJwcm9ncmFtIGxheW91dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrX2J0Zl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAzNz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjAtXHQvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTYxOlx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGZ1bmN0aW9uOgoKKipEaXZpbmcgaW50byBgYnBmX2NoZWNrX2J0Zl9pbmZvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvcmUgcHVycG9zZSBpczogdGhpcyBmdW5jdGlvbiAqaGFzKiB0byBiZSBjb25jZXJuZWQgd2l0aCB2YWxpZGF0aW5nIEJURiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIGl0IHdpbGwgZW5zdXJlIHRoZSBpbnRlZ3JpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIHRoZSBCVEYgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgYnkgQlBGIHByb2dyYW1zIG9yIGluZnJhc3RydWN0dXJlLiBJIHdvdWxkIGFzc3VtZSBpdCYjMzk7cyBjaGVja2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipUeXBlIFNhZmV0eToqKiBNYWtpbmcgc3VyZSB0aGF0IHR5cGUgZGVmaW5pdGlvbnMgcmVmZXJlbmNlZCBpbiBCUEYgY29kZSBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgdmFsaWQgaW4gdGhlIEJURiBkYXRhLiBBbnkgbWlzbWF0Y2hlcyBpbiBzaXplcyBvciBsYXlvdXQgc2hvdWxkIGJlIGNhdWdodC4KKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIFByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHRoZSBCVEYgZGF0YSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIEJQRiBydW50aW1lIGVudmlyb25tZW50IGl0JiMzOTtzIHJ1bm5pbmcgaW4uIEEgbWlzbWF0Y2ggaGVyZSBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLgoqICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgcG90ZW50aWFsIGV4cGxvaXRzIGlmIEJURiBpbmZvcm1hdGlvbiBpcyBjb3JydXB0ZWQgb3IgbWFuaXB1bGF0ZWQ/CiogICAqKkNvbXBsZXRlbmVzczoqKiBDb25maXJtaW5nIHRoYXQgYWxsIHJlZmVyZW5jZWQgdHlwZXMgYXJlIGRlZmluZWQsIG9yIHRoYXQgYW55IHBhcnRpYWwgZGVmaW5pdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSByZWFzb25hYmxlIHdheS4KCkkmIzM5O2QgYWxzbyBiZSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGVhcmx5LCBvciBsYXRlcj8gRG9lcyBpdCByZWxhdGUgdG8gdGhlIEJQRiB2ZXJpZmllciBpbiBzb21lIHdheT8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBpdCBsaWtlbHkgaXMgaW52b2tlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkIG9yIGF0dGFjaCBvcGVyYXRpb25zLCBwcm9iYWJseSAqYmVmb3JlKiB0aGUgcHJvZ3JhbSBpcyBhbGxvd2VkIHRvIHJ1bi4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5wdXQgcGFyYW1ldGVycyB0b287IHdoYXQgZXhhY3RseSBkb2VzIHRoaXMgZnVuY3Rpb24gdGFrZSBhcyBhcmd1bWVudHM6IHRoZSBCVEYgZGF0YSBpdHNlbGYsIHBvaW50ZXJzIHRvIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbT8gVGhpcyBraW5kIG9mIGNoZWNrIGlzIGNydWNpYWwgZm9yIEJQRiBzZWN1cml0eSBhbmQgc3RhYmlsaXR5OyBpZiBpdCBpcyBwb29ybHkgaW1wbGVtZW50ZWQsIHRoZSB3aG9sZSBzeXN0ZW0gaXMgYXQgcmlzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgaW50IGJwZl9jaGVja19idGZfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGVidWdnaW5nIHRoZSBCVEYgSXNzdWUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gc2VlbXMgbGlrZSB0aGUgcHJvYmxlbSBJJiMzOTttIGNoYXNpbmcgbWlnaHQgKm5vdCogYmUgc29tZXRoaW5nIGZ1bmRhbWVudGFsbHkgc3RhdGljLiBJIHdhcyBpbml0aWFsbHkgbGVhbmluZyB0aGF0IHdheSwgYnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIG1heWJlIHRoZSBlcnJvciBpcyBkeW5hbWljIGluIG5hdHVyZSwgY2hhbmdpbmcgaW4gZWFjaCBleGVjdXRpb24gb2YgdGhlIGNvZGUuIE9yLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmd5LCBtYXliZSB0aGUgcm9vdCBvZiB0aGlzIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGlzIGhpZGRlbiBhd2F5IGluIGBidGYuY2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgZGVidWdnaW5nIG5leHQuIEkgc2hvdWxkIHN0ZXAgdGhyb3VnaCBpdCBhbmQgY2hlY2sgd2hhdCBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicGZfY2hlY2tfYnRmX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTQxMD1pbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIEJURiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgQlRGIHZlcmlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgdmFsaWRhdGVzIEJURiBpbmZvcm1hdGlvbiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBkZWZpbml0ZWx5IHRoZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbiBga2VybmVsL2JwZi9jaGVja19idGYuY2AsIHNvIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgcHVsbCB0aGF0IHVwLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBhbmQgd2hhdCBjaGVja3MgdGhleSYjMzk7cmUgcGVyZm9ybWluZyBvbiB0aGUgQlRGIGRhdGEuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbW1vbiBwaXRmYWxscyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEdldHRpbmcgYSBoYW5kbGUgb24gdGhpcyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgYnVpbGRpbmcgcm9idXN0IGFuZCBzZWN1cmUgQlBGIHByb2dyYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Mzg6XHRpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gNDM5Olx0XHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiA0NDA6XHRcdFx0ICAgICAgIGJwZnB0cl90IHVhdHRyKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdGludCBlcnI7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWF0dHItXHUwMDNlZnVuY19pbmZvX2NudCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNlbGluZV9pbmZvX2NudCkge1xuIDQ0NTpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gNDQ2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ3Olx0XHRcdHJldHVybiAwO1xuIDQ0ODpcdFx0fVxuIDQ0OTpcdFxuIDQ1MDpcdFx0ZXJyID0gY2hlY2tfYnRmX2Z1bmMoZW52LCBhdHRyLCB1YXR0cik7XG4gNDUxOlx0XHRpZiAoZXJyKVxuIDQ1MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1MzpcdFxuIDQ1NDpcdFx0ZXJyID0gY2hlY2tfYnRmX2xpbmUoZW52LCBhdHRyLCB1YXR0cik7XG4gNDU1Olx0XHRpZiAoZXJyKVxuIDQ1NjpcdFx0XHRyZXR1cm4gZXJyO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0ZXJyID0gY2hlY2tfY29yZV9yZWxvKGVudiwgYXR0ciwgdWF0dHIpO1xuIDQ1OTpcdFx0aWYgKGVycilcbiA0NjA6XHRcdFx0cmV0dXJuIGVycjtcbiA0NjE6XHRcbiA0NjI6XHRcdHJldHVybiAwO1xuIDQ2MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCByZW9yZGVyaW5nIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgQlRGIChCUEYgVHlwZSBGb3JtYXQpIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBpcyB0byBwcmlvcml0aXplIGVycm9yIHJlcG9ydGluZzogc2hvdyBCVEYvQ08tUkUgKENvbXBpbGUtT25jZSwgUnVuLUV2ZXJ5d2hlcmUpIGVycm9ycyAqYmVmb3JlKiBwb3RlbnRpYWxseSBtaXNsZWFkaW5nIGVycm9ycyBjYXVzZWQgYnkgdGhlIHN1YnByb2dyYW0gbGF5b3V0IGJlaW5nIGluY29ycmVjdC4gSSBtZWFuLCBpdCBtYWtlcyBzZW5zZTsgaWYgQ08tUkUgaXMgbWVzc2luZyB3aXRoIHRoZSBwcm9ncmFtLCBpdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8ga25vdyB0aGF0ICpmaXJzdCogaW5zdGVhZCBvZiBzZWVpbmcgYW4gZXJyb3IgYWJvdXQgYW4gaW52YWxpZCBqdW1wIHdpdGhpbiBhIHN1YnByb2dyYW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcm9jZXNzIGludm9sdmVzIGBjaGVja19idGZfZnVuY2AsIGBjaGVja19idGZfbGluZWAsIGFuZCBgY2hlY2tfY29yZV9yZWxvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHZhbGlkYXRpbmcgQlRGIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBvZiB0aGUgQlBGIHByb2dyYW0uIFRoZSBrZXkgaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGNoZWNrcyBmb3IganVtcHMgdGhhdCBjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgb3IgZmFsbHRocm91Z2hzICphZnRlciogcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuCgpCdXQgdGhlbiB0aGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQ6IGBhZGRfc3VicHJvZ3NgIHBvcHVsYXRlcyBgZW52LSZndDtzdWJwcm9nX2luZm9gICpiZWZvcmUqIGBicGZfY2hlY2tfYnRmX2luZm9gLiBTbywgYGNoZWNrX3N1YnByb2dzYCBjaGVja3MgZm9yIGludmFsaWQgbGF5b3V0cyAqYWZ0ZXIqIHN1YnByb2dyYW1zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGVyZWZvcmUsIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IG1lYW5zIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uIG9uIGEgcHJvZ3JhbSB3aXRoIGFuIGluY29ycmVjdCBzdWJwcm9ncmFtIGxheW91dC4gSSBuZWVkIHRvIGJlIHN1cmUuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIENPLVJFIHJlbG9jYXRpb25zICpkbyogbW9kaWZ5IGluc3RydWN0aW9ucywgYnV0IHRoZSBwYXRjaCBzZWVtcyB0byBhc3N1bWUgdGhhdCB0aGV5IGRvbiYjMzk7dCBjaGFuZ2UganVtcCAqb2Zmc2V0cyogKHRoZXkgY2hhbmdlIGltbWVkaWF0ZXMgaW5zdGVhZCkuIEhvd2V2ZXIsIEkgYWxzbyBzYXcgdGhlIGNvbW1pdCBtZXNzYWdlOiAmIzM0O1ZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuJiMzNDsKCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXJlIGFyZSBudW1lcm91cyBkaWFnbm9zdGljIGNoYW5nZXMuIFRoZSBkaWFnbm9zdGljIGNoYW5nZXMgaW5jbHVkZSB0aGUgcmVvcmRlcmluZyBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYCwgdGhlIGNvbnNvbGlkYXRpb24gYW5kIGNsYXJpZmljYXRpb24gb2Ygc2xlZXBhYmxlIGtmdW5jIGNoZWNrcywgYW5kIHZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIGluIGBjaGVja19rZnVuY19hcmdzYC4gU3BlY2lmaWNhbGx5LCBlcnJvciBtZXNzYWdlIGltcHJvdmVtZW50cyB3ZXJlIG1hZGUgaW4gYEtGX0FSR19DT05TVF9NRU1fU0laRWAsIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFRoZXNlIGFyZSBhbGwgYWJvdXQgbWFraW5nIHRoZSB2ZXJpZmllciYjMzk7cyBmZWVkYmFjayBtb3JlIGhlbHBmdWwsIHByb3ZpZGluZyBjbGVhcmVyIHN1Z2dlc3Rpb25zIHRvIHRoZSB1c2VyLgoKSG93ZXZlciwgdGhlIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbnMgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBTaW5jZSB0aGUgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGV4ZWN1dGVzIG9uIGEgcG90ZW50aWFsbHkgJiMzNDtpbnZhbGlkJiMzNDsgc3VicHJvZ3JhbSBsYXlvdXQuIENvdWxkIHRoaXMgY2F1c2UgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gSSBzaG91bGQgY2hlY2sgYGNoZWNrX2J0Zl9mdW5jYCB0byBlbnN1cmUgdGhlIHByb2dyYW0gaGFzIGEgdmFsaWQgbGF5b3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBjaGVja19idGZfZnVuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzItXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjEzMzpzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTEzNC1cdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICYjMzk7Y2hlY2tfYnRmX2Z1bmMmIzM5OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGNoZWNrX2J0Zl9mdW5jYCByb3V0aW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dD8gSXMgdGhpcyBwYXJ0IG9mIGEga2VybmVsIG1vZHVsZSwgYSB1c2VyLXNwYWNlIHV0aWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEJQRiBUeXBlIEZvcm1hdCAoQlRGKSBjaGVja2luZywgd2hpY2ggaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZXRhZGF0YSBhYm91dCBCUEYgcHJvZ3JhbXMsIGFuZCB2ZXJpZnlpbmcgaXRzIGludGVncml0eS4KCkkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIElzIGl0IGxvb2tpbmcgZm9yIG1hbGZvcm1lZCBCVEYgZGF0YSwgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIEJURiBpbmZvIGFuZCB0aGUgYWN0dWFsIEJQRiBwcm9ncmFtLCBvciBwZXJoYXBzIHR5cGUgbWlzbWF0Y2hlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIHNldmVyYWwgYXJlYXMgdGhhdCByZXF1aXJlIGNsb3NlIGluc3BlY3Rpb24sIHN1Y2ggYXM6CiogICAqKkJURiBIZWFkZXIgSW50ZWdyaXR5OioqIEVuc3VyaW5nIHRoZSBCVEYgaGVhZGVyIGlzIHdlbGwtZm9ybWVkIGFuZCB2YWxpZC4KKiAgICoqVHlwZSBEZXNjcmlwdG9yIENvbnNpc3RlbmN5OioqIFZlcmlmeWluZyB0aGUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHlwZXMgcmVjb3JkZWQgaW4gdGhlIEJURiBkYXRhLgoqICAgKipTaXplIGFuZCBBbGlnbm1lbnQ6KiogQ29uZmlybWluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG1hdGNoIGV4cGVjdGF0aW9ucyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4KKiAgICoqRGVwZW5kZW5jeSBSZXNvbHV0aW9uOioqIEFyZSB0aGVyZSBjcm9zcy1yZWZlcmVuY2VzIGJldHdlZW4gdHlwZXM/IFdlIG5lZWQgdG8gZW5zdXJlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdGx5IHJlc29sdmVkLgoqICAgKipFcnJvciBSZXBvcnRpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCBsb2csIHJldHVybiBhbiBlcnJvciBjb2RlLCBvciB0cmlnZ2VyIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBIb3cgdGhvcm91Z2ggaXMgaXQ/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNoZWNrcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBiYXNpYyB2YWxpZGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgZGV0ZWN0aW5nIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/CgpNeSBtZW50YWwgY2hlY2tsaXN0IGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGNvbW1vbiBCVEYtcmVsYXRlZCBpc3N1ZXMuIE5vdywgdGhlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlbS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2hlY2tfYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gMTM0Olx0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiAxMzU6XHRcdFx0XHQgIGJwZnB0cl90IHVhdHRyKVxuIDEzNjpcdHtcbiAxMzc6XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmZ1bmNfcHJvdG8sICpyZXRfdHlwZTtcbiAxMzg6XHRcdHUzMiBpLCBuZnVuY3MsIHVyZWNfc2l6ZTtcbiAxMzk6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvICprcmVjb3JkO1xuIDE0MDpcdFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XG4gMTQxOlx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gMTQyOlx0XHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XG4gMTQzOlx0XHRicGZwdHJfdCB1cmVjb3JkO1xuIDE0NDpcdFx0Ym9vbCBzY2FsYXJfcmV0dXJuO1xuIDE0NTpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gMTQ2Olx0XG4gMTQ3Olx0XHRuZnVuY3MgPSBhdHRyLVx1MDAzZWZ1bmNfaW5mb19jbnQ7XG4gMTQ4Olx0XHRpZiAoIW5mdW5jcykge1xuIDE0OTpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gMTUwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUxOlx0XHRcdHJldHVybiAwO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0aWYgKG5mdW5jcyAhPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQpIHtcbiAxNTQ6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O251bWJlciBvZiBmdW5jcyBpbiBmdW5jX2luZm8gZG9lc24mIzM5O3QgbWF0Y2ggbnVtYmVyIG9mIHN1YnByb2dzXFxuXCYjMzQ7KTtcbiAxNTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU2Olx0XHR9XG4gMTU3Olx0XG4gMTU4Olx0XHR1cmVjX3NpemUgPSBhdHRyLVx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZTtcbiAxNTk6XHRcbiAxNjA6XHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZztcbiAxNjE6XHRcdGJ0ZiA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWJ0ZjtcbiAxNjI6XHRcbiAxNjM6XHRcdHVyZWNvcmQgPSBtYWtlX2JwZnB0cihhdHRyLVx1MDAzZWZ1bmNfaW5mbywgdWF0dHIuaXNfa2VybmVsKTtcbiAxNjQ6XHRcbiAxNjU6XHRcdGtyZWNvcmQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm87XG4gMTY2Olx0XHRpbmZvX2F1eCA9IGt6YWxsb2Nfb2JqcygqaW5mb19hdXgsIG5mdW5jcyxcbiAxNjc6XHRcdFx0XHRcdEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gMTY4Olx0XHRpZiAoIWluZm9fYXV4KVxuIDE2OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNzA6XHRcbiAxNzE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mdW5jczsgaSYjNDM7JiM0MzspIHtcbiAxNzI6XHRcdFx0LyogY2hlY2sgaW5zbl9vZmYgKi9cbiAxNzM6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgIT0ga3JlY29yZFtpXS5pbnNuX29mZikge1xuIDE3NjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmdW5jX2luZm8gQlRGIHNlY3Rpb24gZG9lc24mIzM5O3QgbWF0Y2ggc3VicHJvZyBsYXlvdXQgaW4gQlBGIHByb2dyYW1cXG5cJiMzNDspO1xuIDE3NzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTc4Olx0XHRcdH1cbiAxNzk6XHRcbiAxODA6XHRcdFx0LyogQWxyZWFkeSBjaGVja2VkIHR5cGVfaWQgKi9cbiAxODE6XHRcdFx0dHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0Ziwga3JlY29yZFtpXS50eXBlX2lkKTtcbiAxODI6XHRcdFx0aW5mb19hdXhbaV0ubGlua2FnZSA9IEJURl9JTkZPX1ZMRU4odHlwZS1cdTAwM2VpbmZvKTtcbiAxODM6XHRcdFx0LyogQWxyZWFkeSBjaGVja2VkIGZ1bmNfcHJvdG8gKi9cbiAxODQ6XHRcdFx0ZnVuY19wcm90byA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgdHlwZS1cdTAwM2V0eXBlKTtcbiAxODU6XHRcbiAxODY6XHRcdFx0cmV0X3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG4gMTg3Olx0XHRcdHNjYWxhcl9yZXR1cm4gPVxuIDE4ODpcdFx0XHRcdGJ0Zl90eXBlX2lzX3NtYWxsX2ludChyZXRfdHlwZSkgfHwgYnRmX2lzX2FueV9lbnVtKHJldF90eXBlKTtcbiAxODk6XHRcdFx0aWYgKGkgXHUwMDI2XHUwMDI2ICFzY2FsYXJfcmV0dXJuIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnMpIHtcbiAxOTA6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7TERfQUJTIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJiMzOTtpbnQmIzM5Oy5cXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTkyOlx0XHRcdH1cbiAxOTM6XHRcdFx0aWYgKGkgXHUwMDI2XHUwMDI2ICFzY2FsYXJfcmV0dXJuIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc190YWlsX2NhbGwpIHtcbiAxOTQ6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dGFpbF9jYWxsIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJiMzOTtpbnQmIzM5Oy5cXG5cJiMzNDspO1xuIDE5NTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMTk2Olx0XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4gMTk5Olx0XHRcdGJwZnB0cl9hZGQoXHUwMDI2dXJlY29yZCwgdXJlY19zaXplKTtcbiAyMDA6XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXggPSBpbmZvX2F1eDtcbiAyMDM6XHRcdHJldHVybiAwO1xuIDIwNDpcdFxuIDIwNTpcdGVycl9mcmVlOlxuIDIwNjpcdFx0a2ZyZWUoaW5mb19hdXgpO1xuIDIwNzpcdFx0cmV0dXJuIHJldDtcbiAyMDg6XHR9XG4gMjA5Olx0XG4gMjEwOlx0I2RlZmluZSBNSU5fQlBGX0xJTkVJTkZPX1NJWkVcdG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbGluZV9pbmZvLCBsaW5lX2NvbClcbiAyMTE6XHQjZGVmaW5lIE1BWF9MSU5FSU5GT19SRUNfU0laRVx0TUFYX0ZVTkNJTkZPX1JFQ19TSVpFXG4gMjEyOlx0XG4gMjEzOlx0c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDIxNDpcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gMjE1Olx0XHRcdFx0ICBicGZwdHJfdCB1YXR0cilcbiAyMTY6XHR7XG4gMjE3Olx0XHR1MzIgaSwgcywgbnJfbGluZm8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSwgcHJldl9vZmZzZXQgPSAwO1xuIDIxODpcdFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YjtcbiAyMTk6XHRcdHN0cnVjdCBicGZfbGluZV9pbmZvICpsaW5mbztcbiAyMjA6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiAyMjE6XHRcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcbiAyMjI6XHRcdGJwZnB0cl90IHVsaW5mbztcbiAyMjM6XHRcdGludCBlcnI7XG4gMjI0Olx0XG4gMjI1Olx0XHRucl9saW5mbyA9IGF0dHItXHUwMDNlbGluZV9pbmZvX2NudDtcbiAyMjY6XHRcdGlmICghbnJfbGluZm8pXG4gMjI3Olx0XHRcdHJldHVybiAwO1xuIDIyODpcdFx0aWYgKG5yX2xpbmZvIFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBicGZfbGluZV9pbmZvKSlcbiAyMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZWNfc2l6ZSA9IGF0dHItXHUwMDNlbGluZV9pbmZvX3JlY19zaXplO1xuIDIzMjpcdFx0aWYgKHJlY19zaXplIFx1MDAzYyBNSU5fQlBGX0xJTkVJTkZPX1NJWkUgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEJURiBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgY2hlY2tfYnRmX2Z1bmNgIGlzIHJlbHlpbmcgb24gYGVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnNgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBaCwgdGhhdCYjMzk7cyB3aHkgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCB3YXMgc3BsaXQgb2ZmIGZyb20gYGNoZWNrX3N1YnByb2dzYCBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBmbGFnIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgYWxsb3dzIGBjaGVja19idGZfZnVuY2AgdG8gZWZmaWNpZW50bHkgdXNlIHRoZSBwcmVjb21wdXRlZCBpbmZvcm1hdGlvbi4KCkhvd2V2ZXIsIGEgcG90ZW50aWFsIHByb2JsZW0gaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGFsc28gcGVyZm9ybXMgZXNzZW50aWFsIHZhbGlkYXRpb24gbGlrZSBjaGVja2luZyBmb3IgaW52YWxpZCBqdW1wcyBhbmQgZmFsbHRocm91Z2hzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpZiBJIG1vdmUgYGNoZWNrX3N1YnByb2dzYCAqYWZ0ZXIqIGBicGZfY2hlY2tfYnRmX2luZm9gLCB3aWxsIHRoYXQgY3JlYXRlIGFuIGlzc3VlPyBXb3VsZCBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBwb3RlbnRpYWxseSBwcm9jZXNzIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGludmFsaWQganVtcCBpbnN0cnVjdGlvbnM/IEkgbmVlZCB0byBrbm93IGlmIGBicGZfY2hlY2tfYnRmX2luZm9gIGNhcmVzIGFib3V0IHRob3NlIHBhcnRpY3VsYXIgY2hlY2tzLgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHdoYXQgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgZG9lcy4gYGNoZWNrX2J0Zl9mdW5jYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBgbmZ1bmNzYCwgY2hlY2tpbmcgdGhlIGBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydGAgdmFsdWUuIFRoZW4sIEkgc2VlIGBjaGVja19idGZfbGluZWAgaXRlcmF0ZXMgdGhyb3VnaCBgbnJfbGluZm9gIGFuZCBmb2N1c2VzIG9uIHZlcmlmeWluZyBgbGluZm9baV0uaW5zbl9vZmZgLiBMZXQgbWUgbm93IGNoZWNrIGBjaGVja19idGZfbGluZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jaGVja19idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMzpcdFx0ICAgIHJlY19zaXplIFx1MDAzZSBNQVhfTElORUlORk9fUkVDX1NJWkUgfHxcbiAyMzQ6XHRcdCAgICByZWNfc2l6ZSBcdTAwMjYgKHNpemVvZih1MzIpIC0gMSkpXG4gMjM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzNjpcdFxuIDIzNzpcdFx0LyogTmVlZCB0byB6ZXJvIGl0IGluIGNhc2UgdGhlIHVzZXJzcGFjZSBtYXlcbiAyMzg6XHRcdCAqIHBhc3MgaW4gYSBzbWFsbGVyIGJwZl9saW5lX2luZm8gb2JqZWN0LlxuIDIzOTpcdFx0ICovXG4gMjQwOlx0XHRsaW5mbyA9IGt2emFsbG9jX29ianMoc3RydWN0IGJwZl9saW5lX2luZm8sIG5yX2xpbmZvLFxuIDI0MTpcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XG4gMjQyOlx0XHRpZiAoIWxpbmZvKVxuIDI0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZztcbiAyNDY6XHRcdGJ0ZiA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWJ0ZjtcbiAyNDc6XHRcbiAyNDg6XHRcdHMgPSAwO1xuIDI0OTpcdFx0c3ViID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbiAyNTA6XHRcdHVsaW5mbyA9IG1ha2VfYnBmcHRyKGF0dHItXHUwMDNlbGluZV9pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xuIDI1MTpcdFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbyk7XG4gMjUyOlx0XHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDI1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbGluZm87IGkmIzQzOyYjNDM7KSB7XG4gMjU0Olx0XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbiAyNTU6XHRcdFx0aWYgKGVycikge1xuIDI1NjpcdFx0XHRcdGlmIChlcnIgPT0gLUUyQklHKSB7XG4gMjU3Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bm9uemVybyB0YWlsaW5nIHJlY29yZCBpbiBsaW5lX2luZm9cJiMzNDspO1xuIDI1ODpcdFx0XHRcdFx0aWYgKGNvcHlfdG9fYnBmcHRyX29mZnNldCh1YXR0cixcbiAyNTk6XHRcdFx0XHRcdFx0XHRcdCAgb2Zmc2V0b2YodW5pb24gYnBmX2F0dHIsIGxpbmVfaW5mb19yZWNfc2l6ZSksXG4gMjYwOlx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmV4cGVjdGVkX3NpemUsIHNpemVvZihleHBlY3RlZF9zaXplKSkpXG4gMjYxOlx0XHRcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gMjYyOlx0XHRcdFx0fVxuIDI2MzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjY0Olx0XHRcdH1cbiAyNjU6XHRcbiAyNjY6XHRcdFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXHUwMDI2bGluZm9baV0sIHVsaW5mbywgbmNvcHkpKSB7XG4gMjY3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAyNjg6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDI2OTpcdFx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRcdC8qXG4gMjcyOlx0XHRcdCAqIENoZWNrIGluc25fb2ZmIHRvIGVuc3VyZVxuIDI3MzpcdFx0XHQgKiAxKSBzdHJpY3RseSBpbmNyZWFzaW5nIEFORFxuIDI3NDpcdFx0XHQgKiAyKSBib3VuZGVkIGJ5IHByb2ctXHUwMDNlbGVuXG4gMjc1Olx0XHRcdCAqXG4gMjc2Olx0XHRcdCAqIFRoZSBsaW5mb1swXS5pbnNuX29mZiA9PSAwIGNoZWNrIGxvZ2ljYWxseSBmYWxscyBpbnRvXG4gMjc3Olx0XHRcdCAqIHRoZSBsYXRlciBcJiMzNDttaXNzaW5nIGJwZl9saW5lX2luZm8gZm9yIGZ1bmMuLi5cJiMzNDsgY2FzZVxuIDI3ODpcdFx0XHQgKiBiZWNhdXNlIHRoZSBmaXJzdCBsaW5mb1swXS5pbnNuX29mZiBtdXN0IGJlIHRoZVxuIDI3OTpcdFx0XHQgKiBmaXJzdCBzdWIgYWxzbyBhbmQgdGhlIGZpcnN0IHN1YiBtdXN0IGhhdmVcbiAyODA6XHRcdFx0ICogc3VicHJvZ19pbmZvWzBdLnN0YXJ0ID09IDAuXG4gMjgxOlx0XHRcdCAqL1xuIDI4MjpcdFx0XHRpZiAoKGkgXHUwMDI2XHUwMDI2IGxpbmZvW2ldLmluc25fb2ZmIFx1MDAzYz0gcHJldl9vZmZzZXQpIHx8XG4gMjgzOlx0XHRcdCAgICBsaW5mb1tpXS5pbnNuX29mZiBcdTAwM2U9IHByb2ctXHUwMDNlbGVuKSB7XG4gMjg0Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0ludmFsaWQgbGluZV9pbmZvWyV1XS5pbnNuX29mZjoldSAocHJldl9vZmZzZXQ6JXUgcHJvZy1cdTAwM2VsZW46JXUpXFxuXCYjMzQ7LFxuIDI4NTpcdFx0XHRcdFx0aSwgbGluZm9baV0uaW5zbl9vZmYsIHByZXZfb2Zmc2V0LFxuIDI4NjpcdFx0XHRcdFx0cHJvZy1cdTAwM2VsZW4pO1xuIDI4NzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjg4Olx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyODk6XHRcdFx0fVxuIDI5MDpcdFxuIDI5MTpcdFx0XHRpZiAoIXByb2ctXHUwMDNlaW5zbnNpW2xpbmZvW2ldLmluc25fb2ZmXS5jb2RlKSB7XG4gMjkyOlx0XHRcdFx0dmVyYm9zZShlbnYsXG4gMjkzOlx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGluc24gY29kZSBhdCBsaW5lX2luZm9bJXVdLmluc25fb2ZmXFxuXCYjMzQ7LFxuIDI5NDpcdFx0XHRcdFx0aSk7XG4gMjk1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAyOTY6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDI5NzpcdFx0XHR9XG4gMjk4Olx0XG4gMjk5Olx0XHRcdGlmICghYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0ubGluZV9vZmYpIHx8XG4gMzAwOlx0XHRcdCAgICAhYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0uZmlsZV9uYW1lX29mZikpIHtcbiAzMDE6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCBsaW5lX2luZm9bJXVdLmxpbmVfb2ZmIG9yIC5maWxlX25hbWVfb2ZmXFxuXCYjMzQ7LCBpKTtcbiAzMDI6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMwMzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMzA0Olx0XHRcdH1cbiAzMDU6XHRcbiAzMDY6XHRcdFx0aWYgKHMgIT0gZW52LVx1MDAzZXN1YnByb2dfY250KSB7XG4gMzA3Olx0XHRcdFx0aWYgKGxpbmZvW2ldLmluc25fb2ZmID09IHN1YltzXS5zdGFydCkge1xuIDMwODpcdFx0XHRcdFx0c3ViW3NdLmxpbmZvX2lkeCA9IGk7XG4gMzA5Olx0XHRcdFx0XHRzJiM0MzsmIzQzOztcbiAzMTA6XHRcdFx0XHR9IGVsc2UgaWYgKHN1YltzXS5zdGFydCBcdTAwM2MgbGluZm9baV0uaW5zbl9vZmYpIHtcbiAzMTE6XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDttaXNzaW5nIGJwZl9saW5lX2luZm8gZm9yIGZ1bmMjJXVcXG5cJiMzNDssIHMpO1xuIDMxMjpcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMTM6XHRcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMzE0Olx0XHRcdFx0fVxuIDMxNTpcdFx0XHR9XG4gMzE2Olx0XG4gMzE3Olx0XHRcdHByZXZfb2Zmc2V0ID0gbGluZm9baV0uaW5zbl9vZmY7XG4gMzE4Olx0XHRcdGJwZnB0cl9hZGQoXHUwMDI2dWxpbmZvLCByZWNfc2l6ZSk7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRpZiAocyAhPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQpIHtcbiAzMjI6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgJXUgZnVuY3Mgc3RhcnRpbmcgZnJvbSBmdW5jIyV1XFxuXCYjMzQ7LFxuIDMyMzpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX2NudCAtIHMsIHMpO1xuIDMyNDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDMyNTpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDMyNjpcdFx0fVxuIDMyNzpcdFxuIDMyODpcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlbGluZm8gPSBsaW5mbztcbiAzMjk6XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZW5yX2xpbmZvID0gbnJfbGluZm87XG4gMzMwOlx0XG4gMzMxOlx0XHRyZXR1cm4gMDtcbiAzMzI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBDb2RlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGEgY2VydGFpbiBjaGVjayBpcyBoYXBwZW5pbmcgd2hlcmUgaXQgaXMuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja19idGZfaW5mb2AgaXNuJiMzOTt0IGNvbmNlcm5lZCB3aXRoIGp1bXBzIG9yIGhvdyB0aGUgY29kZSBmbG93cyB3aXRoaW4gdGhlIHN1YnByb2dyYW1zLiBJdHMgcHJpbWFyeSBqb2Igc2VlbXMgdG8gYmUgdmFsaWRhdGluZyB0aGF0IHRoZSBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggdGhlIHN1YnByb2dyYW0gYm91bmRhcmllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpZGVudGlmaWVkIGJ5IGBhZGRfc3VicHJvZ3NgLiBTbywgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2Ug4oCTIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzIGludGVuZGVkIHRvIHByaW9yaXRpemUgcmVwb3J0aW5nIEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBzdWJwcm9ncmFtIGxheW91dC4gSXQgbWFrZXMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZXMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuCgpCdXQgd2FpdCwgYSBuYWdnaW5nIHF1ZXN0aW9uOiBkb2VzIGBicGZfY2hlY2tfYnRmX2luZm9gIGFjdHVhbGx5ICphcHBseSogQ08tUkUgcmVsb2NhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gSWYgaXQgZG9lcywgdGhlbiB0aGUgb3JkZXJpbmcgaXMgZXZlbiBtb3JlIGNyaXRpY2FsLiBUaW1lIHRvIGRpdmUgaW50byBgY2hlY2tfY29yZV9yZWxvYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMzOlx0ZXJyX2ZyZWU6XG4gMzM0Olx0XHRrdmZyZWUobGluZm8pO1xuIDMzNTpcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHR9XG4gMzM3Olx0XG4gMzM4Olx0I2RlZmluZSBNSU5fQ09SRV9SRUxPX1NJWkVcdHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbylcbiAzMzk6XHQjZGVmaW5lIE1BWF9DT1JFX1JFTE9fU0laRVx0TUFYX0ZVTkNJTkZPX1JFQ19TSVpFXG4gMzQwOlx0XG4gMzQxOlx0c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAzNDI6XHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiAzNDM6XHRcdFx0XHQgICBicGZwdHJfdCB1YXR0cilcbiAzNDQ6XHR7XG4gMzQ1Olx0XHR1MzIgaSwgbnJfY29yZV9yZWxvLCBuY29weSwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemU7XG4gMzQ2Olx0XHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyBjb3JlX3JlbG8gPSB7fTtcbiAzNDc6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuIDM0ODpcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmO1xuIDM0OTpcdFx0c3RydWN0IGJwZl9jb3JlX2N0eCBjdHggPSB7XG4gMzUwOlx0XHRcdC5sb2cgPSBcdTAwMjZlbnYtXHUwMDNlbG9nLFxuIDM1MTpcdFx0XHQuYnRmID0gYnRmLFxuIDM1MjpcdFx0fTtcbiAzNTM6XHRcdGJwZnB0cl90IHVfY29yZV9yZWxvO1xuIDM1NDpcdFx0aW50IGVycjtcbiAzNTU6XHRcbiAzNTY6XHRcdG5yX2NvcmVfcmVsbyA9IGF0dHItXHUwMDNlY29yZV9yZWxvX2NudDtcbiAzNTc6XHRcdGlmICghbnJfY29yZV9yZWxvKVxuIDM1ODpcdFx0XHRyZXR1cm4gMDtcbiAzNTk6XHRcdGlmIChucl9jb3JlX3JlbG8gXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKVxuIDM2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjE6XHRcbiAzNjI6XHRcdHJlY19zaXplID0gYXR0ci1cdTAwM2Vjb3JlX3JlbG9fcmVjX3NpemU7XG4gMzYzOlx0XHRpZiAocmVjX3NpemUgXHUwMDNjIE1JTl9DT1JFX1JFTE9fU0laRSB8fFxuIDM2NDpcdFx0ICAgIHJlY19zaXplIFx1MDAzZSBNQVhfQ09SRV9SRUxPX1NJWkUgfHxcbiAzNjU6XHRcdCAgICByZWNfc2l6ZSAlIHNpemVvZih1MzIpKVxuIDM2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjc6XHRcbiAzNjg6XHRcdHVfY29yZV9yZWxvID0gbWFrZV9icGZwdHIoYXR0ci1cdTAwM2Vjb3JlX3JlbG9zLCB1YXR0ci5pc19rZXJuZWwpO1xuIDM2OTpcdFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbyk7XG4gMzcwOlx0XHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDM3MTpcdFxuIDM3MjpcdFx0LyogVW5saWtlIGZ1bmNfaW5mbyBhbmQgbGluZV9pbmZvLCBjb3B5IGFuZCBhcHBseSBlYWNoIENPLVJFXG4gMzczOlx0XHQgKiByZWxvY2F0aW9uIHJlY29yZCBvbmUgYXQgYSB0aW1lLlxuIDM3NDpcdFx0ICovXG4gMzc1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jb3JlX3JlbG87IGkmIzQzOyYjNDM7KSB7XG4gMzc2Olx0XHRcdC8qIGZ1dHVyZSBwcm9vZmluZyB3aGVuIHNpemVvZihicGZfY29yZV9yZWxvKSBjaGFuZ2VzICovXG4gMzc3Olx0XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xuIDM3ODpcdFx0XHRpZiAoZXJyKSB7XG4gMzc5Olx0XHRcdFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcbiAzODA6XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtub256ZXJvIHRhaWxpbmcgcmVjb3JkIGluIGNvcmVfcmVsb1wmIzM0Oyk7XG4gMzgxOlx0XHRcdFx0XHRpZiAoY29weV90b19icGZwdHJfb2Zmc2V0KHVhdHRyLFxuIDM4MjpcdFx0XHRcdFx0XHRcdFx0ICBvZmZzZXRvZih1bmlvbiBicGZfYXR0ciwgY29yZV9yZWxvX3JlY19zaXplKSxcbiAzODM6XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXhwZWN0ZWRfc2l6ZSwgc2l6ZW9mKGV4cGVjdGVkX3NpemUpKSlcbiAzODQ6XHRcdFx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAzODU6XHRcdFx0XHR9XG4gMzg2Olx0XHRcdFx0YnJlYWs7XG4gMzg3Olx0XHRcdH1cbiAzODg6XHRcbiAzODk6XHRcdFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXHUwMDI2Y29yZV9yZWxvLCB1X2NvcmVfcmVsbywgbmNvcHkpKSB7XG4gMzkwOlx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiAzOTE6XHRcdFx0XHRicmVhaztcbiAzOTI6XHRcdFx0fVxuIDM5MzpcdFxuIDM5NDpcdFx0XHRpZiAoY29yZV9yZWxvLmluc25fb2ZmICUgOCB8fCBjb3JlX3JlbG8uaW5zbl9vZmYgLyA4IFx1MDAzZT0gcHJvZy1cdTAwM2VsZW4pIHtcbiAzOTU6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCBjb3JlX3JlbG9bJXVdLmluc25fb2ZmOiV1IHByb2ctXHUwMDNlbGVuOiV1XFxuXCYjMzQ7LFxuIDM5NjpcdFx0XHRcdFx0aSwgY29yZV9yZWxvLmluc25fb2ZmLCBwcm9nLVx1MDAzZWxlbik7XG4gMzk3Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzOTg6XHRcdFx0XHRicmVhaztcbiAzOTk6XHRcdFx0fVxuIDQwMDpcdFxuIDQwMTpcdFx0XHRlcnIgPSBicGZfY29yZV9hcHBseShcdTAwMjZjdHgsIFx1MDAyNmNvcmVfcmVsbywgaSxcbiA0MDI6XHRcdFx0XHRcdCAgICAgXHUwMDI2cHJvZy1cdTAwM2VpbnNuc2lbY29yZV9yZWxvLmluc25fb2ZmIC8gOF0pO1xuIDQwMzpcdFx0XHRpZiAoZXJyKVxuIDQwNDpcdFx0XHRcdGJyZWFrO1xuIDQwNTpcdFx0XHRicGZwdHJfYWRkKFx1MDAyNnVfY29yZV9yZWxvLCByZWNfc2l6ZSk7XG4gNDA2Olx0XHR9XG4gNDA3Olx0XHRyZXR1cm4gZXJyO1xuIDQwODpcdH1cbiA0MDk6XHRcbiA0MTA6XHRpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA0MTE6XHRcdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4gNDEyOlx0XHRcdFx0IGJwZnB0cl90IHVhdHRyKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiA0MTU6XHRcdGludCBlcnI7XG4gNDE2Olx0XG4gNDE3Olx0XHRpZiAoIWF0dHItXHUwMDNlZnVuY19pbmZvX2NudCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNlbGluZV9pbmZvX2NudCkge1xuIDQxODpcdFx0XHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXG4gNDE5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIwOlx0XHRcdHJldHVybiAwO1xuIDQyMTpcdFx0fVxuIDQyMjpcdFxuIDQyMzpcdFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVx1MDAzZXByb2dfYnRmX2ZkKTtcbiA0MjQ6XHRcdGlmIChJU19FUlIoYnRmKSlcbiA0MjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnRmKTtcbiA0MjY6XHRcdGlmIChidGZfaXNfa2VybmVsKGJ0ZikpIHtcbiA0Mjc6XHRcdFx0YnRmX3B1dChidGYpO1xuIDQyODpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiA0Mjk6XHRcdH1cbiA0MzA6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGYgPSBidGY7XG4gNDMxOlx0XG4gNDMyOlx0XHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFZlcmlmaWVyIERpYWdub3N0aWMgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIGBicGZfY29yZV9hcHBseWAgY291bGQgaW1wYWN0IGBjaGVja19zdWJwcm9nc2AsIHdoaWNoIGRlYWxzIHdpdGggc3VicHJvZ3JhbSBib3VuZGFyaWVzIGFuZCBqdW1wcy4gU2luY2UgQ08tUkUgcmVsb2NhdGlvbnMgcHJpbWFyaWx5IHRvdWNoIHRoZSBgaW1tYCBmaWVsZCBhbmQgbm90IGp1bXAgb2Zmc2V0cyBvciBvcGNvZGVzIChleGNlcHQgZm9yIE5PUHMgb3IgZGlyZWN0IHZhbHVlIGxvYWRzKSwgSSBmaWd1cmVkIGBjaGVja19zdWJwcm9nc2Agc2hvdWxkIHN0aWxsIGJlIHNhZmUgdG8gcnVuIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gLiBUaGUgcG90ZW50aWFsIGZvciBhIE5PUCwgd2hpbGUgYSB2YWxpZCBhbHRlcmF0aW9uLCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWx0ZXIganVtcHMuCgpOZXh0LCBJIGxvb2tlZCBmb3IgYW55IG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcyBiZXlvbmQgdGhpcyByZW9yZGVyaW5nLiBUaGUgY29tbWl0IGxvZyBhbmQgdGhlIGNvZGUgY2hhbmdlcyBwb2ludCBhbG1vc3QgZW50aXJlbHkgdG93YXJkIGltcHJvdmVkIGRpYWdub3N0aWNzIOKAkyBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMsIGNsZWFyZXIgaGludHMsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIG1haW4gc3RydWN0dXJhbCBzaGlmdCBpcyB0aGUgbW92ZSBvZiBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgJiMzNDtzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IHRoYXQgd2FycmFudHMgZnV6emluZz8gVGhlIGhpbnQgaXMgaGVscGZ1bC4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGVzc2VudGlhbGx5IGltcHJvdmVkIGxvZ2dpbmcgYW5kIGVycm9yIHJlcG9ydGluZywgYW5kIHRoZXkgZG9uJiMzOTt0IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiAqdmFsaWQqIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb24gaW52YWxpZCBwcm9ncmFtcyBhbmQgdGhlIHZlcmlmaWVyIGl0c2VsZi4gVGhlIGNoYW5nZSBhbHRlcnMgdGhlIHZlcmlmaWVyJiMzOTtzIGZhaWx1cmUgcGF0aCwgYnV0IHRoZSBmdW5kYW1lbnRhbCBjaGVja3MgcmVtYWluIHRoZSBzYW1lLgoKQSBrZXkgcG9pbnQgaXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIHJlb3JkZXJpbmc6IHByaW9yaXRpemUgQlRGIGFuZCBDTy1SRSBlcnJvcnMgKmJlZm9yZSogc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGUgaWRlYSBpcyB0byBnaXZlIHVzZXJzIHRoZSBtb3N0IHJlbGV2YW50IGVycm9yIG1lc3NhZ2VzIGZpcnN0LiBUaGlzIG1ha2VzIHRoZSB1c2VyIGV4cGVyaWVuY2UgYmV0dGVyIHdpdGggZXJyb3IgbWVzc2FnZXMuIEV2ZW4gaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggc3VicHJvZ3JhbSBsYXlvdXQgYW5kIENPLVJFL0JURiwgdGhpcyBwcmlvcml0aXplcyB0aGUgQ08tUkUvQlRGIGVycm9yLiBUaGUgdmVyaWZpZXImIzM5O3MgZXhlY3V0aW9uIHBhdGggaXMgZGlmZmVyZW50IGluIHRoYXQgaXQgd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgZXJyb3IgYW5kIHByb2R1Y2UgYSBkaWZmZXJlbnQgbG9nIG91dHB1dC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgKnBvdGVudGlhbCogZm9yIGNyYXNoZXMuIEkgcmV2aWV3ZWQgdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIEJURiBjaGVja2luZyBjb2RlIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgc3RydWN0dXJhbCBjaGVja3MgcGVyZm9ybWVkIGJ5IGBjaGVja19zdWJwcm9nc2AsIHNvIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhIHJpc2sgb2YgYSBjcmFzaCBpbiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4KCkdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyB0aGUgZXhwbGljaXQgZ3VpZGFuY2UgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBkaWFnbm9zdGljIGFuZCBlcnJvciBtZXNzYWdlIGltcHJvdmVtZW50cywgSSB0aGluayB0aGUgYW5zd2VyIGlzIGNsZWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzM6XHRcbjMwMzQ6XHRzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDM1Olx0e1xuMzAzNjpcdFx0aW50IGksIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kLCBvZmYsIGN1cl9zdWJwcm9nID0gMDtcbjMwMzc6XHRcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gZW52LVx1MDAzZXN1YnByb2dfaW5mbztcbjMwMzg6XHRcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbjMwMzk6XHRcdGludCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbjMwNDA6XHRcbjMwNDE6XHRcdC8qIG5vdyBjaGVjayB0aGF0IGFsbCBqdW1wcyBhcmUgd2l0aGluIHRoZSBzYW1lIHN1YnByb2cgKi9cbjMwNDI6XHRcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcbjMwNDM6XHRcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbjMwNDQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOykge1xuMzA0NTpcdFx0XHR1OCBjb2RlID0gaW5zbltpXS5jb2RlO1xuMzA0NjpcdFxuMzA0NzpcdFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAgXHUwMDI2XHUwMDI2IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpXG4zMDQ4Olx0XHRcdFx0Z290byBuZXh0O1xuMzA0OTpcdFx0XHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxuMzA1MDpcdFx0XHRcdGdvdG8gbmV4dDtcbjMwNTE6XHRcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfRVhJVCkge1xuMzA1MjpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmV4aXRfaWR4ID0gaTtcbjMwNTM6XHRcdFx0XHRnb3RvIG5leHQ7XG4zMDU0Olx0XHRcdH1cbjMwNTU6XHRcdFx0b2ZmID0gaSAmIzQzOyBicGZfam1wX29mZnNldChcdTAwMjZpbnNuW2ldKSAmIzQzOyAxO1xuMzA1NjpcdFx0XHRpZiAob2ZmIFx1MDAzYyBzdWJwcm9nX3N0YXJ0IHx8IG9mZiBcdTAwM2U9IHN1YnByb2dfZW5kKSB7XG4zMDU3Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2p1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAlZCB0byAlZFxcblwmIzM0OywgaSwgb2ZmKTtcbjMwNTg6XHRcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbjMwNTk6XHRcdFx0XHRcdGVudiwgaSwgXCYjMzQ7anVtcCBvdXQgb2YgcmFuZ2VcJiMzNDssXG4zMDYwOlx0XHRcdFx0XHRcJiMzNDtLZWVwIGJyYW5jaCB0YXJnZXRzIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9ncmFtLCBvciB1c2UgYW4gZXhwbGljaXQgc3VicHJvZ3JhbSBjYWxsLlwmIzM0OyxcbjMwNjE6XHRcdFx0XHRcdFwmIzM0O0luc3RydWN0aW9uICVkIGp1bXBzIHRvIGluc3RydWN0aW9uICVkLCBidXQgc3VicHJvZ3JhbSAlZCBvbmx5IGNvbnRhaW5zIGluc3RydWN0aW9ucyAlZCB0aHJvdWdoICVkLiBcJiMzNDtcbjMwNjI6XHRcdFx0XHRcdFwmIzM0O0EgYnJhbmNoIHRhcmdldCBtdXN0IHN0YXkgaW5zaWRlIHRoZSBzYW1lIHN1YnByb2dyYW0uXCYjMzQ7LFxuMzA2MzpcdFx0XHRcdFx0aSwgb2ZmLCBjdXJfc3VicHJvZywgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQgLSAxKTtcbjMwNjQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwNjU6XHRcdFx0fVxuMzA2NjpcdG5leHQ6XG4zMDY3Olx0XHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuMzA2ODpcdFx0XHRcdC8qXG4zMDY5Olx0XHRcdFx0ICogVG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyLFxuMzA3MDpcdFx0XHRcdCAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0XG4zMDcxOlx0XHRcdFx0ICogb3IgdW5jb25kaXRpb25hbCBqdW1wIGJhY2sgb3IgYnBmX3Rocm93IGNhbGwuXG4zMDcyOlx0XHRcdFx0ICovXG4zMDczOlx0XHRcdFx0aWYgKGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkgXHUwMDI2XHUwMDI2XG4zMDc0Olx0XHRcdFx0ICAgIGNvZGUgIT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkgXHUwMDI2XHUwMDI2XG4zMDc1Olx0XHRcdFx0ICAgIGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XG4zMDc2Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcblwmIzM0Oyk7XG4zMDc3Olx0XHRcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbjMwNzg6XHRcdFx0XHRcdFx0ZW52LCBpLCBcJiMzNDtzdWJwcm9ncmFtIGNhbiBmYWxsIHRocm91Z2hcJiMzNDssXG4zMDc5Olx0XHRcdFx0XHRcdFwmIzM0O0VuZCBlYWNoIHN1YnByb2dyYW0gd2l0aCBhbiBleGl0IG9yIGFuIGV4cGxpY2l0IGp1bXAgdGhhdCBrZWVwcyBjb250cm9sIGZsb3cgaW5zaWRlIHRoZSBzdWJwcm9ncmFtLlwmIzM0OyxcbjMwODA6XHRcdFx0XHRcdFx0XCYjMzQ7U3VicHJvZ3JhbSAlZCByZWFjaGVzIGl0cyBsYXN0IGluc3RydWN0aW9uICVkIHdpdGhvdXQgYW4gZXhpdCBvciBqdW1wLCBzbyBjb250cm9sIGNvdWxkIGNvbnRpbnVlIGludG8gdGhlIG5leHQgc3VicHJvZ3JhbS5cJiMzNDssXG4zMDgxOlx0XHRcdFx0XHRcdGN1cl9zdWJwcm9nLCBpKTtcbjMwODI6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzA4MzpcdFx0XHRcdH1cbjMwODQ6XHRcdFx0XHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ19lbmQ7XG4zMDg1Olx0XHRcdFx0Y3VyX3N1YnByb2cmIzQzOyYjNDM7O1xuMzA4NjpcdFx0XHRcdGlmIChjdXJfc3VicHJvZyBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250KVxuMzA4NzpcdFx0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICYjNDM7IDFdLnN0YXJ0O1xuMzA4ODpcdFx0XHR9XG4zMDg5Olx0XHR9XG4zMDkwOlx0XHRyZXR1cm4gMDtcbjMwOTE6XHR9XG4zMDkyOlx0XG4zMDkzOlx0LypcbjMwOTQ6XHQgKiBTb3J0IHN1YnByb2dzIGluIHRvcG9sb2dpY2FsIG9yZGVyIHNvIHRoYXQgbGVhZiBzdWJwcm9ncyBjb21lIGZpcnN0IGFuZFxuMzA5NTpcdCAqIHRoZWlyIGNhbGxlcnMgY29tZSBsYXRlci4gVGhpcyBpcyBhIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgY2FsbFxuMzA5NjpcdCAqIGdyYXBoLiBTY2FuIG9ubHkgcmVhY2hhYmxlIGluc3RydWN0aW9ucyAodGhvc2UgaW4gdGhlIGNvbXB1dGVkIHBvc3RvcmRlcikgb2ZcbjMwOTc6XHQgKiB0aGUgY3VycmVudCBzdWJwcm9nIHRvIGRpc2NvdmVyIGNhbGxlZXMgKGRpcmVjdCBzdWJwcm9ncyBhbmQgc3luY1xuMzA5ODpcdCAqIGNhbGxiYWNrcykuXG4zMDk5Olx0ICovXG4zMTAwOlx0c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbjMxMDE6XHR7XG4zMTAyOlx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuMzEwMzpcdFx0aW50ICppbnNuX3Bvc3RvcmRlciA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XG4zMTA0Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMTA1Olx0XHRpbnQgY250ID0gZW52LVx1MDAzZXN1YnByb2dfY250O1xuMzEwNjpcdFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xuMzEwNzpcdFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcbjMxMDg6XHRcdGludCBpLCByZXQgPSAwO1xuMzEwOTpcdFx0dTggKmNvbG9yID0gTlVMTDtcbjMxMTA6XHRcbjMxMTE6XHRcdGNvbG9yID0ga3Z6YWxsb2Nfb2JqcygqY29sb3IsIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjMxMTI6XHRcdGRmc19zdGFjayA9IGt2bWFsbG9jX29ianMoKmRmc19zdGFjaywgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuMzExMzpcdFx0aWYgKCFjb2xvciB8fCAhZGZzX3N0YWNrKSB7XG4zMTE0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4zMTE1Olx0XHRcdGdvdG8gb3V0O1xuMzExNjpcdFx0fVxuMzExNzpcdFxuMzExODpcdFx0LypcbjMxMTk6XHRcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cbjMxMjA6XHRcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cbjMxMjE6XHRcdCAqL1xuMzEyMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzEyMzpcdFx0XHRpZiAoY29sb3JbaV0pXG4zMTI0Olx0XHRcdFx0Y29udGludWU7XG4zMTI1Olx0XHRcdGNvbG9yW2ldID0gMTtcbjMxMjY6XHRcdFx0ZGZzX3N0YWNrW3RvcCYjNDM7JiM0MztdID0gaTtcbjMxMjc6XHRcbjMxMjg6XHRcdFx0d2hpbGUgKHRvcCBcdTAwM2UgMCkge1xuMzEyOTpcdFx0XHRcdGludCBjdXIgPSBkZnNfc3RhY2tbdG9wIC0gMV07XG4zMTMwOlx0XHRcdFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTMxOlx0XHRcdFx0aW50IHBvX2VuZCA9IHNpW2N1ciAmIzQzOyAxXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTMyOlx0XHRcdFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnVuY3Rpb25hbCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIGEgQlBGIHZlcmlmaWVyIHBhdGNoIHRvIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24sIGJhc2VkIG9uIHRoZSBkaWZmLCBpcyB0aGF0IHRoaXMgaXMgbGFyZ2VseSBhYm91dCBkaWFnbm9zdGljcyBhbmQgZXJyb3IgcmVwb3J0aW5nLCB3aXRoIHNvbWUgY29kZSByZW9yZ2FuaXphdGlvbiB0byBzdXBwb3J0IHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIHJpZ29yb3VzbHkuCgpGaXJzdCwgdGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVvcmRlcmluZyBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuICBgY2hlY2tfc3VicHJvZ3NgIHZhbGlkYXRlcyBqdW1wIGJvdW5kYXJpZXMgd2l0aGluIHN1YnByb2dyYW1zLCB3aGlsZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB1c2VzIEJURiBpbmZvcm1hdGlvbiB0byBlbnN1cmUgY29ycmVjdG5lc3MuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHJlb3JkZXJpbmcgKmNoYW5nZXMqIGhvdyB2YWxpZCBwcm9ncmFtcyBhcmUgdHJlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0ICppbnRyb2R1Y2UqIG5ldyBjaGVja3Mgd2l0aGluIGBicGZfY2hlY2tfYnRmX2luZm9gLCBpdCYjMzk7cyBwcmltYXJpbHkgZW5zdXJpbmcgdGhhdCBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggc3VicHJvZ3JhbSBkZWZpbml0aW9ucyBkaXNjb3ZlcmVkIGluIGBhZGRfc3VicHJvZ3NgLCB3aGljaCBpbiB0dXJuIGlzIGJhc2VkIG9uIGBDQUxMYCBpbnN0cnVjdGlvbnMuIFRoZXJlZm9yZSwgYXNzdW1pbmcgdGhlIEJURiBtZXRhZGF0YSByZW1haW5zIGNvbnNpc3RlbnQgYW5kIHRoZSByZW9yZGVyaW5nIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyByZWFkL2ludGVycHJldGVkLCB0aGlzIHJlb3JkZXJpbmcgc2hvdWxkbiYjMzk7dCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgdmFsaWQgcHJvZ3JhbXMuIEkmIzM5O20gZm9jdXNpbmcgb24gJiMzNDtkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgKnZhbGlkKiBwcm9ncmFtcyYjMzQ7LCBhcyB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBkaWFnbm9zdGljcyBtaWdodCBpbmNyZWFzZSB0aGUgcmVqZWN0aW9uIG9mICppbnZhbGlkKiBwcm9ncmFtcyBvciwgbW9yZSBsaWtlbHksIHByb3ZpZGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciByZWplY3RlZCAqaW52YWxpZCogcHJvZ3JhbXMuCgpOZXh0LCBJIHNlZSBzZXZlcmFsIGRpYWdub3N0aWMgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHJlZmluZW1lbnRzIHRvIGVycm9yIG1lc3NhZ2VzIGZvciBzcGVjaWZpYyBrZnVuYyBhcmd1bWVudCBjaGVja3MuIFRoaXMgaXMgYmFzaWNhbGx5IGxvZ2dpbmcgYW5kIGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0IGlzIGFuZCBpc24mIzM5O3QgYWNjZXB0ZWQgYXMgdmFsaWQgQlBGIGNvZGUuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgb3Igc3BlY2lmaWMgYWJvdXQgKndoeSogYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGlzIGZhaWxpbmcgdmFsaWRhdGlvbi4KCkkmIzM5O20gYWxzbyBzZWVpbmcgaW1wcm92ZW1lbnRzIHRvIHRoZSBlcnJvciBtZXNzYWdlcyBhcm91bmQgc2xlZXBhYmxlIGtmdW5jIGNhbGxzIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdGhyb3dpbmcgYW4gYC1FQUNDRVNgIGVycm9yIGluIG11bHRpcGxlIHBsYWNlcyBmb3IgdmFyaW91cyBzY2VuYXJpb3MgKGEgcHJvZ3JhbSB0aGF0IHdhc24mIzM5O3Qgc2xlZXBhYmxlIGNhbGxpbmcgYSBzbGVlcGFibGUga2Z1bmMsIGEgcHJvZ3JhbSBjYWxsaW5nIGl0IGZyb20gaW5zaWRlIGFuIFJDVSByZWFkIGxvY2ssIGV0Yy4pLiBUaGVzZSBjaGFuZ2VzIGNvbnNvbGlkYXRlIHRoZSBjaGVja3MgYXJvdW5kIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCB0byBoYW5kbGUgYWxsIHRob3NlIHNpdHVhdGlvbnMgaW4gb25lIHBsYWNlLiBJIGR1ZyBpbiBhbmQgdmVyaWZpZWQgdGhhdCB0aGUgYmVoYXZpb3IgcmVtYWlucyB0aGUgc2FtZTogdGhlIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZC4gTm93IGl0IGlzIGp1c3QgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBzb21lIGNoZWNrcyBhcmUgc2tpcHBlZCB0aGF0IGRvbiYjMzk7dCBtYXR0ZXIgYmVjYXVzZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCBhbnl3YXkuIFRoZSAqb3JkZXIqIG9mIGVycm9yIHJlcG9ydGluZyAqaXMqIGNoYW5nZWQsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIHJlZmluZWQgdG8gc3VnZ2VzdCBob3cgdG8gZml4IHRoZSBwcm9ibGVtIG1vcmUgY2xlYXJseS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCB0aGUgYWNjZXB0YW5jZSBvZiB2YWxpZCBwcm9ncmFtcy4KCkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgYmVjYXVzZSBpdCB3YXMgbmV3IGluIHRoZSBkaWZmLiBUaGlzIGZ1bmN0aW9uIHBvcHVsYXRlcyBgaGFzX2xkX2Fic2AgZm9yIGVhY2ggc3VicHJvZ3JhbS4gVGhpcyBpcyByZXF1aXJlZCBieSBgY2hlY2tfYnRmX2Z1bmNgIHNvIHRoYXQgaXQgZG9lc24mIzM5O3QgYWxsb3cgTERfQUJTIGluc3RydWN0aW9ucyBpbiBmdW5jdGlvbnMgdGhhdCBkb24mIzM5O3QgcmV0dXJuIGFuIGludC4gVGhlIG5ldyBmdW5jdGlvbiBpcyAqZXhhY3RseSogdGhlIHNhbWUgbG9naWMgYXMgd2hhdCB3YXMgaW4gYGNoZWNrX3N1YnByb2dzYCBvcmlnaW5hbGx5LiBJdHMgcHVycG9zZSBpcyB0byBwcmUtY2FsY3VsYXRlIGBoYXNfbGRfYWJzYCBiZWZvcmUgYGJwZl9jaGVja19idGZfaW5mb2AgaXMgcnVuIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVvcmRlcmluZy4KCkJhc2VkIG9uIGFsbCB0aGlzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgb2YgdGhlIGZ1bmRhbWVudGFsIGNoZWNrcyB0aGF0ICp3b3VsZCBhbGxvdyogdmFsaWQgcHJvZ3JhbXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVqZWN0ZWQsIG9yICpyZWplY3QqIHByb2dyYW1zIHRoYXQgd2VyZSBwcmV2aW91c2x5IHZhbGlkLiBBbGwgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZm9yIGltcHJvdmVkIGRpYWdub3N0aWMgbWVzc2FnaW5nIGFuZCBpbXByb3ZlZCBjb2RlIHN0cnVjdHVyZSB0byBlbnN1cmUgdGhhdCBiZXR0ZXIgZXJyb3IgbWVzc2FnaW5nIGNhbiBiZSBwcm92aWRlZC4gVGhpcyBwYXRjaCBpcyB0aGVyZWZvcmUgYWJvdXQgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc190YWlsX2NhbGwgPSB0cnVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMwMDY9c3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAxOS1cdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMwMjA6XHRcdFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX3RhaWxfY2FsbCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAyMS1cdFx0XHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGhhc190YWlsX2NhbGxgIEZsYWcgaW4gQlBGIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBJIHdhcyBqdXN0IHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCByZWFsaXplZCBJIG1pc3NlZCBzb21ldGhpbmcuIEkgdGhvdWdodCBgaGFzX3RhaWxfY2FsbGAgd2FzIHBvcHVsYXRlZCB3aXRoaW4gYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYC4gQnV0IGhvbGQgb24uLi4gdGhlIGNvZGUgZGlmZiBmb3IgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IHNob3cgaXQgYmVpbmcgc2V0IHRoZXJlISBJIHdhcyBzbyBzdXJlIEkgaGFkIHNlZW4gdGhhdCBmbGFnIGJlaW5nIHBvcHVsYXRlZCBkdXJpbmcgdGhhdCBmdW5jdGlvbi4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaC4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgZm9yIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgZXhwbGljaXRseSBzaG93cyBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGhhc190YWlsX2NhbGxgLiBUaGlzIGlzIHN0cmFuZ2UuCgpOb3cgSSBhbSBjdXJpb3VzLiBXaGVyZSBpcyBgaGFzX3RhaWxfY2FsbGAgYWN0dWFsbHkgYmVpbmcgc2V0PyBUaW1lIHRvIGxvb2sgYXQgdGhlIHJlYWwgc291cmNlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMzAyMCBhbmQgc2VlIHdoYXQgaXMgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAwNjpcdHN0YXRpYyB2b2lkIGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDA3Olx0e1xuMzAwODpcdFx0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XG4zMDA5Olx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4zMDEwOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMDExOlx0XHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4zMDEyOlx0XG4zMDEzOlx0XHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgJiM0MzsgMV0uc3RhcnQ7XG4zMDE0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSYjNDM7JiM0MzspIHtcbjMwMTU6XHRcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbjMwMTY6XHRcbjMwMTc6XHRcdFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXHUwMDI2XHUwMDI2XG4zMDE4Olx0XHRcdCAgICBpbnNuW2ldLnNyY19yZWcgPT0gMCBcdTAwMjZcdTAwMjZcbjMwMTk6XHRcdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuMzAyMDpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc190YWlsX2NhbGwgPSB0cnVlO1xuMzAyMTpcdFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLnRhaWxfY2FsbF9yZWFjaGFibGUgPSB0cnVlO1xuMzAyMjpcdFx0XHR9XG4zMDIzOlx0XHRcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFx1MDAyNlx1MDAyNlxuMzAyNDpcdFx0XHQgICAgKEJQRl9NT0RFKGNvZGUpID09IEJQRl9BQlMgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX0lORCkpXG4zMDI1Olx0XHRcdFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX2xkX2FicyA9IHRydWU7XG4zMDI2Olx0XHRcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xuMzAyNzpcdFx0XHRcdGN1cl9zdWJwcm9nJiM0MzsmIzQzOztcbjMwMjg6XHRcdFx0XHRpZiAoY3VyX3N1YnByb2cgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudClcbjMwMjk6XHRcdFx0XHRcdHN1YnByb2dfZW5kID0gc3VicHJvZ1tjdXJfc3VicHJvZyAmIzQzOyAxXS5zdGFydDtcbjMwMzA6XHRcdFx0fVxuMzAzMTpcdFx0fVxuMzAzMjpcdH1cbjMwMzM6XHRcbjMwMzQ6XHRzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4zMDM1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEzOAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxMDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGluaXRpYWxseSwgSSB3YXMgdGhyb3duIG9mZiBhIGJpdC4gSSB0aG91Z2h0IHRoZSBgaGFzX3RhaWxfY2FsbGAgY2hlY2sgd2FzIG1pc3NpbmcsIGJ1dCBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIHNvbWUgZXhpc3RpbmcgY29kZS4gVGhlIGtleSBpcyB0byBzZWUgdGhhdCB0aGUgYGhhc190YWlsX2NhbGxgIHBhcnQgd2FzICphbHJlYWR5KiBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBgY2hlY2tfc3VicHJvZ3NgIGZ1bmN0aW9uIGFuZCBzaW1wbHkgbW92ZWQgYWxvbmcgd2l0aCBgaGFzX2xkX2Fic2AgZHVyaW5nIHRoZSByZWZhY3RvciB0byBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLiBJdCB3YXNuJiMzOTt0IGFjdHVhbGx5IGEgbmV3IGFkZGl0aW9uLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCBiZWNhdXNlIGl0IHdhc24mIzM5O3QgZXhwbGljaXRseSBzaG93biBpbiB0aGUgZGlmZiwgYW5kIHdhcyBzaW1wbHkgcGFydCBvZiB0aGUgbG9vcC4KCk5vdywgbG9va2luZyBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUsIHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogYWJvdXQgaW1wcm92aW5nIHRoZSB2ZXJpZmllciYjMzk7cyBkaWFnbm9zdGljcy4gVGhlIGNoYW5nZXMgaW4gYGJwZl9jaGVja2AgYXJlIGp1c3QgYWJvdXQgcmVvcmRlcmluZyBjaGVja3MgYW5kIGluIGBpbl9zbGVlcGFibGVfY29udGV4dGAgaXMgYWJvdXQgdGhlIGVycm9yIHJlcG9ydGluZyBwYXRoLCBhbmQgYGJwZl9kaWFnXypgIGFyZSBwdXJlbHkgY29zbWV0aWMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBpdHNlbGYuIFZhbGlkIHByb2dyYW1zIHdpbGwgc3RpbGwgd29yayBhcyBiZWZvcmUsIGFuZCB0aGUgc2V0IG9mIGFjY2VwdGVkIHByb2dyYW1zIGlzIHVuY2hhbmdlZC4gVGhpcyBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLgoKVGhlIGZvY3VzIGhlcmUgaXMgZXJyb3IgbWVzc2FnZSBjbGFyaXR5IGFuZCBvcmRlciwgd2hpY2ggaXMgcmVhbGx5IGp1c3QgYW4gaW1wcm92ZW1lbnQgaW4gZGVidWdnaW5nLCByYXRoZXIgdGhhbiBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGNoYW5nZXMgaGVyZSBhcmUgZWZmZWN0aXZlbHkganVzdCBsb2dnaW5nL2Vycm9yIHJlcG9ydGluZyBlbmhhbmNlbWVudHMuIE15IHVuZGVyc3RhbmRpbmcgb2YgZnV6emluZyBpcyB0aGF0IGl0JiMzOTtzIG1lYW50IHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIG9yIGJ1Z3MsIHN1Y2ggYXMgbWVtb3J5IGNvcnJ1cHRpb24sIGNyYXNoZXMsIG9yIGxvZ2ljIGZsYXdzIGluICpleGVjdXRpb24qLgoKSSB3ZW50IGJhY2sgYW5kIHJldmlld2VkIHRoZSBwcm9tcHQsIGp1c3QgdG8gZG91YmxlLWNoZWNrLiBJdCBzYWlkIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZXJlIGFyZToKKiBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50IGNoYW5nZXMKKiBMb2dnaW5nIG9yIHRyYWNlcG9pbnQgY2hhbmdlcwoqIE51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBhbHRlciBleGVjdXRpb24gZmxvdy4KCkluIHRoaXMgY2FzZSwgdGhlIHZlcmlmaWVyIGRpYWdub3N0aWNzIGFyZSBlc3NlbnRpYWxseSBsb2dnaW5nL2Vycm9yIHJlcG9ydGluZy4gQ2hhbmdpbmcgdGhlICp0ZXh0KiBvZiBhbiBlcnJvciBtZXNzYWdlIG9yIHRoZSBvcmRlciBpbiB3aGljaCB0d28gdmFsaWRhdGlvbiBzdGVwcyBhcmUgcGVyZm9ybWVkIHdoZW4gYm90aCBtdXN0IHBhc3MgYW55d2F5IChyZWdhcmRsZXNzIG9mIG9yZGVyKSBkb2VzbiYjMzk7dCBjcmVhdGUgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJpY2F0ZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emluZy4gVGhlcmVmb3JlLCBubyBuZXcgYXR0YWNrIHN1cmZhY2UuCgpUaHVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpY3MuIEl0IHVwZGF0ZXMgZXJyb3IgbWVzc2FnZXMsIGFkZHMgaGludHMsIGFuZCByZW9yZGVycyB0aGUgQlRGIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcyB0byByZXBvcnQgQlRGL0NPLVJFIGVycm9ycyBiZWZvcmUgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGVzZSBhcmUgcHVyZWx5IGRlY29yYXRpdmUgYW5kIGRpYWdub3N0aWMgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciB0aGUgc2V0IG9mIGFjY2VwdGVkIEJQRiBwcm9ncmFtcyBvciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdmFsaWQgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpY3MuIEl0IHVwZGF0ZXMgZXJyb3IgbWVzc2FnZXMsIGFkZHMgaGludHMsIGFuZCByZW9yZGVycyB0aGUgQlRGIHZhbGlkYXRpb24gYW5kIHN1YnByb2dyYW0gbGF5b3V0IGNoZWNrcyB0byByZXBvcnQgQlRGL0NPLVJFIGVycm9ycyBiZWZvcmUgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiBUaGVzZSBhcmUgcHVyZWx5IGRlY29yYXRpdmUgYW5kIGRpYWdub3N0aWMgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciB0aGUgc2V0IG9mIGFjY2VwdGVkIEJQRiBwcm9ncmFtcyBvciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdmFsaWQgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MTYuMTkzMDI2MjcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjA2OTcwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MTYuMTkzMDMyMTcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc3MDMyOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTRjODg3MjliNDc2MzQ3Y2JiYzFmMTVlNGM4Mjk0NWI0MTc2NThmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMjoxMzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtMTE2OSwxOSArMTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXFxuIFxcdFxcdFxcdGlkID0gdC1cXHUwMDNldHlwZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGlkID0gMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGdvdG8gcmVzb2x2ZWQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfcXVhbGlmaWVycyhzaG93LVxcdTAwM2VidGYsIGlkKTtcXG4gXFx0XFx0aWYgKCFpZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHQgPSBidGZfdHlwZV9za2lwX3F1YWxpZmllcnMoc2hvdy1cXHUwMDNlYnRmLCBpZCk7XFxuIFxcdH1cXG4gXFx0LyogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIHJlcHJlc2VudCB0aGlzIHR5cGU7IGJhaWwgdG8gYmUgc2FmZSAqL1xcbiBcXHRpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUilcXG4gXFx0XFx0cmV0dXJuIFxcXCJcXFwiO1xcbiBcXG4rcmVzb2x2ZWQ6XFxuIFxcdGlmICghbmFtZSlcXG4tXFx0XFx0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzaG93LVxcdTAwM2VidGYsIHQtXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFx0XFx0bmFtZSA9IGJ0Zl90eXBlX2lzX3ZvaWQodCkgPyBcXFwidm9pZFxcXCIgOiBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cXHUwMDNlYnRmLCB0LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbiBcXHRzd2l0Y2ggKEJURl9JTkZPX0tJTkQodC1cXHUwMDNlaW5mbykpIHtcXG4gXFx0Y2FzZSBCVEZfS0lORF9TVFJVQ1Q6XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXFxuaW5kZXggMGYxM2MxM2Y0MTMzNy4uOTVjNTlmNmNmNzBhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXFxuKysrIGIva2VybmVsL2JwZi9jZmcuY1xcbkBAIC0yODcsNyArMjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiAgKiBjb21iaW5lZCBqdW1wIHRhYmxlIGluIGp0LVxcdTAwM2VpdGVtcyAoYWxsb2NhdGVkIHdpdGgga3ZjYWxsb2MpXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW50IGluc25faWR4LCBpbnQgc3VicHJvZ19zdGFydCwgaW50IHN1YnByb2dfZW5kKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaWFycmF5ICpqdCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoIWp0KSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibm8ganVtcCB0YWJsZXMgZm91bmQgZm9yIHN1YnByb2cgc3RhcnRpbmcgYXQgJXVcXFxcblxcXCIsIHN1YnByb2dfc3RhcnQpO1xcbiBcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4tXFx0XFx0XFx0ZW52LCBzdWJwcm9nX3N0YXJ0LCBcXFwibWlzc2luZyBqdW1wIHRhYmxlXFxcIixcXG4rXFx0XFx0XFx0ZW52LCBpbnNuX2lkeCwgXFxcIm1pc3NpbmcganVtcCB0YWJsZVxcXCIsXFxuIFxcdFxcdFxcdFxcXCJNYWtlIHN1cmUgc3VicHJvZ3JhbXMgY29udGFpbmluZyBnb3RveCBpbnN0cnVjdGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGp1bXAgdGFibGVzIHJlZmVyZW5jaW5nIHRoZXNlIHN1YnByb2dyYW1zLlxcXCIsXFxuIFxcdFxcdFxcdFxcXCJObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXFxcIixcXG4gXFx0XFx0XFx0c3VicHJvZ19zdGFydCk7XFxuQEAgLTM0OSw3ICszNDksNyBAQCBjcmVhdGVfanQoaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcXG4gXFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2ctXFx1MDAzZXN0YXJ0O1xcbiBcXHRzdWJwcm9nX2VuZCA9IChzdWJwcm9nICsgMSktXFx1MDAzZXN0YXJ0O1xcbi1cXHRqdCA9IGp0X2Zyb21fc3VicHJvZyhlbnYsIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kKTtcXG4rXFx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCB0LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XFxuIFxcdGlmIChJU19FUlIoanQpKVxcbiBcXHRcXHRyZXR1cm4ganQ7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMgYi9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcXG5pbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xcbisrKyBiL2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuY1xcbkBAIC04MzMsMTEgKzgzMyw5IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXFxuIFxcdGxpbmZvID0gYnBmX2ZpbmRfbGluZm8oZW52LVxcdTAwM2Vwcm9nLCBpbnNuX2lkeCk7XFxuIFxcdGlmIChidGYgXFx1MDAyNlxcdTAwMjYgbGluZm8pXFxuIFxcdFxcdGJwZl9nZXRfbGluZm9fc291cmNlKGJ0ZiwgbGluZm8sIFxcdTAwMjZzcmMpO1xcbi1cXHRpZiAoIXNyYy5maWxlIHx8ICEqc3JjLmZpbGUgfHwgIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpIHtcXG4rXFx0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICBpbnNuICV1XFxcXG5cXFwiLCBpbnNuX2lkeCk7XFxuLVxcdFxcdGRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTtcXG4tXFx0XFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfYW5ub3RhdGlvbjtcXG4gXFx0fVxcbiBcXG4gXFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIGluc25faWR4KTtcXG5AQCAtODQ3LDYgKzg0NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICAlcyBAICVzOiVkOiVkXFxcXG5cXFwiLCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGRpYWdfd3JpdGUoZW52LCBcXFwiICAlczolZDolZFxcXFxuXFxcIiwgc3JjLmZpbGUsIHNyYy5saW5lX251bSwgc3JjLmxpbmVfY29sKTtcXG4rXFx0aWYgKCFzcmMubGluZSB8fCAhKnNyYy5saW5lKVxcbitcXHRcXHRnb3RvIG91dF9hbm5vdGF0aW9uO1xcbiBcXG4gXFx0c3RhcnRfbGluZSA9IHNyYy5saW5lX251bSAtIEJQRl9ESUFHX0NPTlRFWFQ7XFxuIFxcdGVuZF9saW5lID0gc3JjLmxpbmVfbnVtICsgQlBGX0RJQUdfQ09OVEVYVDtcXG5AQCAtODg5LDcgKzg4OSwxMSBAQCBzdGF0aWMgdm9pZCBicGZfZGlhZ19zb3VyY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBjb25zdCBjaFxcbiBcXHRcXHRcXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgd2lkdGgsIGluZGVudCwgbGFiZWwsIG1zZyk7XFxuIFxcdH1cXG4gXFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcXG4rXFx0Z290byBvdXRfcmVzdG9yZTtcXG4gXFxuK291dF9hbm5vdGF0aW9uOlxcbitcXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XFxuK1xcdGRpYWdfcHJpbnRfaW5zbl9jb250ZXh0KGVudiwgaW5zbl9pZHgsIGRpc2FzbV9saW5lcyk7XFxuIG91dF9yZXN0b3JlOlxcbiBcXHRkaWFnX2ZtdF9yZXN0b3JlKGVudiwgbWFyayk7XFxuIH1cXG5AQCAtMTA4Myw3ICsxMDg3LDkgQEAgdm9pZCBicGZfZGlhZ19jdHhfZm9yYmlkZGVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcXG4gXFx0Y29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7XFxuIFxcdHUzMiBkZXB0aDtcXG4gXFxuLVxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcXG4rXFx0aWYgKCFlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlaW5fc2xlZXBhYmxlKVxcbitcXHRcXHRjdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfTk9ORTtcXG4rXFx0ZWxzZSBpZiAoZW52LVxcdTAwM2VjdXJfc3RhdGUtXFx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXFxuIFxcdFxcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7XFxuIFxcdGVsc2UgaWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfcHJlZW1wdF9sb2NrcylcXG4gXFx0XFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX1BSRUVNUFQ7XFxuQEAgLTE1MzEsOCArMTUzNyw3IEBAIHN0YXRpYyB2b2lkIGRpYWdfcmVjb3JkX21vZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsXFxuIFxcdH0gZWxzZSBpZiAoZGlhZ19tb2RfaW5zbl9vcmlnaW4oZW52LCBpbnNuX2lkeCwgXFx1MDAyNnRhcmdldCwgXFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XFxuIFxcdFxcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuLVxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IG5ld19yZWcgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChyZWFzb24gPT0gQlBGX0RJQUdfTU9EX1dSSVRFIHx8IHJlYXNvbiA9PSBCUEZfRElBR19NT0RfU1BJTEwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IG5ld19yZWcgXFx1MDAyNlxcdTAwMjYgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIW1lbWNtcChcXHUwMDI2ZXZlbnQubW9kLm9sZCwgXFx1MDAyNmV2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFldmVudC5tb2Qub3JpZ2luX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBkaWFnX21vZF9rZWVwc19saW5lYWdlKGVudiwgXFx1MDAyNmV2ZW50KSlcXG5AQCAtMjE2NCw3ICsyMTY5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmRpYWdfbW9kX3RhcmdldF9kZXNjKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9SRUc6XFxuIFxcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwiUiV1XFxcIiwgdGFyZ2V0LVxcdTAwM2VyZWdubyk7XFxuIFxcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19BUkc6XFxuLVxcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwic3RhY2sgYXJnJWRcXFwiLCBkaWFnX3N0YWNrX2FyZ25vKHRhcmdldC1cXHUwMDNlc3RhY2tfYXJnKSk7XFxuK1xcdFxcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcXFwiKihSMTEtJXUpXFxcIiwgKHRhcmdldC1cXHUwMDNlc3RhY2tfYXJnICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xcbiBcXHRjYXNlIEJQRl9ESUFHX01PRF9UQVJHRVRfU1RBQ0tfU0xPVDpcXG4gXFx0XFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzdGFjayBzbG90IGZwJWRcXFwiLCAtKHRhcmdldC1cXHUwMDNlc3BpICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xcbiBcXHRkZWZhdWx0OlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAwYmI3ZWU5NWM4YmQyLi43NzAzM2NmMzczNGE1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yOTEyLDYgKzI5MTIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0Y29uc3QgY2hhciAqb3BlcmF0aW9uLCAqc3VnZ2VzdGlvbjtcXG4gXFxuIFxcdC8qIEFkZCBlbnRyeSBmdW5jdGlvbi4gKi9cXG4gXFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCAwKTtcXG5AQCAtMjkyMywxMSArMjkyNCwxOCBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICghZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuK1xcdFxcdFxcdFxcdG9wZXJhdGlvbiA9IFxcXCJCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXFxcIjtcXG4rXFx0XFx0XFx0XFx0c3VnZ2VzdGlvbiA9IFxcXCJMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlcyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIjtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0b3BlcmF0aW9uID0gXFxcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFxcXCI7XFxuK1xcdFxcdFxcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiTG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIjtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCBmb3IgQ0FQX0JQRiBhbmQgQ0FQX1NZU19BRE1JTlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX3BvbGljeShcXG4tXFx0XFx0XFx0XFx0ZW52LCBpLCBcXFwiQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxsXFxcIixcXG4rXFx0XFx0XFx0XFx0ZW52LCBpLCBvcGVyYXRpb24sXFxuIFxcdFxcdFxcdFxcdFxcXCJsb2FkaW5nIG9yIGNhbGxpbmcgb3RoZXIgQlBGIGZ1bmN0aW9ucyByZXF1aXJlcyBDQVBfQlBGIG9yIENBUF9TWVNfQURNSU5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXFwiTG9hZCB0aGlzIHByb2dyYW0gd2l0aCB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eSwgb3IgYXZvaWQgQlBGLXRvLUJQRiBmdW5jdGlvbiBjYWxscyBpbiB1bnByaXZpbGVnZWQgcHJvZ3JhbXMuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHN1Z2dlc3Rpb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yOTk1LDE1ICszMDAzLDEzIEBAIHN0YXRpYyBpbnQgYWRkX2tmdW5jcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbitzdGF0aWMgdm9pZCBmaW5kX3N1YnByb2dfcHJvcGVydGllcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuLVxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuK1xcdGludCBpLCBzdWJwcm9nX2VuZCwgY3VyX3N1YnByb2cgPSAwO1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIFxcbi1cXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXFxuLVxcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcXG4gXFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrKSB7XFxuIFxcdFxcdHU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7XFxuQEAgLTMwMTcsNiArMzAyMywyNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoQlBGX01PREUoY29kZSkgPT0gQlBGX0FCUyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU5EKSlcXG4gXFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX2xkX2FicyA9IHRydWU7XFxuK1xcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbitcXHRcXHRcXHRjdXJfc3VicHJvZysrO1xcbitcXHRcXHRcXHRpZiAoY3VyX3N1YnByb2cgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250KVxcbitcXHRcXHRcXHRcXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4re1xcbitcXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xcbitcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0aW50IGluc25fY250ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuK1xcbitcXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXFxuK1xcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nXS5zdGFydDtcXG4rXFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrKSB7XFxuK1xcdFxcdHU4IGNvZGUgPSBpbnNuW2ldLmNvZGU7XFxuK1xcbiBcXHRcXHRpZiAoQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAgXFx1MDAyNlxcdTAwMjYgQlBGX0NMQVNTKGNvZGUpICE9IEJQRl9KTVAzMilcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxcbkBAIC0zMDM4LDkgKzMwNjUsMTAgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHR9XFxuIG5leHQ6XFxuIFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbi1cXHRcXHRcXHQvKiB0byBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXJcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyLFxcbiBcXHRcXHRcXHQgKiB0aGUgbGFzdCBpbnNuIG9mIHRoZSBzdWJwcm9nIHNob3VsZCBiZSBlaXRoZXIgZXhpdFxcbi1cXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxcbitcXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChjb2RlICE9IChCUEZfSk1QIHwgQlBGX0VYSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTMxMjYsOCArMzE1NCw5IEBAIHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlbnYsIGlkeCwgXFxcInJlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmV3cml0ZSB0aGUgcmVjdXJzaW9uIGFzIGFuIGV4cGxpY2l0IGJvdW5kZWQgbG9vcCwgb3Igc3BsaXQgdGhlIGxvZ2ljIHNvIHN1YnByb2dyYW0gY2FsbHMgZG8gbm90IGZvcm0gYSBjeWNsZS5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiVGhpcyBicGYyYnBmIGNhbGwgd291bGQgbWFrZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGdyYXBoIHJlY3Vyc2l2ZS4gXFxcIlxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlRoZSBjYWxsIGZyb20gJXMoKSB0byAlcygpIHdvdWxkIG1ha2UgdGhlIHN1YnByb2dyYW0gY2FsbCBncmFwaCByZWN1cnNpdmUuIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlRoZSB2ZXJpZmllciByZXF1aXJlcyBhIGZpbml0ZSwgYWN5Y2xpYyBjYWxsIGdyYXBoIHNvIGl0IGNhbiBib3VuZCBzdGFjayBkZXB0aCBhbmQgYW5hbHlzaXMuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YnBmX3N1YnByb2dfbmFtZShlbnYsIGN1ciksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBjYWxsZWUpKTtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdFxcdH1cXG5AQCAtMzgxNywxOSArMzg0Niw0NiBAQCBzdGF0aWMgaW50IG1hcmtfcmVnX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IHNpemUpXFxuK3N0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLCBpbnQgaSwgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gYnBmX3N0YWNrX3Nsb3RfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdGNvbnN0IGNoYXIgKnJlYXNvbjtcXG4rXFx0Y29uc3QgY2hhciAqcHJvYmxlbSwgKnJlYXNvbiwgKnN1Z2dlc3Rpb24sICpraW5kO1xcbitcXG4rXFx0aWYgKHR5cGUgPT0gU1RBQ0tfSU5WQUxJRCkge1xcbitcXHRcXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoXFxuK1xcdFxcdFxcdGVudiwgXFxcIlRoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXFxcIlxcbitcXHRcXHRcXHRcXFwiUHJvZ3JhbXMgbG9hZGVkIHdpdGggQ0FQX1BFUkZNT04gY2FuIGJlIGFsbG93ZWQgdG8gcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIHdpdGhvdXQgdGhhdCBhbGxvd2FuY2UuXFxcIixcXG4rXFx0XFx0XFx0c2l6ZSwgb2ZmLCBpKTtcXG4rXFx0XFx0YnBmX2RpYWdfbWVtb3J5KFxcbitcXHRcXHRcXHRlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIFxcXCJ1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRcXFwiLCByZWFzb24sXFxuK1xcdFxcdFxcdFxcXCJJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXFxcIlxcbitcXHRcXHRcXHRcXFwib3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChlbnYsXFxuLVxcdFxcdFxcdCAgICAgIFxcXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgaXMgdW5pbml0aWFsaXplZCBvbiB0aGlzIHBhdGguIFxcXCJcXG4tXFx0XFx0XFxcIlByb2dyYW1zIGxvYWRlZCB3aXRoIENBUF9QRVJGTU9OIGNhbiBiZSBhbGxvd2VkIHRvIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcywgYnV0IHRoaXMgcHJvZ3JhbSBpcyBiZWluZyByZWplY3RlZCB3aXRob3V0IHRoYXQgYWxsb3dhbmNlLlxcXCIsXFxuLVxcdFxcdHNpemUsIG9mZiwgaSk7XFxuLVxcdGJwZl9kaWFnX21lbW9yeShcXG4tXFx0XFx0ZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBcXFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXFxcIiwgcmVhc29uLFxcbi1cXHRcXHRcXFwiSW5pdGlhbGl6ZSBldmVyeSBieXRlIGluIHRoZSBzdGFjayByYW5nZSBiZWZvcmUgcmVhZGluZyBpdCwgYWRqdXN0IHRoZSBvZmZzZXQgYW5kIHNpemUgc28gdGhlIHJlYWQgY292ZXJzIG9ubHkgaW5pdGlhbGl6ZWQgYnl0ZXMsIFxcXCJcXG4tXFx0XFx0XFxcIm9yIGxvYWQgd2l0aCBDQVBfUEVSRk1PTiBpZiB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzIGFyZSBpbnRlbmRlZC5cXFwiKTtcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbitcXHRcXHRraW5kID0gXFxcImR5bnB0clxcXCI7XFxuK1xcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiVXNlIGR5bnB0ciBoZWxwZXJzIG9yIGtmdW5jcyB0byBhY2Nlc3MgdGhlIG9iamVjdCByZXByZXNlbnRlZCBieSB0aGUgZHlucHRyIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZHlucHRyIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNUQUNLX0lURVI6XFxuK1xcdFxcdGtpbmQgPSBcXFwiaXRlcmF0b3JcXFwiO1xcbitcXHRcXHRzdWdnZXN0aW9uID0gXFxcIlVzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbitcXHRcXHRraW5kID0gXFxcIklSUSBmbGFnXFxcIjtcXG4rXFx0XFx0c3VnZ2VzdGlvbiA9IFxcXCJQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuYyBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHByb2JsZW0gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwiZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcXFwiLCBraW5kKTtcXG4rXFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxcbitcXHRcXHRlbnYsIFxcXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgYmVsb25ncyB0byB2ZXJpZmllci1tYW5hZ2VkICVzIHN0YXRlLiBcXFwiXFxuK1xcdFxcdFxcXCJUaGlzIHN0YXRlIGhhcyBhbiBvcGFxdWUgcmVwcmVzZW50YXRpb24gdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IHJlYWQgZGlyZWN0bHkuXFxcIixcXG4rXFx0XFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcXG4rXFx0YnBmX2RpYWdfbWVtb3J5KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTtcXG4gfVxcbiBcXG4gLyogUmVhZCB0aGUgc3RhY2sgYXQgJ29mZicgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcXG5AQCAtMzkyMSw3ICszOTc3LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCslZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmYsIGksIHNpemUpO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRicGZfZGlhZ19zdGFja19yZWFkX3VuaW5pdChlbnYsIG9mZiwgaSwgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdFxcdFxcdH1cXG5AQCAtMzk4MCw3ICs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrIG9mZiAlZCslZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRvZmYsIGksIHNpemUpO1xcbi1cXHRcXHRcXHRcXHRicGZfZGlhZ19zdGFja19yZWFkX3VuaW5pdChlbnYsIG9mZiwgaSwgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdH1cXG5AQCAtNDA3OSwxMyArNDEzNSwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0dG51bV9zdHJuKHRuX2J1Ziwgc2l6ZW9mKHRuX2J1ZiksIHJlZy1cXHUwMDNldmFyX29mZik7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvbjsgdmFyX29mZj0lcyBvZmY9JWQgc2l6ZT0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0dG5fYnVmLCBvZmYsIHNpemUpO1xcbi1cXHRcXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoZW52LFxcbi1cXHRcXHRcXHRcXHQgICAgICBcXFwiVGhlIGhlbHBlciB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcXFwiXFxuLVxcdFxcdFxcdFxcXCJIZWxwZXIgc3RhY2sgbWVtb3J5IGFyZ3VtZW50cyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXFxcIixcXG4rXFx0XFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxcbitcXHRcXHRcXHRlbnYsIFxcXCJUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrIHRocm91Z2ggdmFyaWFibGUgb2Zmc2V0ICVzIHBsdXMgZml4ZWQgb2Zmc2V0ICVkIGFuZCBzaXplICVkLiBcXFwiXFxuK1xcdFxcdFxcdFxcXCJBdG9taWMgc3RhY2sgb3BlcmF0aW9ucyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXFxcIixcXG4gXFx0XFx0XFx0dG5fYnVmLCBvZmYsIHNpemUpO1xcbiBcXHRcXHRicGZfZGlhZ19tZW1vcnkoXFxuLVxcdFxcdFxcdGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgXFxcInZhcmlhYmxlIHN0YWNrIGFjY2Vzc1xcXCIsIHJlYXNvbixcXG4tXFx0XFx0XFx0XFxcIlVzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgaGVscGVyIG1lbW9yeSBhcmd1bWVudHMsIG9yIGNvcHkgdGhlIG5lZWRlZCBieXRlcyBpbnRvIGEgZml4ZWQgc3RhY2sgc2xvdCBmaXJzdC5cXFwiKTtcXG4rXFx0XFx0XFx0ZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBcXFwidmFyaWFibGUtb2Zmc2V0IGF0b21pYyBzdGFjayBhY2Nlc3NcXFwiLCByZWFzb24sXFxuK1xcdFxcdFxcdFxcXCJVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcdC8qIFZhcmlhYmxlIG9mZnNldCBpcyBwcm9oaWJpdGVkIGZvciB1bnByaXZpbGVnZWQgbW9kZSBmb3Igc2ltcGxpY2l0eVxcbkBAIC05ODgyLDcgKzk5MzgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdHN1Yl9uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XFxuIFxcdFxcdFxcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcXFwiLCBzdWJfbmFtZSk7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbixcXG4tXFx0XFx0XFx0XFx0XFxcIk1vdmUgdGhlIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbi5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbGwgdGhlIGZ1bmN0aW9uIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGZ1bmN0aW9uLlxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTA3MDEsNiArMTA3NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIHN0YXRpYyBjb25zdCBjaGFyICpub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbitcXHRpZiAoIWluX3NsZWVwYWJsZShlbnYpKVxcbitcXHRcXHRyZXR1cm4gXFxcIm5vbi1zbGVlcGFibGUgcHJvZ1xcXCI7XFxuIFxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcylcXG4gXFx0XFx0cmV0dXJuIFxcXCJyY3VfcmVhZF9sb2NrIHJlZ2lvblxcXCI7XFxuIFxcdGlmIChlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXFxuQEAgLTEwNzA5LDcgKzEwNzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW5cXG4gXFx0XFx0cmV0dXJuIFxcXCJJUlEtZGlzYWJsZWQgcmVnaW9uXFxcIjtcXG4gXFx0aWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfbG9ja3MpXFxuIFxcdFxcdHJldHVybiBcXFwibG9jayByZWdpb25cXFwiO1xcbi1cXHRyZXR1cm4gXFxcIm5vbi1zbGVlcGFibGUgcHJvZ1xcXCI7XFxuK1xcdHJldHVybiBcXFwibm9uLXNsZWVwYWJsZSBjb250ZXh0XFxcIjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbkBAIC0xMDgwNSw3ICsxMDg2Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdFxcdG9wZXJhdGlvbiA9IGJwZl9kaWFnX2ZtdChlbnYsIFxcXCJzbGVlcGFibGUgaGVscGVyICVzIyVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0IGZ1bmNfaWRfbmFtZShmdW5jX2lkKSwgZnVuY19pZCk7XFxuIFxcdFxcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLFxcbi1cXHRcXHRcXHRcXFwiTW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXFxcIik7XFxuK1xcdFxcdFxcdFxcXCJDYWxsIHRoZSBoZWxwZXIgZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgaGVscGVyLlxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTA5OTQsMTMgKzExMDUyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcbiBcXHQvKiByZXNldCBjYWxsZXIgc2F2ZWQgcmVncyAqL1xcbiBcXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxuK1xcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuIFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xcbiBcXHRcXHRjaGVja19yZWdfYXJnKGVudiwgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbiBcXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xcbiBcXHRyZXRfdHlwZSA9IGZuLVxcdTAwM2VyZXRfdHlwZTtcXG4gXFx0cmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpO1xcbkBAIC0xMjYyMywxMiArMTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xcbiBcXHRcXHRcXHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xcbiBcXG4tXFx0XFx0XFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcXG4rXFx0XFx0XFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlKTtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiQWRkIGEgTlVMTCBjaGVjayBhbmQgY2FsbCB0aGUga2Z1bmMgb25seSBvbiB0aGUgbm9uLU5VTEwgcGF0aC5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXFwidGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGJ1dCB0aGlzIGtmdW5jIHJlcXVpcmVzIGEgbm9uLU5VTEwgcG9pbnRlciB0byAlc1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgZXhwZWN0ZWRfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHRcXHR9XFxuQEAgLTEzMDY1LDggKzEzMTIzLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcXG4gXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVJTlZBTClcXG4rXFx0XFx0XFx0XFx0XFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJQYXNzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9yIGEgdmFsdWUgdGhlIHZlcmlmaWVyIGNhbiBwcm92ZSBpcyBjb25zdGFudCBhdCB0aGlzIGNhbGwuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInRoZSBrZnVuYyByZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnQsIGJ1dCAlcyBpcyB2YXJpYWJsZSBvbiB0aGlzIHBhdGhcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEtGX0FSR19NRU1fU0laRTpcXG4gXFx0XFx0e1xcbkBAIC0xMzEzMCwxNSArMTMxOTQsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XFxuIFxcdFxcdFxcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcXG4tXFxuLVxcdFxcdFxcdFxcdGV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7XFxuIFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdFxcdGJwZl9kaWFnX2NhbGxfYXJnX2ZtdChlbnYsIGluc25faWR4LCBhcmdubywgZnVuY19uYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUGFzcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG1hdGNoaW5nIEJQRiBvYmplY3QgYWxsb2NhdGlvbiBvciBsb29rdXAgb3BlcmF0aW9uIGZvciB0aGlzIGtmdW5jLlxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXJcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHBlY3RlZF90eXBlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBhc3MgYW4gb3duaW5nIG9yIG5vbi1vd25pbmcgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIG9iamVjdCBjb250YWluaW5nIGEgYnBmX3JlZmNvdW50IGZpZWxkLlxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSBCUEYtbWFuYWdlZCByZWZjb3VudGVkIG9iamVjdCwgYnV0ICVzIGlzICVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG5AQCAtMTM3MjYsMTEgKzEzNzg4LDIwIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdH1cXG4gXFxuIFxcdHNsZWVwYWJsZSA9IGJwZl9pc19rZnVuY19zbGVlcGFibGUoXFx1MDAyNm1ldGEpO1xcbi1cXHRpZiAoc2xlZXBhYmxlIFxcdTAwMjZcXHUwMDI2ICFpbl9zbGVlcGFibGUoZW52KSkge1xcbi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXFxcblxcXCIsIGZ1bmNfbmFtZSk7XFxuK1xcdGlmIChzbGVlcGFibGUgXFx1MDAyNlxcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcXG4rXFxuK1xcdFxcdGlmIChpbl9zbGVlcGFibGUoZW52KSkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xcbitcXHRcXHRcXHRzdWdnZXN0aW9uID0gXFxcIk1vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cXFwiO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGZ1bmNfbmFtZSk7XFxuK1xcdFxcdFxcdHN1Z2dlc3Rpb24gPSBcXFwiTWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXFxcIjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwic2xlZXBhYmxlIGtmdW5jICVzXFxcIiwgZnVuY19uYW1lKTtcXG4tXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXFxuLVxcdFxcdFxcdFxcXCJNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cXFwiKTtcXG4rXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sIHN1Z2dlc3Rpb24pO1xcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0fVxcbiBcXG5AQCAtMTM4MzAsMTUgKzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNsZWVwYWJsZSBcXHUwMDI2XFx1MDAyNiAhaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KSkge1xcbi1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBmdW5jICVzIGlzIHNsZWVwYWJsZSB3aXRoaW4gJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xcbi1cXHRcXHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcXFwic2xlZXBhYmxlIGtmdW5jICVzXFxcIiwgZnVuY19uYW1lKTtcXG4tXFx0XFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXFxuLVxcdFxcdFxcdFxcXCJNb3ZlIHRoZSBrZnVuYyBjYWxsIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSBcXHUwMDI2XFx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbkBAIC0yMTA4OCwxNyArMjExNTAsMTkgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdC8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi9cXG4rXFx0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGFuZCBjb2xsZWN0IHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBieSBCVEYgdmFsaWRhdGlvbi4gKi9cXG4gXFx0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XFxuK1xcdGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzKGVudik7XFxuK1xcbitcXHQvKiBWYWxpZGF0ZSBCVEYgYW5kIGFwcGx5IENPLVJFIGJlZm9yZSByZXBvcnRpbmcgc3VicHJvZ3JhbSBsYXlvdXQgZXJyb3JzLiAqL1xcbitcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxuLVxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4rXFx0cmV0ID0gY2hlY2tfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbmluZGV4IGJlYWE3M2RjMzVmNWQuLjk0MThkZmU0ZDdiN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbkBAIC01NjAsNiArNTYwLDkgQEAgaW50IGdsb2JhbCh2b2lkICpjdHgpXFxuIC8qIEEgZGlyZWN0IHJlYWQgc2hvdWxkIGZhaWwgKi9cXG4gU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIHJlYWQgZnJvbSBzdGFja1xcXCIpXFxuK19fbXNnKFxcXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBkeW5wdHIgc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwiVXNlIGR5bnB0ciBoZWxwZXJzIG9yIGtmdW5jc1xcXCIpXFxuIGludCBpbnZhbGlkX3JlYWQxKHZvaWQgKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuQEAgLTE1OTAsNiArMTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xcbiAvKiBDYW4ndCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXFwiKVxcbitfX21zZyhcXFwicmVxdWlyZXMgdGhpcyBtZW1vcnkgc2l6ZSB0byBiZSBhIHZlcmlmaWVyLWtub3duIGNvbnN0YW50XFxcIilcXG4gaW50IGR5bnB0cl9zbGljZV92YXJfbGVuMShzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbkBAIC0xNjA5LDYgKzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gLyogQ2FuJ3QgcGFzcyBpbiB2YXJpYWJsZS1zaXplZCBsZW4gdG8gYnBmX2R5bnB0cl9zbGljZSAqL1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwibXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxcIilcXG4rX19tc2coXFxcInJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudFxcXCIpXFxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgZXRoaGRyKV0gPSB7fTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXFxuaW5kZXggYTRhMDA3ODY2YTMzMi4uOGQyYjUwZDExZmE0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcXG5AQCAtMTQsNiArMTQsMTkgQEAgZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJcXG4gc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIGxvY2tBIF9faGlkZGVuIFNFQyhcXFwiLmRhdGEuQVxcXCIpO1xcbiBzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgbG9ja0IgX19oaWRkZW4gU0VDKFxcXCIuZGF0YS5CXFxcIik7XFxuIFxcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcXFwiKVxcbitfX21zZyhcXFwiVmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgSVJRIGZsYWcgc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVxcXCIpXFxuK19fbXNnKFxcXCJQYXNzIHRoZSBzYXZlZCBJUlEgZmxhZyB0byB0aGUgbWF0Y2hpbmcgcmVzdG9yZSBrZnVuY1xcXCIpXFxuK2ludCBpcnFfZmxhZ19kaXJlY3RfcmVhZChzdHJ1Y3QgX19za19idWZmICpjdHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGJwZl9sb2NhbF9pcnFfc2F2ZShcXHUwMDI2ZmxhZ3MpO1xcbitcXHRyZXR1cm4gZmxhZ3M7XFxuK31cXG4rXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBkb2Vzbid0IHBvaW50IHRvIGFuIGlycSBmbGFnIG9uIHN0YWNrXFxcIilcXG4gaW50IGlycV9zYXZlX2JhZF9hcmcoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG5pbmRleCA2NDYwMjY0MzBlOWI1Li40NzIzYWU1NzhlNTM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xcbkBAIC0zMzIsNiArMzMyLDkgQEAgaW50IG5leHRfYWZ0ZXJfZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwiP3Jhd190cFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcXFwiKVxcbitfX21zZyhcXFwiVmVyaWZpY2F0aW9uIGZhaWxlZDogTWVtb3J5IFNhZmV0eTogRGlyZWN0IHJlYWQgb2YgaXRlcmF0b3Igc3RhY2sgc3RhdGVcXFwiKVxcbitfX21zZyhcXFwidmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVxcXCIpXFxuK19fbXNnKFxcXCJVc2UgaXRlcmF0b3Iga2Z1bmNzXFxcIilcXG4gaW50IF9fbmFrZWQgcmVhZF9mcm9tX2l0ZXJfc2xvdF9mYWlsKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXFxuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODNjOTExNDk0YTM0YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG5AQCAtNiw2ICs2LDggQEBcXG4gI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4gXFxuIGV4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sIHU2NCBmbGFncykgX193ZWFrIF9fa3N5bTtcXG4rZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xcbitleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4gXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJCUEZfRVhJVCBpbnN0cnVjdGlvbiBpbiBtYWluIHByb2cgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9wcmVlbXB0X2Rpc2FibGUtZWQgcmVnaW9uXFxcIilcXG5AQCAtMTI3LDYgKzEyOSwxOSBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/ZmVudHJ5L1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0clxcXCIpXFxuK19fbXNnKFxcXCJjYW5ub3QgYmUgdXNlZCBpbiBub24tc2xlZXBhYmxlIHByb2dyYW1cXFwiKVxcbitpbnQgbm9uX3NsZWVwYWJsZV9rZnVuY19pbl9yY3Uodm9pZCAqY3R4KVxcbit7XFxuK1xcdHUzMiBkYXRhO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0YnBmX2NvcHlfZnJvbV91c2VyX3N0cihcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCAwKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IF9fbm9pbmxpbmUgcHJlZW1wdF9nbG9iYWxfc3VicHJvZyh2b2lkKVxcbiB7XFxuIFxcdHByZWVtcHRfYmFsYW5jZV9zdWJwcm9nKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCAwMjRlZjJhYWUyMDA4Li5lYWFlZDA4NTlmOTQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtNjMsNiArNjMsNyBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuK19fbXNnKFxcXCJyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcXFwiKVxcbiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07XFxuQEAgLTgwLDYgKzgxLDE0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcXCIpXFxuK19fbXNnKFxcXCJleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgUjEgaXMgYSBjb250ZXh0IHBvaW50ZXJcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldK319XFxcIilcXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NmZy5jXFxuQEAgLTU1LDYgKzU1LDQ2IEBAIF9fbmFrZWQgdm9pZCBvdXRfb2ZfcmFuZ2VfanVtcDIodm9pZClcXG4gXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGNyb3NzX3N1YnByb2dfdGFyZ2V0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJqdW1wIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJ5XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJqdW1wIG91dCBvZiByYW5nZSBmcm9tIGluc24gMVxcXCIpXFxuK19fbXNnKFxcXCJqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmNcXFwiKVxcbitfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBjcm9zc19zdWJwcm9nX3RhcmdldDtcXHRcXHRcXHRcXFxcXFxuK1xcdGdvdG8gKzE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwic3VicHJvZ3JhbSBmYWxsdGhyb3VnaFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwibGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcXCIpXFxuK19fbXNnKFxcXCJmYWxsdGhyb3VnaF9zdWJwcm9nIEAgdmVyaWZpZXJfY2ZnLmNcXFwiKVxcbitfX25ha2VkIHZvaWQgc3VicHJvZ19mYWxsdGhyb3VnaCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nO1xcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwibG9vcCAoYmFjay1lZGdlKVxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwidW5yZWFjaGFibGUgaW5zbiAxXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xcbmluZGV4IDViMThjOWEyNzcxN2IuLmE4MzVhNDg3MTAyMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xcbkBAIC01Myw5ICs1MywxMSBAQCBERUZJTkVfU0lNUExFX0pVTVBfVEFCTEVfUFJPRyhyZXNlcnZlZF9maWVsZF9ub25femVyb19pbW0sIEJQRl9SRUdfMCwgMCwgMSwgX19mYVxcbiAgKi9cXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIm5vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0IDBcXFwiKVxcbitfX21zZyhcXFwiXFx1MDAzZVxcdTAwM2VcXHUwMDNlIDEgfCAoMGQpIGdvdG94IHIwXFxcIilcXG4gX19uYWtlZCB2b2lkIGp1bXBfdGFibGVfbm9fanVtcF90YWJsZSh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LjhieXRlICVbZ290b3hfcjBdO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjAgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xcbmluZGV4IGQyNDhjZTg3N2YxNGUuLmQxZWMxOWI3ZjY2YjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXFxuQEAgLTEzOSw2ICsxMzksNyBAQCBTRUMoXFxcInRyYWNlcG9pbnRcXFwiKVxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJib3VuZGVkIHJlY3Vyc2lvblxcXCIpXFxuIF9fZmFpbHVyZVxcbiBfX21zZyhcXFwicmVjdXJzaXZlIGNhbGwgZnJvbVxcXCIpXFxuK19fbXNnKFxcXCJUaGUgY2FsbCBmcm9tIGJvdW5kZWRfcmVjdXJzaW9uX18xKCkgdG8gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB3b3VsZCBtYWtlXFxcIilcXG4gX19uYWtlZCB2b2lkIGJvdW5kZWRfcmVjdXJzaW9uKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmNcXG5pbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl91bnByaXYuY1xcbkBAIC05Niw2ICs5NiwyNCBAQCBfX25ha2VkIHZvaWQgcHNldWRvX2J0Zl9pZF9sb2dfbWFza3NfYWRkcmVzcyh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBzZXVkb19mdW5jX2NhbGxiYWNrKF9fdTMyIGluZGV4LCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwidW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcXFwiKVxcbitfX3N1Y2Nlc3MgX19mYWlsdXJlX3VucHJpdlxcbitfX21zZ191bnByaXYoXFxcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9uc1xcXCIpXFxuK19fbm90X21zZ191bnByaXYoXFxcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFxcXCIpXFxuK19fbXNnX3VucHJpdihcXFwicG9saWN5IGNoZWNrIGZhaWxlZCBmb3IgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZVxcXCIpXFxuK19fbXNnX3VucHJpdihcXFwiYXZvaWQgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gdW5wcml2aWxlZ2VkXFxcIilcXG4raW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9sb29wKDEsIHBzZXVkb19mdW5jX2NhbGxiYWNrLCBOVUxMLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwidW5wcml2OiByZXR1cm4gcG9pbnRlclxcXCIpXFxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcXFwiUjAgbGVha3MgYWRkclxcXCIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXFxuaW5kZXggMDVhMGE1NWFkYjQ1MS4uZjI0MzBiOWEwMjE4NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xcbkBAIC0xMjEsNCArMTIxLDMxIEBAIGwwXyU9OlxcdHIwID0gNDI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwieGFkZCB3aXRoIHZhcmlhYmxlIHN0YWNrIG9mZnNldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwidmFyaWFibGUgb2Zmc2V0IHN0YWNrIHBvaW50ZXIgY2Fubm90IGJlIHBhc3NlZCBpbnRvIGhlbHBlciBmdW5jdGlvblxcXCIpXFxuK19fbXNnKFxcXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1xcXCIpXFxuK19fbXNnKFxcXCJUaGUgYXRvbWljIG9wZXJhdGlvbiB3b3VsZCBhY2Nlc3MgdGhlIHN0YWNrXFxcIilcXG4rX19tc2coXFxcIlVzZSBhIGZpeGVkIHN0YWNrIG9mZnNldCBmb3IgdGhlIGF0b21pYyBvcGVyYXRpb25cXFwiKVxcbitfX25ha2VkIHZvaWQgeGFkZF92YXJpYWJsZV9zdGFja19vZmZzZXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDE2KSA9IHIxO1xcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwMjY9IDg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxICs9IC0xNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxICs9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0bG9jayAqKHU2NCAqKShyMSArIDApICs9IHIyO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjE3Ljc3MDU2NDAxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNjAyOTQxOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTRjODg3MjliNDc2MzQ3Y2JiYzFmMTVlNGM4Mjk0NWI0MTc2NThmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDAyOjEzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDViOWQ3Njc4OTVjOTEuLjY5NjdkNDhiYmE0OWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMTE2OSwxOSArMTE2OSwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnRmX3Nob3dfbmFtZShzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXG4gXHRcdFx0aWQgPSB0LVx1MDAzZXR5cGU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdGdvdG8gcmVzb2x2ZWQ7XG4gXHRcdH1cbitcdFx0dCA9IGJ0Zl90eXBlX3NraXBfcXVhbGlmaWVycyhzaG93LVx1MDAzZWJ0ZiwgaWQpO1xuIFx0XHRpZiAoIWlkKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR0ID0gYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKHNob3ctXHUwMDNlYnRmLCBpZCk7XG4gXHR9XG4gXHQvKiBXZSBtYXkgbm90IGJlIGFibGUgdG8gcmVwcmVzZW50IHRoaXMgdHlwZTsgYmFpbCB0byBiZSBzYWZlICovXG4gXHRpZiAoaSA9PSBCVEZfU0hPV19NQVhfSVRFUilcbiBcdFx0cmV0dXJuIFwiXCI7XG4gXG4rcmVzb2x2ZWQ6XG4gXHRpZiAoIW5hbWUpXG4tXHRcdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc2hvdy1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRuYW1lID0gYnRmX3R5cGVfaXNfdm9pZCh0KSA/IFwidm9pZFwiIDogYnRmX25hbWVfYnlfb2Zmc2V0KHNob3ctXHUwMDNlYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbiBcdHN3aXRjaCAoQlRGX0lORk9fS0lORCh0LVx1MDAzZWluZm8pKSB7XG4gXHRjYXNlIEJURl9LSU5EX1NUUlVDVDpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggMGYxM2MxM2Y0MTMzNy4uOTVjNTlmNmNmNzBhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbisrKyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0yODcsNyArMjg3LDcgQEAgc3RhdGljIHN0cnVjdCBicGZfaWFycmF5ICpqdF9mcm9tX21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuICAqIGNvbWJpbmVkIGp1bXAgdGFibGUgaW4ganQtXHUwMDNlaXRlbXMgKGFsbG9jYXRlZCB3aXRoIGt2Y2FsbG9jKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbitcdFx0XHRcdFx0ICBpbnQgaW5zbl9pZHgsIGludCBzdWJwcm9nX3N0YXJ0LCBpbnQgc3VicHJvZ19lbmQpXG4ge1xuIFx0c3RydWN0IGJwZl9pYXJyYXkgKmp0ID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoIWp0KSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcIm5vIGp1bXAgdGFibGVzIGZvdW5kIGZvciBzdWJwcm9nIHN0YXJ0aW5nIGF0ICV1XFxuXCIsIHN1YnByb2dfc3RhcnQpO1xuIFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbi1cdFx0XHRlbnYsIHN1YnByb2dfc3RhcnQsIFwibWlzc2luZyBqdW1wIHRhYmxlXCIsXG4rXHRcdFx0ZW52LCBpbnNuX2lkeCwgXCJtaXNzaW5nIGp1bXAgdGFibGVcIixcbiBcdFx0XHRcIk1ha2Ugc3VyZSBzdWJwcm9ncmFtcyBjb250YWluaW5nIGdvdG94IGluc3RydWN0aW9ucyBhcmUgYWNjb21wYW5pZWQgYnkganVtcCB0YWJsZXMgcmVmZXJlbmNpbmcgdGhlc2Ugc3VicHJvZ3JhbXMuXCIsXG4gXHRcdFx0XCJObyBqdW1wIHRhYmxlIHdhcyBmb3VuZCBmb3IgdGhlIHN1YnByb2dyYW0gdGhhdCBzdGFydHMgYXQgaW5zdHJ1Y3Rpb24gJXUuXCIsXG4gXHRcdFx0c3VicHJvZ19zdGFydCk7XG5AQCAtMzQ5LDcgKzM0OSw3IEBAIGNyZWF0ZV9qdChpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiBcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nLVx1MDAzZXN0YXJ0O1xuIFx0c3VicHJvZ19lbmQgPSAoc3VicHJvZyArIDEpLVx1MDAzZXN0YXJ0O1xuLVx0anQgPSBqdF9mcm9tX3N1YnByb2coZW52LCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCk7XG4rXHRqdCA9IGp0X2Zyb21fc3VicHJvZyhlbnYsIHQsIHN1YnByb2dfc3RhcnQsIHN1YnByb2dfZW5kKTtcbiBcdGlmIChJU19FUlIoanQpKVxuIFx0XHRyZXR1cm4ganQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jIGIva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG5pbmRleCAzM2I3ZDllOGUyYzNhLi40NGQwYjdjNWYwNWY1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaWFnbm9zdGljcy5jXG4rKysgYi9rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcbkBAIC04MzMsMTEgKzgzMyw5IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRsaW5mbyA9IGJwZl9maW5kX2xpbmZvKGVudi1cdTAwM2Vwcm9nLCBpbnNuX2lkeCk7XG4gXHRpZiAoYnRmIFx1MDAyNlx1MDAyNiBsaW5mbylcbiBcdFx0YnBmX2dldF9saW5mb19zb3VyY2UoYnRmLCBsaW5mbywgXHUwMDI2c3JjKTtcbi1cdGlmICghc3JjLmZpbGUgfHwgISpzcmMuZmlsZSB8fCAhc3JjLmxpbmUgfHwgISpzcmMubGluZSkge1xuK1x0aWYgKCFzcmMuZmlsZSB8fCAhKnNyYy5maWxlKSB7XG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcIiAgaW5zbiAldVxcblwiLCBpbnNuX2lkeCk7XG4tXHRcdGRpYWdfcHJpbnRfc291cmNlX2Fubm90YXRpb24oZW52LCAwLCAwLCBsYWJlbCwgbXNnKTtcbi1cdFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYW5ub3RhdGlvbjtcbiBcdH1cbiBcbiBcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCBpbnNuX2lkeCk7XG5AQCAtODQ3LDYgKzg0NSw4IEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdGRpYWdfd3JpdGUoZW52LCBcIiAgJXMgQCAlczolZDolZFxcblwiLCBmdW5jLCBzcmMuZmlsZSwgc3JjLmxpbmVfbnVtLCBzcmMubGluZV9jb2wpO1xuIFx0ZWxzZVxuIFx0XHRkaWFnX3dyaXRlKGVudiwgXCIgICVzOiVkOiVkXFxuXCIsIHNyYy5maWxlLCBzcmMubGluZV9udW0sIHNyYy5saW5lX2NvbCk7XG4rXHRpZiAoIXNyYy5saW5lIHx8ICEqc3JjLmxpbmUpXG4rXHRcdGdvdG8gb3V0X2Fubm90YXRpb247XG4gXG4gXHRzdGFydF9saW5lID0gc3JjLmxpbmVfbnVtIC0gQlBGX0RJQUdfQ09OVEVYVDtcbiBcdGVuZF9saW5lID0gc3JjLmxpbmVfbnVtICsgQlBGX0RJQUdfQ09OVEVYVDtcbkBAIC04ODksNyArODg5LDExIEBAIHN0YXRpYyB2b2lkIGJwZl9kaWFnX3NvdXJjZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGNvbnN0IGNoXG4gXHRcdFx0ZGlhZ19wcmludF9zb3VyY2VfYW5ub3RhdGlvbihlbnYsIHdpZHRoLCBpbmRlbnQsIGxhYmVsLCBtc2cpO1xuIFx0fVxuIFx0ZGlhZ19wcmludF9pbnNuX2NvbnRleHQoZW52LCBpbnNuX2lkeCwgZGlzYXNtX2xpbmVzKTtcbitcdGdvdG8gb3V0X3Jlc3RvcmU7XG4gXG4rb3V0X2Fubm90YXRpb246XG4rXHRkaWFnX3ByaW50X3NvdXJjZV9hbm5vdGF0aW9uKGVudiwgMCwgMCwgbGFiZWwsIG1zZyk7XG4rXHRkaWFnX3ByaW50X2luc25fY29udGV4dChlbnYsIGluc25faWR4LCBkaXNhc21fbGluZXMpO1xuIG91dF9yZXN0b3JlOlxuIFx0ZGlhZ19mbXRfcmVzdG9yZShlbnYsIG1hcmspO1xuIH1cbkBAIC0xMDgzLDcgKzEwODcsOSBAQCB2b2lkIGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0Y29uc3QgY2hhciAqY29uc3RyYWludCwgKmNvbnRleHQ7XG4gXHR1MzIgZGVwdGg7XG4gXG4tXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzKVxuK1x0aWYgKCFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSlcbitcdFx0Y3R4X2tpbmQgPSBCUEZfRElBR19DT05URVhUX05PTkU7XG4rXHRlbHNlIGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpXG4gXHRcdGN0eF9raW5kID0gQlBGX0RJQUdfQ09OVEVYVF9SQ1U7XG4gXHRlbHNlIGlmIChlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9wcmVlbXB0X2xvY2tzKVxuIFx0XHRjdHhfa2luZCA9IEJQRl9ESUFHX0NPTlRFWFRfUFJFRU1QVDtcbkBAIC0xNTMxLDggKzE1MzcsNyBAQCBzdGF0aWMgdm9pZCBkaWFnX3JlY29yZF9tb2Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LFxuIFx0fSBlbHNlIGlmIChkaWFnX21vZF9pbnNuX29yaWdpbihlbnYsIGluc25faWR4LCBcdTAwMjZ0YXJnZXQsIFx1MDAyNmV2ZW50Lm1vZC5vcmlnaW4pKSB7XG4gXHRcdGV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgPSB0cnVlO1xuIFx0fVxuLVx0aWYgKG9sZF9yZWcgXHUwMDI2XHUwMDI2IG5ld19yZWcgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJlYXNvbiA9PSBCUEZfRElBR19NT0RfV1JJVEUgfHwgcmVhc29uID09IEJQRl9ESUFHX01PRF9TUElMTCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAob2xkX3JlZyBcdTAwMjZcdTAwMjYgbmV3X3JlZyBcdTAwMjZcdTAwMjYgcmVhc29uID09IEJQRl9ESUFHX01PRF9XUklURSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhbWVtY21wKFx1MDAyNmV2ZW50Lm1vZC5vbGQsIFx1MDAyNmV2ZW50Lm1vZC5uZXcsIHNpemVvZihldmVudC5tb2Qub2xkKSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWV2ZW50Lm1vZC5vcmlnaW5fdmFsaWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlhZ19tb2Rfa2VlcHNfbGluZWFnZShlbnYsIFx1MDAyNmV2ZW50KSlcbkBAIC0yMTY0LDcgKzIxNjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGlhZ19tb2RfdGFyZ2V0X2Rlc2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9SRUc6XG4gXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcIlIldVwiLCB0YXJnZXQtXHUwMDNlcmVnbm8pO1xuIFx0Y2FzZSBCUEZfRElBR19NT0RfVEFSR0VUX1NUQUNLX0FSRzpcbi1cdFx0cmV0dXJuIGJwZl9kaWFnX2ZtdChlbnYsIFwic3RhY2sgYXJnJWRcIiwgZGlhZ19zdGFja19hcmdubyh0YXJnZXQtXHUwMDNlc3RhY2tfYXJnKSk7XG4rXHRcdHJldHVybiBicGZfZGlhZ19mbXQoZW52LCBcIiooUjExLSV1KVwiLCAodGFyZ2V0LVx1MDAzZXN0YWNrX2FyZyArIDEpICogQlBGX1JFR19TSVpFKTtcbiBcdGNhc2UgQlBGX0RJQUdfTU9EX1RBUkdFVF9TVEFDS19TTE9UOlxuIFx0XHRyZXR1cm4gYnBmX2RpYWdfZm10KGVudiwgXCJzdGFjayBzbG90IGZwJWRcIiwgLSh0YXJnZXQtXHUwMDNlc3BpICsgMSkgKiBCUEZfUkVHX1NJWkUpO1xuIFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDBiYjdlZTk1YzhiZDIuLjc3MDMzY2YzNzM0YTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTI5MTIsNiArMjkxMiw3IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiwgZXhfY2JfaW5zbjtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbitcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwgKnN1Z2dlc3Rpb247XG4gXG4gXHQvKiBBZGQgZW50cnkgZnVuY3Rpb24uICovXG4gXHRyZXQgPSBhZGRfc3VicHJvZyhlbnYsIDApO1xuQEAgLTI5MjMsMTEgKzI5MjQsMTggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbitcdFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4rXHRcdFx0XHRvcGVyYXRpb24gPSBcIkJQRiBmdW5jdGlvbiByZWZlcmVuY2VcIjtcbitcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcIkxvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRiBmdW5jdGlvbiByZWZlcmVuY2VzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cIjtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0b3BlcmF0aW9uID0gXCJCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcIjtcbitcdFx0XHRcdHN1Z2dlc3Rpb24gPSBcIkxvYWQgdGhpcyBwcm9ncmFtIHdpdGggdGhlIHJlcXVpcmVkIGNhcGFiaWxpdHksIG9yIGF2b2lkIEJQRi10by1CUEYgZnVuY3Rpb24gY2FsbHMgaW4gdW5wcml2aWxlZ2VkIHByb2dyYW1zLlwiO1xuK1x0XHRcdH1cbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXG5cIik7XG4gXHRcdFx0YnBmX2RpYWdfcG9saWN5KFxuLVx0XHRcdFx0ZW52LCBpLCBcIkJQRi10by1CUEYgZnVuY3Rpb24gY2FsbFwiLFxuK1x0XHRcdFx0ZW52LCBpLCBvcGVyYXRpb24sXG4gXHRcdFx0XHRcImxvYWRpbmcgb3IgY2FsbGluZyBvdGhlciBCUEYgZnVuY3Rpb25zIHJlcXVpcmVzIENBUF9CUEYgb3IgQ0FQX1NZU19BRE1JTlwiLFxuLVx0XHRcdFx0XCJMb2FkIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LCBvciBhdm9pZCBCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxzIGluIHVucHJpdmlsZWdlZCBwcm9ncmFtcy5cIik7XG4rXHRcdFx0XHRzdWdnZXN0aW9uKTtcbiBcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0XHR9XG4gXG5AQCAtMjk5NSwxNSArMzAwMywxMyBAQCBzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4rc3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4tXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xuK1x0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXG4tXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXG4tXHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7XG4gXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyspIHtcbiBcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbkBAIC0zMDE3LDYgKzMwMjMsMjcgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRpZiAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChCUEZfTU9ERShjb2RlKSA9PSBCUEZfQUJTIHx8IEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTkQpKVxuIFx0XHRcdHN1YnByb2dbY3VyX3N1YnByb2ddLmhhc19sZF9hYnMgPSB0cnVlO1xuK1x0XHRpZiAoaSA9PSBzdWJwcm9nX2VuZCAtIDEpIHtcbitcdFx0XHRjdXJfc3VicHJvZysrO1xuK1x0XHRcdGlmIChjdXJfc3VicHJvZyBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250KVxuK1x0XHRcdFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3tcbitcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XG4rXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXG4rXHQvKiBub3cgY2hlY2sgdGhhdCBhbGwganVtcHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdWJwcm9nICovXG4rXHRzdWJwcm9nX3N0YXJ0ID0gc3VicHJvZ1tjdXJfc3VicHJvZ10uc3RhcnQ7XG4rXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyspIHtcbitcdFx0dTggY29kZSA9IGluc25baV0uY29kZTtcbitcbiBcdFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFx1MDAyNlx1MDAyNiBCUEZfQ0xBU1MoY29kZSkgIT0gQlBGX0pNUDMyKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfQ0FMTClcbkBAIC0zMDM4LDkgKzMwNjUsMTAgQEAgc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gbmV4dDpcbiBcdFx0aWYgKGkgPT0gc3VicHJvZ19lbmQgLSAxKSB7XG4tXHRcdFx0LyogdG8gYXZvaWQgZmFsbC10aHJvdWdoIGZyb20gb25lIHN1YnByb2cgaW50byBhbm90aGVyXG4rXHRcdFx0LypcbitcdFx0XHQgKiBUbyBhdm9pZCBmYWxsLXRocm91Z2ggZnJvbSBvbmUgc3VicHJvZyBpbnRvIGFub3RoZXIsXG4gXHRcdFx0ICogdGhlIGxhc3QgaW5zbiBvZiB0aGUgc3VicHJvZyBzaG91bGQgYmUgZWl0aGVyIGV4aXRcbi1cdFx0XHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbFxuK1x0XHRcdCAqIG9yIHVuY29uZGl0aW9uYWwganVtcCBiYWNrIG9yIGJwZl90aHJvdyBjYWxsLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChjb2RlICE9IChCUEZfSk1QIHwgQlBGX0VYSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFx1MDAyNlx1MDAyNlxuQEAgLTMxMjYsOCArMzE1NCw5IEBAIHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxuIFx0XHRcdFx0XHRcdGVudiwgaWR4LCBcInJlY3Vyc2l2ZSBzdWJwcm9ncmFtIGNhbGxcIixcbiBcdFx0XHRcdFx0XHRcIlJld3JpdGUgdGhlIHJlY3Vyc2lvbiBhcyBhbiBleHBsaWNpdCBib3VuZGVkIGxvb3AsIG9yIHNwbGl0IHRoZSBsb2dpYyBzbyBzdWJwcm9ncmFtIGNhbGxzIGRvIG5vdCBmb3JtIGEgY3ljbGUuXCIsXG4tXHRcdFx0XHRcdFx0XCJUaGlzIGJwZjJicGYgY2FsbCB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcIlxuLVx0XHRcdFx0XHRcdFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cIik7XG4rXHRcdFx0XHRcdFx0XCJUaGUgY2FsbCBmcm9tICVzKCkgdG8gJXMoKSB3b3VsZCBtYWtlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZ3JhcGggcmVjdXJzaXZlLiBcIlxuK1x0XHRcdFx0XHRcdFwiVGhlIHZlcmlmaWVyIHJlcXVpcmVzIGEgZmluaXRlLCBhY3ljbGljIGNhbGwgZ3JhcGggc28gaXQgY2FuIGJvdW5kIHN0YWNrIGRlcHRoIGFuZCBhbmFseXNpcy5cIixcbitcdFx0XHRcdFx0XHRicGZfc3VicHJvZ19uYW1lKGVudiwgY3VyKSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGNhbGxlZSkpO1xuIFx0XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbkBAIC0zODE3LDE5ICszODQ2LDQ2IEBAIHN0YXRpYyBpbnQgbWFya19yZWdfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYsIGludCBpLFxuLVx0XHRcdFx0ICAgICAgIGludCBzaXplKVxuK3N0YXRpYyB2b2lkIGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmLCBpbnQgaSwgaW50IHNpemUsXG4rXHRcdFx0XHRcdGVudW0gYnBmX3N0YWNrX3Nsb3RfdHlwZSB0eXBlKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnJlYXNvbjtcbitcdGNvbnN0IGNoYXIgKnByb2JsZW0sICpyZWFzb24sICpzdWdnZXN0aW9uLCAqa2luZDtcbitcbitcdGlmICh0eXBlID09IFNUQUNLX0lOVkFMSUQpIHtcbitcdFx0cmVhc29uID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdGVudiwgXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgaXMgdW5pbml0aWFsaXplZCBvbiB0aGlzIHBhdGguIFwiXG4rXHRcdFx0XCJQcm9ncmFtcyBsb2FkZWQgd2l0aCBDQVBfUEVSRk1PTiBjYW4gYmUgYWxsb3dlZCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMsIGJ1dCB0aGlzIHByb2dyYW0gaXMgYmVpbmcgcmVqZWN0ZWQgd2l0aG91dCB0aGF0IGFsbG93YW5jZS5cIixcbitcdFx0XHRzaXplLCBvZmYsIGkpO1xuK1x0XHRicGZfZGlhZ19tZW1vcnkoXG4rXHRcdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXCIsIHJlYXNvbixcbitcdFx0XHRcIkluaXRpYWxpemUgZXZlcnkgYnl0ZSBpbiB0aGUgc3RhY2sgcmFuZ2UgYmVmb3JlIHJlYWRpbmcgaXQsIGFkanVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIHNvIHRoZSByZWFkIGNvdmVycyBvbmx5IGluaXRpYWxpemVkIGJ5dGVzLCBcIlxuK1x0XHRcdFwib3IgbG9hZCB3aXRoIENBUF9QRVJGTU9OIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgcmVhZHMgYXJlIGludGVuZGVkLlwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0cmVhc29uID0gYnBmX2RpYWdfZm10KGVudixcbi1cdFx0XHQgICAgICBcIlRoaXMgcmVqZWN0ZWQgcmVhZCB1c2VzICVkIGJ5dGVzIGF0IHN0YWNrIG9mZnNldCAlZCwgYnV0IGJ5dGUgJWQgaW4gdGhhdCByYW5nZSBpcyB1bmluaXRpYWxpemVkIG9uIHRoaXMgcGF0aC4gXCJcbi1cdFx0XCJQcm9ncmFtcyBsb2FkZWQgd2l0aCBDQVBfUEVSRk1PTiBjYW4gYmUgYWxsb3dlZCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMsIGJ1dCB0aGlzIHByb2dyYW0gaXMgYmVpbmcgcmVqZWN0ZWQgd2l0aG91dCB0aGF0IGFsbG93YW5jZS5cIixcbi1cdFx0c2l6ZSwgb2ZmLCBpKTtcbi1cdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0ZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIFwidW5pbml0aWFsaXplZCBzdGFjayByZWFkXCIsIHJlYXNvbixcbi1cdFx0XCJJbml0aWFsaXplIGV2ZXJ5IGJ5dGUgaW4gdGhlIHN0YWNrIHJhbmdlIGJlZm9yZSByZWFkaW5nIGl0LCBhZGp1c3QgdGhlIG9mZnNldCBhbmQgc2l6ZSBzbyB0aGUgcmVhZCBjb3ZlcnMgb25seSBpbml0aWFsaXplZCBieXRlcywgXCJcbi1cdFx0XCJvciBsb2FkIHdpdGggQ0FQX1BFUkZNT04gaWYgdW5pbml0aWFsaXplZCBzdGFjayByZWFkcyBhcmUgaW50ZW5kZWQuXCIpO1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFNUQUNLX0RZTlBUUjpcbitcdFx0a2luZCA9IFwiZHlucHRyXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlVzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3MgdG8gYWNjZXNzIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYnkgdGhlIGR5bnB0ciBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGR5bnB0ciBzdGF0ZSBkaXJlY3RseS5cIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNUQUNLX0lURVI6XG4rXHRcdGtpbmQgPSBcIml0ZXJhdG9yXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlVzZSBpdGVyYXRvciBrZnVuY3MgdG8gYWR2YW5jZSBvciBkZXN0cm95IHRoZSBpdGVyYXRvciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXRzIHN0YXRlIGRpcmVjdGx5LlwiO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1RBQ0tfSVJRX0ZMQUc6XG4rXHRcdGtpbmQgPSBcIklSUSBmbGFnXCI7XG4rXHRcdHN1Z2dlc3Rpb24gPSBcIlBhc3MgdGhlIHNhdmVkIElSUSBmbGFnIHRvIHRoZSBtYXRjaGluZyByZXN0b3JlIGtmdW5jIGluc3RlYWQgb2YgcmVhZGluZyBpdHMgc3RhdGUgZGlyZWN0bHkuXCI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cHJvYmxlbSA9IGJwZl9kaWFnX2ZtdChlbnYsIFwiZGlyZWN0IHJlYWQgb2YgJXMgc3RhY2sgc3RhdGVcIiwga2luZCk7XG4rXHRyZWFzb24gPSBicGZfZGlhZ19mbXQoXG4rXHRcdGVudiwgXCJUaGlzIHJlamVjdGVkIHJlYWQgdXNlcyAlZCBieXRlcyBhdCBzdGFjayBvZmZzZXQgJWQsIGJ1dCBieXRlICVkIGluIHRoYXQgcmFuZ2UgYmVsb25ncyB0byB2ZXJpZmllci1tYW5hZ2VkICVzIHN0YXRlLiBcIlxuK1x0XHRcIlRoaXMgc3RhdGUgaGFzIGFuIG9wYXF1ZSByZXByZXNlbnRhdGlvbiB0aGF0IEJQRiBwcm9ncmFtcyBjYW5ub3QgcmVhZCBkaXJlY3RseS5cIixcbitcdFx0c2l6ZSwgb2ZmLCBpLCBraW5kKTtcbitcdGJwZl9kaWFnX21lbW9yeShlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgcHJvYmxlbSwgcmVhc29uLCBzdWdnZXN0aW9uKTtcbiB9XG4gXG4gLyogUmVhZCB0aGUgc3RhY2sgYXQgJ29mZicgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbnRvIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnlcbkBAIC0zOTIxLDcgKzM5NzcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2sgb2ZmICVkKyVkIHNpemUgJWRcXG5cIixcbiBcdFx0XHRcdFx0XHRcdG9mZiwgaSwgc2l6ZSk7XG4tXHRcdFx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuK1x0XHRcdFx0XHRcdGJwZl9kaWFnX3N0YWNrX3JlYWRfaW52YWxpZChlbnYsIG9mZiwgaSwgc2l6ZSwgdHlwZSk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdFx0XHR9XG5AQCAtMzk4MCw3ICs0MDM2LDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJpbnZhbGlkIHJlYWQgZnJvbSBzdGFjayBvZmYgJWQrJWQgc2l6ZSAlZFxcblwiLFxuIFx0XHRcdFx0XHRvZmYsIGksIHNpemUpO1xuLVx0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF91bmluaXQoZW52LCBvZmYsIGksIHNpemUpO1xuK1x0XHRcdFx0YnBmX2RpYWdfc3RhY2tfcmVhZF9pbnZhbGlkKGVudiwgb2ZmLCBpLCBzaXplLCB0eXBlKTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbkBAIC00MDc5LDEzICs0MTM1LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHR0bnVtX3N0cm4odG5fYnVmLCBzaXplb2YodG5fYnVmKSwgcmVnLVx1MDAzZXZhcl9vZmYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCJ2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uOyB2YXJfb2ZmPSVzIG9mZj0lZCBzaXplPSVkXFxuXCIsXG4gXHRcdFx0dG5fYnVmLCBvZmYsIHNpemUpO1xuLVx0XHRyZWFzb24gPSBicGZfZGlhZ19mbXQoZW52LFxuLVx0XHRcdFx0ICAgICAgXCJUaGUgaGVscGVyIHdvdWxkIGFjY2VzcyB0aGUgc3RhY2sgdGhyb3VnaCB2YXJpYWJsZSBvZmZzZXQgJXMgcGx1cyBmaXhlZCBvZmZzZXQgJWQgYW5kIHNpemUgJWQuIFwiXG4tXHRcdFx0XCJIZWxwZXIgc3RhY2sgbWVtb3J5IGFyZ3VtZW50cyByZXF1aXJlIGEgY29uc3RhbnQgc3RhY2sgb2Zmc2V0IGFuZCBhIHByZWNpc2UgaW5pdGlhbGl6ZWQgcmFuZ2UuXCIsXG4rXHRcdHJlYXNvbiA9IGJwZl9kaWFnX2ZtdChcbitcdFx0XHRlbnYsIFwiVGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFjayB0aHJvdWdoIHZhcmlhYmxlIG9mZnNldCAlcyBwbHVzIGZpeGVkIG9mZnNldCAlZCBhbmQgc2l6ZSAlZC4gXCJcbitcdFx0XHRcIkF0b21pYyBzdGFjayBvcGVyYXRpb25zIHJlcXVpcmUgYSBjb25zdGFudCBzdGFjayBvZmZzZXQgYW5kIGEgcHJlY2lzZSBpbml0aWFsaXplZCByYW5nZS5cIixcbiBcdFx0XHR0bl9idWYsIG9mZiwgc2l6ZSk7XG4gXHRcdGJwZl9kaWFnX21lbW9yeShcbi1cdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCJ2YXJpYWJsZSBzdGFjayBhY2Nlc3NcIiwgcmVhc29uLFxuLVx0XHRcdFwiVXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciBoZWxwZXIgbWVtb3J5IGFyZ3VtZW50cywgb3IgY29weSB0aGUgbmVlZGVkIGJ5dGVzIGludG8gYSBmaXhlZCBzdGFjayBzbG90IGZpcnN0LlwiKTtcbitcdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCJ2YXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wiLCByZWFzb24sXG4rXHRcdFx0XCJVc2UgYSBmaXhlZCBzdGFjayBvZmZzZXQgZm9yIHRoZSBhdG9taWMgb3BlcmF0aW9uLCBzZWxlY3RpbmcgdGhlIHRhcmdldCBzdGFjayBzbG90IG9uIHNlcGFyYXRlIGNvbnRyb2wtZmxvdyBwYXRocyBpZiBuZWNlc3NhcnkuXCIpO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcdC8qIFZhcmlhYmxlIG9mZnNldCBpcyBwcm9oaWJpdGVkIGZvciB1bnByaXZpbGVnZWQgbW9kZSBmb3Igc2ltcGxpY2l0eVxuQEAgLTk4ODIsNyArOTkzOCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdHN1Yl9uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4gXHRcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCJzbGVlcGFibGUgZ2xvYmFsIGZ1bmN0aW9uICVzKClcIiwgc3ViX25hbWUpO1xuIFx0XHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCAqaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcdFwiTW92ZSB0aGUgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGZ1bmN0aW9uLlwiKTtcbitcdFx0XHRcdFwiQ2FsbCB0aGUgZnVuY3Rpb24gZnJvbSBhIHNsZWVwYWJsZSBwcm9ncmFtIG91dHNpZGUgYW55IGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUgZnVuY3Rpb24uXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTA3MDEsNiArMTA3NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBzdGF0aWMgY29uc3QgY2hhciAqbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0aWYgKCFpbl9zbGVlcGFibGUoZW52KSlcbitcdFx0cmV0dXJuIFwibm9uLXNsZWVwYWJsZSBwcm9nXCI7XG4gXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzKVxuIFx0XHRyZXR1cm4gXCJyY3VfcmVhZF9sb2NrIHJlZ2lvblwiO1xuIFx0aWYgKGVudi1cdTAwM2VjdXJfc3RhdGUtXHUwMDNlYWN0aXZlX3ByZWVtcHRfbG9ja3MpXG5AQCAtMTA3MDksNyArMTA3NjcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplblxuIFx0XHRyZXR1cm4gXCJJUlEtZGlzYWJsZWQgcmVnaW9uXCI7XG4gXHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfbG9ja3MpXG4gXHRcdHJldHVybiBcImxvY2sgcmVnaW9uXCI7XG4tXHRyZXR1cm4gXCJub24tc2xlZXBhYmxlIHByb2dcIjtcbitcdHJldHVybiBcIm5vbi1zbGVlcGFibGUgY29udGV4dFwiO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJlbGVhc2VfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5AQCAtMTA4MDUsNyArMTA4NjMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcInNsZWVwYWJsZSBoZWxwZXIgJXMjJWRcIixcbiBcdFx0XHRcdFx0IGZ1bmNfaWRfbmFtZShmdW5jX2lkKSwgZnVuY19pZCk7XG4gXHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLFxuLVx0XHRcdFwiTW92ZSB0aGUgaGVscGVyIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBoZWxwZXIuXCIpO1xuK1x0XHRcdFwiQ2FsbCB0aGUgaGVscGVyIGZyb20gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIGFueSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGhlbHBlci5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTEwOTk0LDEzICsxMTA1MiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFxuIFx0LyogcmVzZXQgY2FsbGVyIHNhdmVkIHJlZ3MgKi9cbiBcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbitcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbiBcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG4tXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xuIFx0cmV0X3R5cGUgPSBmbi1cdTAwM2VyZXRfdHlwZTtcbiBcdHJldF9mbGFnID0gdHlwZV9mbGFnKHJldF90eXBlKTtcbkBAIC0xMjYyMywxMiArMTI2ODEsMTIgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0ICAgICF0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkge1xuIFx0XHRcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XG4gXG4tXHRcdFx0ZXhwZWN0ZWRfdHlwZSA9IGJwZl9kaWFnX2ZtdF9idGZfdHlwZShlbnYsIGJ0ZiwgcmVmX2lkKTtcbitcdFx0XHRleHBlY3RlZF90eXBlID0gYnBmX2RpYWdfZm10X2J0Zl90eXBlKGVudiwgYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRicGZfZGlhZ19jYWxsX2FyZ19mbXQoZW52LCBpbnNuX2lkeCwgYXJnbm8sIGZ1bmNfbmFtZSxcbiBcdFx0XHRcdFx0ICAgICAgXCJBZGQgYSBOVUxMIGNoZWNrIGFuZCBjYWxsIHRoZSBrZnVuYyBvbmx5IG9uIHRoZSBub24tTlVMTCBwYXRoLlwiLFxuLVx0XHRcdFx0XHQgICAgICBcInRoZSBwb2ludGVyIG1heSBiZSBOVUxMLCBidXQgdGhpcyBrZnVuYyByZXF1aXJlcyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gJXNcIixcbitcdFx0XHRcdFx0ICAgICAgXCJ0aGUgcG9pbnRlciBtYXkgYmUgTlVMTCwgYnV0IHRoaXMga2Z1bmMgcmVxdWlyZXMgYSBub24tTlVMTCB2YWx1ZSBvZiB0eXBlICVzXCIsXG4gXHRcdFx0XHRcdCAgICAgIGV4cGVjdGVkX3R5cGUpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG5AQCAtMTMwNjUsOCArMTMxMjMsMTQgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XG4gXHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdGlmIChyZXQgPT0gLUVJTlZBTClcbitcdFx0XHRcdFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBcIlBhc3MgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb3IgYSB2YWx1ZSB0aGUgdmVyaWZpZXIgY2FuIHByb3ZlIGlzIGNvbnN0YW50IGF0IHRoaXMgY2FsbC5cIixcbitcdFx0XHRcdFx0XHRcdCAgICAgIFwidGhlIGtmdW5jIHJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudCwgYnV0ICVzIGlzIHZhcmlhYmxlIG9uIHRoaXMgcGF0aFwiLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEtGX0FSR19NRU1fU0laRTpcbiBcdFx0e1xuQEAgLTEzMTMwLDE1ICsxMzE5NCwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuIFx0XHRcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSkge1xuLVx0XHRcdFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcbi1cbi1cdFx0XHRcdGV4cGVjdGVkX3R5cGUgPSBicGZfZGlhZ19mbXRfYnRmX3R5cGUoZW52LCBidGYsIHJlZl9pZCk7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0YnBmX2RpYWdfY2FsbF9hcmdfZm10KGVudiwgaW5zbl9pZHgsIGFyZ25vLCBmdW5jX25hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICAgXCJQYXNzIGEgcG9pbnRlciByZXR1cm5lZCBieSB0aGUgbWF0Y2hpbmcgQlBGIG9iamVjdCBhbGxvY2F0aW9uIG9yIGxvb2t1cCBvcGVyYXRpb24gZm9yIHRoaXMga2Z1bmMuXCIsXG4tXHRcdFx0XHRcdFx0ICAgICAgXCJ0aGUga2Z1bmMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QgdHlwZSAlcywgYnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHN1Y2ggYW4gb2JqZWN0IHBvaW50ZXJcIixcbi1cdFx0XHRcdFx0XHQgICAgICBleHBlY3RlZF90eXBlKTtcbitcdFx0XHRcdFx0XHQgICAgICBcIlBhc3MgYW4gb3duaW5nIG9yIG5vbi1vd25pbmcgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIG9iamVjdCBjb250YWluaW5nIGEgYnBmX3JlZmNvdW50IGZpZWxkLlwiLFxuK1x0XHRcdFx0XHRcdCAgICAgIFwidGhlIGtmdW5jIGV4cGVjdHMgYSBwb2ludGVyIHRvIGEgQlBGLW1hbmFnZWQgcmVmY291bnRlZCBvYmplY3QsIGJ1dCAlcyBpcyAlc1wiLFxuK1x0XHRcdFx0XHRcdCAgICAgIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbitcdFx0XHRcdFx0XHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSlcbkBAIC0xMzcyNiwxMSArMTM3ODgsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdH1cbiBcbiBcdHNsZWVwYWJsZSA9IGJwZl9pc19rZnVuY19zbGVlcGFibGUoXHUwMDI2bWV0YSk7XG4tXHRpZiAoc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhaW5fc2xlZXBhYmxlKGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwicHJvZ3JhbSBtdXN0IGJlIHNsZWVwYWJsZSB0byBjYWxsIHNsZWVwYWJsZSBrZnVuYyAlc1xcblwiLCBmdW5jX25hbWUpO1xuK1x0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbitcdFx0Y29uc3QgY2hhciAqc3VnZ2VzdGlvbjtcbitcbitcdFx0aWYgKGluX3NsZWVwYWJsZShlbnYpKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwia2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xcblwiLFxuK1x0XHRcdFx0ZnVuY19uYW1lLCBub25fc2xlZXBhYmxlX2NvbnRleHRfZGVzY3JpcHRpb24oZW52KSk7XG4rXHRcdFx0c3VnZ2VzdGlvbiA9IFwiTW92ZSB0aGUga2Z1bmMgY2FsbCBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2UgYSBub24tc2xlZXBhYmxlIGtmdW5jLlwiO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcInByb2dyYW0gbXVzdCBiZSBzbGVlcGFibGUgdG8gY2FsbCBzbGVlcGFibGUga2Z1bmMgJXNcXG5cIixcbitcdFx0XHRcdGZ1bmNfbmFtZSk7XG4rXHRcdFx0c3VnZ2VzdGlvbiA9IFwiTWFyayB0aGUgcHJvZ3JhbSBzbGVlcGFibGUgaWYgdGhlIHByb2dyYW0gdHlwZSBhbGxvd3MgaXQsIG9yIHVzZSBhIG5vbi1zbGVlcGFibGUga2Z1bmMuXCI7XG4rXHRcdH1cbiBcdFx0b3BlcmF0aW9uID0gYnBmX2RpYWdfZm10KGVudiwgXCJzbGVlcGFibGUga2Z1bmMgJXNcIiwgZnVuY19uYW1lKTtcbi1cdFx0YnBmX2RpYWdfY3R4X2ZvcmJpZGRlbihlbnYsIGluc25faWR4LCBvcGVyYXRpb24sXG4tXHRcdFx0XCJNYXJrIHRoZSBwcm9ncmFtIHNsZWVwYWJsZSBpZiB0aGUgcHJvZ3JhbSB0eXBlIGFsbG93cyBpdCwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cIik7XG4rXHRcdGJwZl9kaWFnX2N0eF9mb3JiaWRkZW4oZW52LCBpbnNuX2lkeCwgb3BlcmF0aW9uLCBzdWdnZXN0aW9uKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG5AQCAtMTM4MzAsMTUgKzEzOTAxLDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuIFx0fVxuIFxuLVx0aWYgKHNsZWVwYWJsZSBcdTAwMjZcdTAwMjYgIWluX3NsZWVwYWJsZV9jb250ZXh0KGVudikpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwia2VybmVsIGZ1bmMgJXMgaXMgc2xlZXBhYmxlIHdpdGhpbiAlc1xcblwiLFxuLVx0XHRcdGZ1bmNfbmFtZSwgbm9uX3NsZWVwYWJsZV9jb250ZXh0X2Rlc2NyaXB0aW9uKGVudikpO1xuLVx0XHRvcGVyYXRpb24gPSBicGZfZGlhZ19mbXQoZW52LCBcInNsZWVwYWJsZSBrZnVuYyAlc1wiLCBmdW5jX25hbWUpO1xuLVx0XHRicGZfZGlhZ19jdHhfZm9yYmlkZGVuKGVudiwgaW5zbl9pZHgsIG9wZXJhdGlvbixcbi1cdFx0XHRcIk1vdmUgdGhlIGtmdW5jIGNhbGwgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiwgb3IgdXNlIGEgbm9uLXNsZWVwYWJsZSBrZnVuYy5cIik7XG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0fVxuLVxuIFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikgXHUwMDI2XHUwMDI2IChyY3VfbG9jayB8fCByY3VfdW5sb2NrKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtMjEwODgsMTcgKzIxMTUwLDE5IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4rXHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYW5kIGNvbGxlY3QgdGhlIHByb3BlcnRpZXMgbmVlZGVkIGJ5IEJURiB2YWxpZGF0aW9uLiAqL1xuIFx0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbi1cdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4rXHRmaW5kX3N1YnByb2dfcHJvcGVydGllcyhlbnYpO1xuK1xuK1x0LyogVmFsaWRhdGUgQlRGIGFuZCBhcHBseSBDTy1SRSBiZWZvcmUgcmVwb3J0aW5nIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gKi9cbitcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuIFxuLVx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbi1cdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbitcdHJldCA9IGNoZWNrX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCBiZWFhNzNkYzM1ZjVkLi45NDE4ZGZlNGQ3YjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtNTYwLDYgKzU2MCw5IEBAIGludCBnbG9iYWwodm9pZCAqY3R4KVxuIC8qIEEgZGlyZWN0IHJlYWQgc2hvdWxkIGZhaWwgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCByZWFkIGZyb20gc3RhY2tcIilcbitfX21zZyhcIlZlcmlmaWNhdGlvbiBmYWlsZWQ6IE1lbW9yeSBTYWZldHk6IERpcmVjdCByZWFkIG9mIGR5bnB0ciBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBkeW5wdHIgc3RhdGVcIilcbitfX21zZyhcIlVzZSBkeW5wdHIgaGVscGVycyBvciBrZnVuY3NcIilcbiBpbnQgaW52YWxpZF9yZWFkMSh2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuQEAgLTE1OTAsNiArMTU5Myw3IEBAIF9fdTMyIGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpO1xuIC8qIENhbid0IHBhc3MgaW4gdmFyaWFibGUtc2l6ZWQgbGVuIHRvIGJwZl9keW5wdHJfc2xpY2UgKi9cbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJtdXN0IGJlIGEga25vd24gY29uc3RhbnRcIilcbitfX21zZyhcInJlcXVpcmVzIHRoaXMgbWVtb3J5IHNpemUgdG8gYmUgYSB2ZXJpZmllci1rbm93biBjb25zdGFudFwiKVxuIGludCBkeW5wdHJfc2xpY2VfdmFyX2xlbjEoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbkBAIC0xNjA5LDYgKzE2MTMsNyBAQCBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4xKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiAvKiBDYW4ndCBwYXNzIGluIHZhcmlhYmxlLXNpemVkIGxlbiB0byBicGZfZHlucHRyX3NsaWNlICovXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwibXVzdCBiZSBhIGtub3duIGNvbnN0YW50XCIpXG4rX19tc2coXCJyZXF1aXJlcyB0aGlzIG1lbW9yeSBzaXplIHRvIGJlIGEgdmVyaWZpZXIta25vd24gY29uc3RhbnRcIilcbiBpbnQgZHlucHRyX3NsaWNlX3Zhcl9sZW4yKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRjaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGV0aGhkcildID0ge307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXG5pbmRleCBhNGEwMDc4NjZhMzMyLi44ZDJiNTBkMTFmYTRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lycS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXJxLmNcbkBAIC0xNCw2ICsxNCwxOSBAQCBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0clxuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQSBfX2hpZGRlbiBTRUMoXCIuZGF0YS5BXCIpO1xuIHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayBsb2NrQiBfX2hpZGRlbiBTRUMoXCIuZGF0YS5CXCIpO1xuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBJUlEgZmxhZyBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBJUlEgZmxhZyBzdGF0ZVwiKVxuK19fbXNnKFwiUGFzcyB0aGUgc2F2ZWQgSVJRIGZsYWcgdG8gdGhlIG1hdGNoaW5nIHJlc3RvcmUga2Z1bmNcIilcbitpbnQgaXJxX2ZsYWdfZGlyZWN0X3JlYWQoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRicGZfbG9jYWxfaXJxX3NhdmUoXHUwMDI2ZmxhZ3MpO1xuK1x0cmV0dXJuIGZsYWdzO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJSMSBkb2Vzbid0IHBvaW50IHRvIGFuIGlycSBmbGFnIG9uIHN0YWNrXCIpXG4gaW50IGlycV9zYXZlX2JhZF9hcmcoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuaW5kZXggNjQ2MDI2NDMwZTliNS4uNDcyM2FlNTc4ZTUzNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5AQCAtMzMyLDYgKzMzMiw5IEBAIGludCBuZXh0X2FmdGVyX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4gXG4gU0VDKFwiP3Jhd190cFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImludmFsaWQgcmVhZCBmcm9tIHN0YWNrXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBEaXJlY3QgcmVhZCBvZiBpdGVyYXRvciBzdGFjayBzdGF0ZVwiKVxuK19fbXNnKFwidmVyaWZpZXItbWFuYWdlZCBpdGVyYXRvciBzdGF0ZVwiKVxuK19fbXNnKFwiVXNlIGl0ZXJhdG9yIGtmdW5jc1wiKVxuIGludCBfX25ha2VkIHJlYWRfZnJvbV9pdGVyX3Nsb3RfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5pbmRleCA2ZDVmY2U3ZTZmZmM5Li44M2M5MTE0OTRhMzRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcbkBAIC02LDYgKzYsOCBAQFxuICNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbiBcbiBleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLCB1NjQgZmxhZ3MpIF9fd2VhayBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuIFNFQyhcIj90Y1wiKVxuIF9fZmFpbHVyZSBfX21zZyhcIkJQRl9FWElUIGluc3RydWN0aW9uIGluIG1haW4gcHJvZyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYnBmX3ByZWVtcHRfZGlzYWJsZS1lZCByZWdpb25cIilcbkBAIC0xMjcsNiArMTI5LDE5IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP2ZlbnRyeS9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJwcm9ncmFtIG11c3QgYmUgc2xlZXBhYmxlIHRvIGNhbGwgc2xlZXBhYmxlIGtmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJcIilcbitfX21zZyhcImNhbm5vdCBiZSB1c2VkIGluIG5vbi1zbGVlcGFibGUgcHJvZ3JhbVwiKVxuK2ludCBub25fc2xlZXBhYmxlX2tmdW5jX2luX3JjdSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIGRhdGE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0YnBmX2NvcHlfZnJvbV91c2VyX3N0cihcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSksIE5VTEwsIDApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBfX25vaW5saW5lIHByZWVtcHRfZ2xvYmFsX3N1YnByb2codm9pZClcbiB7XG4gXHRwcmVlbXB0X2JhbGFuY2Vfc3VicHJvZygpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IDAyNGVmMmFhZTIwMDguLmVhYWVkMDg1OWY5NDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC02Myw2ICs2Myw3IEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXG4gXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4rX19tc2coXCJyZXF1aXJlcyBhIG5vbi1OVUxMIHZhbHVlIG9mIHR5cGUgKHZvaWQgKilcIilcbiBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbiwgKm07XG5AQCAtODAsNiArODEsMTQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rX19tc2coXCJleHBlY3RzIGEgcG9pbnRlciB0byBhIEJQRi1tYW5hZ2VkIHJlZmNvdW50ZWQgb2JqZWN0LCBidXQgUjEgaXMgYSBjb250ZXh0IHBvaW50ZXJcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcbit9XG4rXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cIilcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbmluZGV4IGMxZjU1ZTFkODBhNDIuLjQ0MTZkOTE1Y2RmMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2ZnLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jZmcuY1xuQEAgLTU1LDYgKzU1LDQ2IEBAIF9fbmFrZWQgdm9pZCBvdXRfb2ZfcmFuZ2VfanVtcDIodm9pZClcbiBcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbitzdGF0aWMgX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZCBpbnQgY3Jvc3Nfc3VicHJvZ190YXJnZXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwianVtcCBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyeVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImp1bXAgb3V0IG9mIHJhbmdlIGZyb20gaW5zbiAxXCIpXG4rX19tc2coXCJqdW1wX2Fjcm9zc19zdWJwcm9nX2JvdW5kYXJ5IEAgdmVyaWZpZXJfY2ZnLmNcIilcbitfX25ha2VkIHZvaWQganVtcF9hY3Jvc3Nfc3VicHJvZ19ib3VuZGFyeSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgY3Jvc3Nfc3VicHJvZ190YXJnZXQ7XHRcdFx0XFxcbitcdGdvdG8gKzE7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rc3RhdGljIF9fbmFrZWQgX19ub2lubGluZSBfX3VzZWQgaW50IGZhbGx0aHJvdWdoX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwic3VicHJvZ3JhbSBmYWxsdGhyb3VnaFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImxhc3QgaW5zbiBpcyBub3QgYW4gZXhpdCBvciBqbXBcIilcbitfX21zZyhcImZhbGx0aHJvdWdoX3N1YnByb2cgQCB2ZXJpZmllcl9jZmcuY1wiKVxuK19fbmFrZWQgdm9pZCBzdWJwcm9nX2ZhbGx0aHJvdWdoKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCBmYWxsdGhyb3VnaF9zdWJwcm9nO1x0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwic29ja2V0XCIpXG4gX19kZXNjcmlwdGlvbihcImxvb3AgKGJhY2stZWRnZSlcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJ1bnJlYWNoYWJsZSBpbnNuIDFcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG5pbmRleCA1YjE4YzlhMjc3MTdiLi5hODM1YTQ4NzEwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG5AQCAtNTMsOSArNTMsMTEgQEAgREVGSU5FX1NJTVBMRV9KVU1QX1RBQkxFX1BST0cocmVzZXJ2ZWRfZmllbGRfbm9uX3plcm9faW1tLCBCUEZfUkVHXzAsIDAsIDEsIF9fZmFcbiAgKi9cbiBTRUMoXCJzb2NrZXRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJubyBqdW1wIHRhYmxlcyBmb3VuZCBmb3Igc3VicHJvZyBzdGFydGluZyBhdCAwXCIpXG4rX19tc2coXCJcdTAwM2VcdTAwM2VcdTAwM2UgMSB8ICgwZCkgZ290b3ggcjBcIilcbiBfX25ha2VkIHZvaWQganVtcF90YWJsZV9ub19qdW1wX3RhYmxlKHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XHRcXFxuIFx0LjhieXRlICVbZ290b3hfcjBdO1x0XHRcdFx0XHRcXFxuIFx0cjAgPSAxO1x0XHRcdFx0XHRcdFx0XFxcbiBcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuaW5kZXggZDI0OGNlODc3ZjE0ZS4uZDFlYzE5YjdmNjZiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb29wczEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvb3BzMS5jXG5AQCAtMTM5LDYgKzEzOSw3IEBAIFNFQyhcInRyYWNlcG9pbnRcIilcbiBfX2Rlc2NyaXB0aW9uKFwiYm91bmRlZCByZWN1cnNpb25cIilcbiBfX2ZhaWx1cmVcbiBfX21zZyhcInJlY3Vyc2l2ZSBjYWxsIGZyb21cIilcbitfX21zZyhcIlRoZSBjYWxsIGZyb20gYm91bmRlZF9yZWN1cnNpb25fXzEoKSB0byBib3VuZGVkX3JlY3Vyc2lvbl9fMSgpIHdvdWxkIG1ha2VcIilcbiBfX25ha2VkIHZvaWQgYm91bmRlZF9yZWN1cnNpb24odm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG5pbmRleCA0MmRlNWNmZjdlNTJhLi4zMDY5ZTcwZmJjYmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3VucHJpdi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdW5wcml2LmNcbkBAIC05Niw2ICs5NiwyNCBAQCBfX25ha2VkIHZvaWQgcHNldWRvX2J0Zl9pZF9sb2dfbWFza3NfYWRkcmVzcyh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rc3RhdGljIGludCBwc2V1ZG9fZnVuY19jYWxsYmFjayhfX3UzMiBpbmRleCwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwidW5wcml2OiBwc2V1ZG8gZnVuY3Rpb24gcG9saWN5IGRpYWdub3N0aWNcIilcbitfX3N1Y2Nlc3MgX19mYWlsdXJlX3VucHJpdlxuK19fbXNnX3VucHJpdihcImxvYWRpbmcvY2FsbGluZyBvdGhlciBicGYgb3Iga2VybmVsIGZ1bmN0aW9uc1wiKVxuK19fbm90X21zZ191bnByaXYoXCJCUEYtdG8tQlBGIGZ1bmN0aW9uIGNhbGxcIilcbitfX21zZ191bnByaXYoXCJwb2xpY3kgY2hlY2sgZmFpbGVkIGZvciBCUEYgZnVuY3Rpb24gcmVmZXJlbmNlXCIpXG4rX19tc2dfdW5wcml2KFwiYXZvaWQgQlBGIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gdW5wcml2aWxlZ2VkXCIpXG4raW50IHVucHJpdl9wc2V1ZG9fZnVuY19wb2xpY3kodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9sb29wKDEsIHBzZXVkb19mdW5jX2NhbGxiYWNrLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJzb2NrZXRcIilcbiBfX2Rlc2NyaXB0aW9uKFwidW5wcml2OiByZXR1cm4gcG9pbnRlclwiKVxuIF9fc3VjY2VzcyBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnX3VucHJpdihcIlIwIGxlYWtzIGFkZHJcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGFkZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hhZGQuY1xuaW5kZXggMDVhMGE1NWFkYjQ1MS4uZjI0MzBiOWEwMjE4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94YWRkLmNcbkBAIC0xMjEsNCArMTIxLDMxIEBAIGwwXyU9Olx0cjAgPSA0MjtcdFx0XHRcdFx0XFxcbiBcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbitTRUMoXCJ0Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJ4YWRkIHdpdGggdmFyaWFibGUgc3RhY2sgb2Zmc2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJ2YXJpYWJsZSBvZmZzZXQgc3RhY2sgcG9pbnRlciBjYW5ub3QgYmUgcGFzc2VkIGludG8gaGVscGVyIGZ1bmN0aW9uXCIpXG4rX19tc2coXCJWZXJpZmljYXRpb24gZmFpbGVkOiBNZW1vcnkgU2FmZXR5OiBWYXJpYWJsZS1vZmZzZXQgYXRvbWljIHN0YWNrIGFjY2Vzc1wiKVxuK19fbXNnKFwiVGhlIGF0b21pYyBvcGVyYXRpb24gd291bGQgYWNjZXNzIHRoZSBzdGFja1wiKVxuK19fbXNnKFwiVXNlIGEgZml4ZWQgc3RhY2sgb2Zmc2V0IGZvciB0aGUgYXRvbWljIG9wZXJhdGlvblwiKVxuK19fbmFrZWQgdm9pZCB4YWRkX3ZhcmlhYmxlX3N0YWNrX29mZnNldCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gMTYpID0gcjE7XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRyMCBcdTAwMjY9IDg7XHRcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC0xNjtcdFx0XHRcdFx0XFxcbitcdHIxICs9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjIgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRsb2NrICoodTY0ICopKHIxICsgMCkgKz0gcjI7XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzoxNy43NzA1NzM5ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk3NzE4NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgdmVyaWZpZXIgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIGEgbWl4IG9mIGRpYWdub3N0aWMgaW1wcm92ZW1lbnRzIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZnVuY3Rpb25hbCBjaGFuZ2VzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJ3MgZXJyb3IgbWVzc2FnZXMgYW5kIGhpbnRzLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY2hhbmdlcyB0byB0aGUgdmVyaWZpY2F0aW9uIGxvZ2ljIGl0c2VsZi5cblxuRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvYnRmLmNgLCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgYnRmX3Nob3dfbmFtZWAuIEl0IG5vdyBoYW5kbGVzIHZvaWQgdHlwZXMgY29ycmVjdGx5LiBUaGlzIGlzIGEgbWlub3IgY29ycmVjdGlvbiwgbm90aGluZyB0byBiZSBhbGFybWVkIGFib3V0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgbGVkIHRvIGluY29ycmVjdCB0eXBlIG5hbWUgcmVwcmVzZW50YXRpb24gaW4gc3BlY2lmaWMgY2FzZXMsIHdoaWNoIGlzIG5vdyBmaXhlZC5cblxuVGhlbiwgYGtlcm5lbC9icGYvY2ZnLmNgIGhhcyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGp0X2Zyb21fc3VicHJvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYW4gYGluc25faWR4YCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBpcyBwcm9iYWJseSBqdXN0IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgZm9yIGRpYWdub3N0aWNzLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb24gY2F1c2luZyBpc3N1ZXMuXG5cbmBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgIGhhcyBhIG51bWJlciBvZiB1cGRhdGVzOyBhbGwgb2YgdGhlbSBzZWVtIHRvIGJlIGFib3V0IG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbnRleHQgcmVwb3J0aW5nIGJldHRlci4gTm90aGluZyB0b28gY3JpdGljYWwgaGVyZSwgYnV0IGV2ZXJ5IGJpdCBoZWxwcyB3aXRoIGRlYnVnZ2luZyBCUEYgcHJvZ3JhbXMuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZXMgaW4gdGhlIHByb2dyYW0ncyBvcmRlciBvZiBleGVjdXRpb24uIEkgc2VlIHRoYXQgYGNoZWNrX3N1YnByb2dzYCBpcyBzcGxpdCBpbnRvIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgYW5kIGBjaGVja19zdWJwcm9nc2AsIGFuZCB0aGUgY2FsbGluZyBvcmRlciBvZiB0aGVzZSBhbmQgYGJwZl9jaGVja19idGZfaW5mb2AgaGFzIGNoYW5nZWQuIFRoaXMgaXMgYSBiaWcgcmVkIGZsYWcsIGFuZCBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBjYWxscyBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLCB0aGVuIGBicGZfY2hlY2tfYnRmX2luZm9gLCBhbmQgZmluYWxseSBgY2hlY2tfc3VicHJvZ3NgLiBUaGlzIG1lYW5zIHRoYXQgQlRGIHZhbGlkYXRpb24gaXMgbm93IHBlcmZvcm1lZCAqYmVmb3JlKiB3ZSBjaGVjayBzdWJwcm9ncmFtIGxheW91dCB2YWxpZGl0eS4gUHJldmlvdXNseSwgdGhlIHN1YnByb2dyYW0gc3RydWN0dXJlIHdhcyB2YWxpZGF0ZWQgZmlyc3QuIFRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBzZWN1cml0eSBpbXBsaWNhdGlvbnMhXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCBkb2VzLiBPa2F5LCBpdCdzIGp1c3QgZXh0cmFjdGluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaGFzX2xkX2Fic2AsIG5vdGhpbmcgY3JpdGljYWwgdGhlcmUuXG5cblRoZSByZW9yZGVyaW5nIG1lYW5zIHRoYXQgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGhhcyB0aGUgcG90ZW50aWFsIHRvIHByb2Nlc3MgQlRGIGluZm9ybWF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IG1pZ2h0IGhhdmUgKmludmFsaWQqIHN1YnByb2dyYW0gc3RydWN0dXJlcyAoZS5nLiwganVtcHMgb3V0c2lkZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMsIG9yIGZhbGx0aHJvdWdocykuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBpZiBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBpc24ndCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBpbnZhbGlkIHByb2dyYW0gZmxvdy4gVGhlIGNvZGUgaXMgc3RydWN0dXJlZCBzdWNoIHRoYXQgYGFkZF9zdWJwcm9nc2AgaXMgc3RpbGwgY2FsbGVkIGZpcnN0LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuIFNvIHRoZSBpbnZhbGlkIHByb2dyYW0gc3RpbGwgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGludG8gYSBzZXQgb2Ygc3VicHJvZ3JhbXMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIEJURiBhbmQgc3VicHJvZ3JhbSB2YWxpZGF0aW9uIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGVyZSBtYXkgYmUgc29tZSBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgcGF0aHMuIFxuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIGBicGZfY2hlY2tfYnRmX2luZm9gIHRvIHNlZSBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCBwcm9ncmFtIHN0cnVjdHVyZSB0aGF0IGFyZSBubyBsb25nZXIgZ3VhcmFudGVlZCBieSB0aGUgbmV3IGV4ZWN1dGlvbiBvcmRlci4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIHRob3JvdWdobHkuIFRoaXMgcmVvcmRlcmluZyBvZiB2YWxpZGF0aW9uIGNoZWNrcyBjb3VsZCBpbnRyb2R1Y2UgbmV3LCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSwgYmVoYXZpb3IgaWYgYGJwZl9jaGVja19idGZfaW5mb2Agd2Fzbid0IGRlc2lnbmVkIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGludmFsaWQgc3VicHJvZ3JhbSBsYXlvdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzozMS43NDc3NjM0MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NDY1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja19idGZfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIxMDM3PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYwLVxcdC8qIFZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTYxOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjMyLjA3NDIzMjg0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUwODY5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBmdW5jdGlvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX2NoZWNrX2J0Zl9pbmZvYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGJwZl9jaGVja19idGZfaW5mb2AuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvcmUgcHVycG9zZSBpczogdGhpcyBmdW5jdGlvbiAqaGFzKiB0byBiZSBjb25jZXJuZWQgd2l0aCB2YWxpZGF0aW5nIEJURiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgaXQgd2lsbCBlbnN1cmUgdGhlIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgb2YgdGhlIEJURiBkYXRhIHRoYXQncyBiZWluZyB1c2VkIGJ5IEJQRiBwcm9ncmFtcyBvciBpbmZyYXN0cnVjdHVyZS4gSSB3b3VsZCBhc3N1bWUgaXQncyBjaGVja2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlR5cGUgU2FmZXR5OioqIE1ha2luZyBzdXJlIHRoYXQgdHlwZSBkZWZpbml0aW9ucyByZWZlcmVuY2VkIGluIEJQRiBjb2RlIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB2YWxpZCBpbiB0aGUgQlRGIGRhdGEuIEFueSBtaXNtYXRjaGVzIGluIHNpemVzIG9yIGxheW91dCBzaG91bGQgYmUgY2F1Z2h0LlxuKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIFByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHRoZSBCVEYgZGF0YSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIEJQRiBydW50aW1lIGVudmlyb25tZW50IGl0J3MgcnVubmluZyBpbi4gQSBtaXNtYXRjaCBoZXJlIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IuXG4qICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgcG90ZW50aWFsIGV4cGxvaXRzIGlmIEJURiBpbmZvcm1hdGlvbiBpcyBjb3JydXB0ZWQgb3IgbWFuaXB1bGF0ZWQ/XG4qICAgKipDb21wbGV0ZW5lc3M6KiogQ29uZmlybWluZyB0aGF0IGFsbCByZWZlcmVuY2VkIHR5cGVzIGFyZSBkZWZpbmVkLCBvciB0aGF0IGFueSBwYXJ0aWFsIGRlZmluaXRpb25zIGFyZSBoYW5kbGVkIGluIGEgcmVhc29uYWJsZSB3YXkuXG5cbkknZCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgZWFybHksIG9yIGxhdGVyPyBEb2VzIGl0IHJlbGF0ZSB0byB0aGUgQlBGIHZlcmlmaWVyIGluIHNvbWUgd2F5PyBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIGl0IGxpa2VseSBpcyBpbnZva2VkIGR1cmluZyBwcm9ncmFtIGxvYWQgb3IgYXR0YWNoIG9wZXJhdGlvbnMsIHByb2JhYmx5ICpiZWZvcmUqIHRoZSBwcm9ncmFtIGlzIGFsbG93ZWQgdG8gcnVuLiBJdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGludmVzdGlnYXRlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvbzsgd2hhdCBleGFjdGx5IGRvZXMgdGhpcyBmdW5jdGlvbiB0YWtlIGFzIGFyZ3VtZW50czogdGhlIEJURiBkYXRhIGl0c2VsZiwgcG9pbnRlcnMgdG8ga2VybmVsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtPyBUaGlzIGtpbmQgb2YgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgQlBGIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHk7IGlmIGl0IGlzIHBvb3JseSBpbXBsZW1lbnRlZCwgdGhlIHdob2xlIHN5c3RlbSBpcyBhdCByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjczMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjM1Ljg3OTMyMjE0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY4OTczNzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGJwZl9jaGVja19idGZfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjM1Ljk4NjIyNzYyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY2MTI1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEZWJ1Z2dpbmcgdGhlIEJURiBJc3N1ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMuLi4gc2VlbXMgbGlrZSB0aGUgcHJvYmxlbSBJJ20gY2hhc2luZyBtaWdodCAqbm90KiBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWxseSBzdGF0aWMuIEkgd2FzIGluaXRpYWxseSBsZWFuaW5nIHRoYXQgd2F5LCBidXQgbm93IEknbSB0aGlua2luZyBtYXliZSB0aGUgZXJyb3IgaXMgZHluYW1pYyBpbiBuYXR1cmUsIGNoYW5naW5nIGluIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBjb2RlLiBPciwgYW5kIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVuZXJneSwgbWF5YmUgdGhlIHJvb3Qgb2YgdGhpcyBiZWhhdmlvciBJJ20gc2VlaW5nIGlzIGhpZGRlbiBhd2F5IGluIGBidGYuY2AuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBkZWJ1Z2dpbmcgbmV4dC4gSSBzaG91bGQgc3RlcCB0aHJvdWdoIGl0IGFuZCBjaGVjayB3aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTk0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6MzguODkyODQyNjk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjkzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tfYnRmX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuYz00MTA9aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzozOC45ODcxNDAxMDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwMTg4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIEJURiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBCVEYgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB2YWxpZGF0ZXMgQlRGIGluZm9ybWF0aW9uLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGRlZmluaXRlbHkgdGhlIGBicGZfY2hlY2tfYnRmX2luZm9gIGZ1bmN0aW9uLiBUaGF0J3MgaW4gYGtlcm5lbC9icGYvY2hlY2tfYnRmLmNgLCBzbyBsZXQncyBnbyBhaGVhZCBhbmQgcHVsbCB0aGF0IHVwLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCB3aGF0IGNoZWNrcyB0aGV5J3JlIHBlcmZvcm1pbmcgb24gdGhlIEJURiBkYXRhLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbW1vbiBwaXRmYWxscyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEdldHRpbmcgYSBoYW5kbGUgb24gdGhpcyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgYnVpbGRpbmcgcm9idXN0IGFuZCBzZWN1cmUgQlBGIHByb2dyYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUxNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjQxLjc3NzMzMDE1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Mzg6XFx0aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA0Mzk6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbiA0NDA6XFx0XFx0XFx0ICAgICAgIGJwZnB0cl90IHVhdHRyKVxcbiA0NDE6XFx0e1xcbiA0NDI6XFx0XFx0aW50IGVycjtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFhdHRyLVxcdTAwM2VmdW5jX2luZm9fY250IFxcdTAwMjZcXHUwMDI2ICFhdHRyLVxcdTAwM2VsaW5lX2luZm9fY250KSB7XFxuIDQ0NTpcXHRcXHRcXHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXFxuIDQ0NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NDg6XFx0XFx0fVxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRlcnIgPSBjaGVja19idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4gNDUxOlxcdFxcdGlmIChlcnIpXFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHRlcnIgPSBjaGVja19idGZfbGluZShlbnYsIGF0dHIsIHVhdHRyKTtcXG4gNDU1OlxcdFxcdGlmIChlcnIpXFxuIDQ1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHRlcnIgPSBjaGVja19jb3JlX3JlbG8oZW52LCBhdHRyLCB1YXR0cik7XFxuIDQ1OTpcXHRcXHRpZiAoZXJyKVxcbiA0NjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjEzOjQxLjc3NzQwMzkwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE1NzM3MDc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IHJlb3JkZXJpbmcgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgdmFsaWRhdGlvbiBhbmQgc3VicHJvZ3JhbSBsYXlvdXQgY2hlY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBtb3RpdmF0aW9uIGlzIHRvIHByaW9yaXRpemUgZXJyb3IgcmVwb3J0aW5nOiBzaG93IEJURi9DTy1SRSAoQ29tcGlsZS1PbmNlLCBSdW4tRXZlcnl3aGVyZSkgZXJyb3JzICpiZWZvcmUqIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcgZXJyb3JzIGNhdXNlZCBieSB0aGUgc3VicHJvZ3JhbSBsYXlvdXQgYmVpbmcgaW5jb3JyZWN0LiBJIG1lYW4sIGl0IG1ha2VzIHNlbnNlOyBpZiBDTy1SRSBpcyBtZXNzaW5nIHdpdGggdGhlIHByb2dyYW0sIGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGtub3cgdGhhdCAqZmlyc3QqIGluc3RlYWQgb2Ygc2VlaW5nIGFuIGVycm9yIGFib3V0IGFuIGludmFsaWQganVtcCB3aXRoaW4gYSBzdWJwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcm9jZXNzIGludm9sdmVzIGBjaGVja19idGZfZnVuY2AsIGBjaGVja19idGZfbGluZWAsIGFuZCBgY2hlY2tfY29yZV9yZWxvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHZhbGlkYXRpbmcgQlRGIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBvZiB0aGUgQlBGIHByb2dyYW0uIFRoZSBrZXkgaXMgdGhhdCBgY2hlY2tfc3VicHJvZ3NgIGNoZWNrcyBmb3IganVtcHMgdGhhdCBjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgb3IgZmFsbHRocm91Z2hzICphZnRlciogcmVsb2NhdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiBgYWRkX3N1YnByb2dzYCBwb3B1bGF0ZXMgYGVudi1cdTAwM2VzdWJwcm9nX2luZm9gICpiZWZvcmUqIGBicGZfY2hlY2tfYnRmX2luZm9gLiBTbywgYGNoZWNrX3N1YnByb2dzYCBjaGVja3MgZm9yIGludmFsaWQgbGF5b3V0cyAqYWZ0ZXIqIHN1YnByb2dyYW1zIGFyZSBhY3R1YWxseSBkZWZpbmVkLiBUaGVyZWZvcmUsIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IG1lYW5zIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uIG9uIGEgcHJvZ3JhbSB3aXRoIGFuIGluY29ycmVjdCBzdWJwcm9ncmFtIGxheW91dC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGlzLiBDTy1SRSByZWxvY2F0aW9ucyAqZG8qIG1vZGlmeSBpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgdG8gYXNzdW1lIHRoYXQgdGhleSBkb24ndCBjaGFuZ2UganVtcCAqb2Zmc2V0cyogKHRoZXkgY2hhbmdlIGltbWVkaWF0ZXMgaW5zdGVhZCkuIEhvd2V2ZXIsIEkgYWxzbyBzYXcgdGhlIGNvbW1pdCBtZXNzYWdlOiBcIlZhbGlkYXRlIEJURiBhbmQgYXBwbHkgQ08tUkUgYmVmb3JlIHJlcG9ydGluZyBzdWJwcm9ncmFtIGxheW91dCBlcnJvcnMuXCJcblxuTG9va2luZyBhdCB0aGUgY29kZSwgdGhlcmUgYXJlIG51bWVyb3VzIGRpYWdub3N0aWMgY2hhbmdlcy4gVGhlIGRpYWdub3N0aWMgY2hhbmdlcyBpbmNsdWRlIHRoZSByZW9yZGVyaW5nIG9mIGBicGZfZGlhZ19tb2RfYmVnaW5gLCB0aGUgY29uc29saWRhdGlvbiBhbmQgY2xhcmlmaWNhdGlvbiBvZiBzbGVlcGFibGUga2Z1bmMgY2hlY2tzLCBhbmQgdmFyaW91cyBpbXByb3ZlbWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgaW4gYGNoZWNrX2tmdW5jX2FyZ3NgLiBTcGVjaWZpY2FsbHksIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZSBpbiBgS0ZfQVJHX0NPTlNUX01FTV9TSVpFYCwgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gVGhlc2UgYXJlIGFsbCBhYm91dCBtYWtpbmcgdGhlIHZlcmlmaWVyJ3MgZmVlZGJhY2sgbW9yZSBoZWxwZnVsLCBwcm92aWRpbmcgY2xlYXJlciBzdWdnZXN0aW9ucyB0byB0aGUgdXNlci5cblxuSG93ZXZlciwgdGhlIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbnMgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBTaW5jZSB0aGUgYGJwZl9jaGVja19idGZfaW5mb2Agbm93IGV4ZWN1dGVzIG9uIGEgcG90ZW50aWFsbHkgXCJpbnZhbGlkXCIgc3VicHJvZ3JhbSBsYXlvdXQuIENvdWxkIHRoaXMgY2F1c2UgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gSSBzaG91bGQgY2hlY2sgYGNoZWNrX2J0Zl9mdW5jYCB0byBlbnN1cmUgdGhlIHByb2dyYW0gaGFzIGEgdmFsaWQgbGF5b3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxMzo1Ni45MzQ3NzcwMTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTc1NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTEzMi1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjEzMzpzdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzQtXFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTM6NTcuMDAwNzU3MjEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODEyNzgyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICdjaGVja19idGZfZnVuYycqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2hlY2tfYnRmX2Z1bmNgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGtlcm5lbCBtb2R1bGUsIGEgdXNlci1zcGFjZSB1dGlsaXR5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBCUEYgVHlwZSBGb3JtYXQgKEJURikgY2hlY2tpbmcsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZXRhZGF0YSBhYm91dCBCUEYgcHJvZ3JhbXMsIGFuZCB2ZXJpZnlpbmcgaXRzIGludGVncml0eS5cblxuSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBJcyBpdCBsb29raW5nIGZvciBtYWxmb3JtZWQgQlRGIGRhdGEsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBCVEYgaW5mbyBhbmQgdGhlIGFjdHVhbCBCUEYgcHJvZ3JhbSwgb3IgcGVyaGFwcyB0eXBlIG1pc21hdGNoZXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGFyZWFzIHRoYXQgcmVxdWlyZSBjbG9zZSBpbnNwZWN0aW9uLCBzdWNoIGFzOlxuKiAgICoqQlRGIEhlYWRlciBJbnRlZ3JpdHk6KiogRW5zdXJpbmcgdGhlIEJURiBoZWFkZXIgaXMgd2VsbC1mb3JtZWQgYW5kIHZhbGlkLlxuKiAgICoqVHlwZSBEZXNjcmlwdG9yIENvbnNpc3RlbmN5OioqIFZlcmlmeWluZyB0aGUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHlwZXMgcmVjb3JkZWQgaW4gdGhlIEJURiBkYXRhLlxuKiAgICoqU2l6ZSBhbmQgQWxpZ25tZW50OioqIENvbmZpcm1pbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBtYXRjaCBleHBlY3RhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuXG4qICAgKipEZXBlbmRlbmN5IFJlc29sdXRpb246KiogQXJlIHRoZXJlIGNyb3NzLXJlZmVyZW5jZXMgYmV0d2VlbiB0eXBlcz8gV2UgbmVlZCB0byBlbnN1cmUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgcmVzb2x2ZWQuXG4qICAgKipFcnJvciBSZXBvcnRpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCBsb2csIHJldHVybiBhbiBlcnJvciBjb2RlLCBvciB0cmlnZ2VyIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBIb3cgdGhvcm91Z2ggaXMgaXQ/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY2hlY2tzIHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50aW5nLiBBcmUgd2UgbG9va2luZyBhdCBhIGJhc2ljIHZhbGlkYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBkZXRlY3RpbmcgcG90ZW50aWFsIHR5cGUgY29uZnVzaW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz9cblxuTXkgbWVudGFsIGNoZWNrbGlzdCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBjb21tb24gQlRGLXJlbGF0ZWQgaXNzdWVzLiBOb3csIHRoZSBnb2FsIGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZW0uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDowMi40ODIwMzg1NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMzOlxcdHN0YXRpYyBpbnQgY2hlY2tfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gMTM0OlxcdFxcdFxcdFxcdCAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuIDEzNTpcXHRcXHRcXHRcXHQgIGJwZnB0cl90IHVhdHRyKVxcbiAxMzY6XFx0e1xcbiAxMzc6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bywgKnJldF90eXBlO1xcbiAxMzg6XFx0XFx0dTMyIGksIG5mdW5jcywgdXJlY19zaXplO1xcbiAxMzk6XFx0XFx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmtyZWNvcmQ7XFxuIDE0MDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKmluZm9fYXV4ID0gTlVMTDtcXG4gMTQxOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gMTQyOlxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcXG4gMTQzOlxcdFxcdGJwZnB0cl90IHVyZWNvcmQ7XFxuIDE0NDpcXHRcXHRib29sIHNjYWxhcl9yZXR1cm47XFxuIDE0NTpcXHRcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0bmZ1bmNzID0gYXR0ci1cXHUwMDNlZnVuY19pbmZvX2NudDtcXG4gMTQ4OlxcdFxcdGlmICghbmZ1bmNzKSB7XFxuIDE0OTpcXHRcXHRcXHRpZiAoY2hlY2tfYWJub3JtYWxfcmV0dXJuKGVudikpXFxuIDE1MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTI6XFx0XFx0fVxcbiAxNTM6XFx0XFx0aWYgKG5mdW5jcyAhPSBlbnYtXFx1MDAzZXN1YnByb2dfY250KSB7XFxuIDE1NDpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm51bWJlciBvZiBmdW5jcyBpbiBmdW5jX2luZm8gZG9lc24ndCBtYXRjaCBudW1iZXIgb2Ygc3VicHJvZ3NcXFxcblxcXCIpO1xcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1NjpcXHRcXHR9XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHVyZWNfc2l6ZSA9IGF0dHItXFx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0cHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gMTYxOlxcdFxcdGJ0ZiA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHR1cmVjb3JkID0gbWFrZV9icGZwdHIoYXR0ci1cXHUwMDNlZnVuY19pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRrcmVjb3JkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm87XFxuIDE2NjpcXHRcXHRpbmZvX2F1eCA9IGt6YWxsb2Nfb2JqcygqaW5mb19hdXgsIG5mdW5jcyxcXG4gMTY3OlxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTik7XFxuIDE2ODpcXHRcXHRpZiAoIWluZm9fYXV4KVxcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZnVuY3M7IGkrKykge1xcbiAxNzI6XFx0XFx0XFx0LyogY2hlY2sgaW5zbl9vZmYgKi9cXG4gMTczOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCAhPSBrcmVjb3JkW2ldLmluc25fb2ZmKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZ1bmNfaW5mbyBCVEYgc2VjdGlvbiBkb2Vzbid0IG1hdGNoIHN1YnByb2cgbGF5b3V0IGluIEJQRiBwcm9ncmFtXFxcXG5cXFwiKTtcXG4gMTc3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE3ODpcXHRcXHRcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdFxcdC8qIEFscmVhZHkgY2hlY2tlZCB0eXBlX2lkICovXFxuIDE4MTpcXHRcXHRcXHR0eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBrcmVjb3JkW2ldLnR5cGVfaWQpO1xcbiAxODI6XFx0XFx0XFx0aW5mb19hdXhbaV0ubGlua2FnZSA9IEJURl9JTkZPX1ZMRU4odHlwZS1cXHUwMDNlaW5mbyk7XFxuIDE4MzpcXHRcXHRcXHQvKiBBbHJlYWR5IGNoZWNrZWQgZnVuY19wcm90byAqL1xcbiAxODQ6XFx0XFx0XFx0ZnVuY19wcm90byA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgdHlwZS1cXHUwMDNldHlwZSk7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdFxcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gMTg3OlxcdFxcdFxcdHNjYWxhcl9yZXR1cm4gPVxcbiAxODg6XFx0XFx0XFx0XFx0YnRmX3R5cGVfaXNfc21hbGxfaW50KHJldF90eXBlKSB8fCBidGZfaXNfYW55X2VudW0ocmV0X3R5cGUpO1xcbiAxODk6XFx0XFx0XFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgIXNjYWxhcl9yZXR1cm4gXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uaGFzX2xkX2Ficykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJMRF9BQlMgaXMgb25seSBhbGxvd2VkIGluIGZ1bmN0aW9ucyB0aGF0IHJldHVybiAnaW50Jy5cXFxcblxcXCIpO1xcbiAxOTE6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMTkyOlxcdFxcdFxcdH1cXG4gMTkzOlxcdFxcdFxcdGlmIChpIFxcdTAwMjZcXHUwMDI2ICFzY2FsYXJfcmV0dXJuIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc190YWlsX2NhbGwpIHtcXG4gMTk0OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidGFpbF9jYWxsIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJ2ludCcuXFxcXG5cXFwiKTtcXG4gMTk1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE5NjpcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdFxcdGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLm5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVxcdTAwM2VuYW1lX29mZik7XFxuIDE5OTpcXHRcXHRcXHRicGZwdHJfYWRkKFxcdTAwMjZ1cmVjb3JkLCB1cmVjX3NpemUpO1xcbiAyMDA6XFx0XFx0fVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXggPSBpbmZvX2F1eDtcXG4gMjAzOlxcdFxcdHJldHVybiAwO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRlcnJfZnJlZTpcXG4gMjA2OlxcdFxcdGtmcmVlKGluZm9fYXV4KTtcXG4gMjA3OlxcdFxcdHJldHVybiByZXQ7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdCNkZWZpbmUgTUlOX0JQRl9MSU5FSU5GT19TSVpFXFx0b2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9saW5lX2luZm8sIGxpbmVfY29sKVxcbiAyMTE6XFx0I2RlZmluZSBNQVhfTElORUlORk9fUkVDX1NJWkVcXHRNQVhfRlVOQ0lORk9fUkVDX1NJWkVcXG4gMjEyOlxcdFxcbiAyMTM6XFx0c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAyMTQ6XFx0XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4gMjE1OlxcdFxcdFxcdFxcdCAgYnBmcHRyX3QgdWF0dHIpXFxuIDIxNjpcXHR7XFxuIDIxNzpcXHRcXHR1MzIgaSwgcywgbnJfbGluZm8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSwgcHJldl9vZmZzZXQgPSAwO1xcbiAyMTg6XFx0XFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YjtcXG4gMjE5OlxcdFxcdHN0cnVjdCBicGZfbGluZV9pbmZvICpsaW5mbztcXG4gMjIwOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gMjIxOlxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjtcXG4gMjIyOlxcdFxcdGJwZnB0cl90IHVsaW5mbztcXG4gMjIzOlxcdFxcdGludCBlcnI7XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdG5yX2xpbmZvID0gYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudDtcXG4gMjI2OlxcdFxcdGlmICghbnJfbGluZm8pXFxuIDIyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjI4OlxcdFxcdGlmIChucl9saW5mbyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9saW5lX2luZm8pKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdHJlY19zaXplID0gYXR0ci1cXHUwMDNlbGluZV9pbmZvX3JlY19zaXplO1xcbiAyMzI6XFx0XFx0aWYgKHJlY19zaXplIFxcdTAwM2MgTUlOX0JQRl9MSU5FSU5GT19TSVpFIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjAyLjQ4MjEzMjk2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA3NzkxNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBCVEYgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBjaGVja19idGZfZnVuY2AgaXMgcmVseWluZyBvbiBgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfbGRfYWJzYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gQWgsIHRoYXQncyB3aHkgYGZpbmRfc3VicHJvZ19wcm9wZXJ0aWVzYCB3YXMgc3BsaXQgb2ZmIGZyb20gYGNoZWNrX3N1YnByb2dzYCBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBmbGFnIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgYWxsb3dzIGBjaGVja19idGZfZnVuY2AgdG8gZWZmaWNpZW50bHkgdXNlIHRoZSBwcmVjb21wdXRlZCBpbmZvcm1hdGlvbi5cblxuSG93ZXZlciwgYSBwb3RlbnRpYWwgcHJvYmxlbSBpcyB0aGF0IGBjaGVja19zdWJwcm9nc2AgYWxzbyBwZXJmb3JtcyBlc3NlbnRpYWwgdmFsaWRhdGlvbiBsaWtlIGNoZWNraW5nIGZvciBpbnZhbGlkIGp1bXBzIGFuZCBmYWxsdGhyb3VnaHMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlmIEkgbW92ZSBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AsIHdpbGwgdGhhdCBjcmVhdGUgYW4gaXNzdWU/IFdvdWxkIGBicGZfY2hlY2tfYnRmX2luZm9gIHBvdGVudGlhbGx5IHByb2Nlc3MgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgaW52YWxpZCBqdW1wIGluc3RydWN0aW9ucz8gSSBuZWVkIHRvIGtub3cgaWYgYGJwZl9jaGVja19idGZfaW5mb2AgY2FyZXMgYWJvdXQgdGhvc2UgcGFydGljdWxhciBjaGVja3MuXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHdoYXQgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgZG9lcy4gYGNoZWNrX2J0Zl9mdW5jYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBgbmZ1bmNzYCwgY2hlY2tpbmcgdGhlIGBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0YCB2YWx1ZS4gVGhlbiwgSSBzZWUgYGNoZWNrX2J0Zl9saW5lYCBpdGVyYXRlcyB0aHJvdWdoIGBucl9saW5mb2AgYW5kIGZvY3VzZXMgb24gdmVyaWZ5aW5nIGBsaW5mb1tpXS5pbnNuX29mZmAuIExldCBtZSBub3cgY2hlY2sgYGNoZWNrX2J0Zl9saW5lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDowNi45ODk5MjcxMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMzOlxcdFxcdCAgICByZWNfc2l6ZSBcXHUwMDNlIE1BWF9MSU5FSU5GT19SRUNfU0laRSB8fFxcbiAyMzQ6XFx0XFx0ICAgIHJlY19zaXplIFxcdTAwMjYgKHNpemVvZih1MzIpIC0gMSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0LyogTmVlZCB0byB6ZXJvIGl0IGluIGNhc2UgdGhlIHVzZXJzcGFjZSBtYXlcXG4gMjM4OlxcdFxcdCAqIHBhc3MgaW4gYSBzbWFsbGVyIGJwZl9saW5lX2luZm8gb2JqZWN0LlxcbiAyMzk6XFx0XFx0ICovXFxuIDI0MDpcXHRcXHRsaW5mbyA9IGt2emFsbG9jX29ianMoc3RydWN0IGJwZl9saW5lX2luZm8sIG5yX2xpbmZvLFxcbiAyNDE6XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKTtcXG4gMjQyOlxcdFxcdGlmICghbGluZm8pXFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gMjQ2OlxcdFxcdGJ0ZiA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRzID0gMDtcXG4gMjQ5OlxcdFxcdHN1YiA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiAyNTA6XFx0XFx0dWxpbmZvID0gbWFrZV9icGZwdHIoYXR0ci1cXHUwMDNlbGluZV9pbmZvLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAyNTE6XFx0XFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbyk7XFxuIDI1MjpcXHRcXHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAyNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2xpbmZvOyBpKyspIHtcXG4gMjU0OlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG4gMjU1OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMjU2OlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUUyQklHKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm5vbnplcm8gdGFpbGluZyByZWNvcmQgaW4gbGluZV9pbmZvXFxcIik7XFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRpZiAoY29weV90b19icGZwdHJfb2Zmc2V0KHVhdHRyLFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXRvZih1bmlvbiBicGZfYXR0ciwgbGluZV9pbmZvX3JlY19zaXplKSxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmV4cGVjdGVkX3NpemUsIHNpemVvZihleHBlY3RlZF9zaXplKSkpXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiAyNjI6XFx0XFx0XFx0XFx0fVxcbiAyNjM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjY0OlxcdFxcdFxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXFx1MDAyNmxpbmZvW2ldLCB1bGluZm8sIG5jb3B5KSkge1xcbiAyNjc6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gMjY4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDI2OTpcXHRcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdFxcdC8qXFxuIDI3MjpcXHRcXHRcXHQgKiBDaGVjayBpbnNuX29mZiB0byBlbnN1cmVcXG4gMjczOlxcdFxcdFxcdCAqIDEpIHN0cmljdGx5IGluY3JlYXNpbmcgQU5EXFxuIDI3NDpcXHRcXHRcXHQgKiAyKSBib3VuZGVkIGJ5IHByb2ctXFx1MDAzZWxlblxcbiAyNzU6XFx0XFx0XFx0ICpcXG4gMjc2OlxcdFxcdFxcdCAqIFRoZSBsaW5mb1swXS5pbnNuX29mZiA9PSAwIGNoZWNrIGxvZ2ljYWxseSBmYWxscyBpbnRvXFxuIDI3NzpcXHRcXHRcXHQgKiB0aGUgbGF0ZXIgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgZnVuYy4uLlxcXCIgY2FzZVxcbiAyNzg6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgZmlyc3QgbGluZm9bMF0uaW5zbl9vZmYgbXVzdCBiZSB0aGVcXG4gMjc5OlxcdFxcdFxcdCAqIGZpcnN0IHN1YiBhbHNvIGFuZCB0aGUgZmlyc3Qgc3ViIG11c3QgaGF2ZVxcbiAyODA6XFx0XFx0XFx0ICogc3VicHJvZ19pbmZvWzBdLnN0YXJ0ID09IDAuXFxuIDI4MTpcXHRcXHRcXHQgKi9cXG4gMjgyOlxcdFxcdFxcdGlmICgoaSBcXHUwMDI2XFx1MDAyNiBsaW5mb1tpXS5pbnNuX29mZiBcXHUwMDNjPSBwcmV2X29mZnNldCkgfHxcXG4gMjgzOlxcdFxcdFxcdCAgICBsaW5mb1tpXS5pbnNuX29mZiBcXHUwMDNlPSBwcm9nLVxcdTAwM2VsZW4pIHtcXG4gMjg0OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCBsaW5lX2luZm9bJXVdLmluc25fb2ZmOiV1IChwcmV2X29mZnNldDoldSBwcm9nLVxcdTAwM2VsZW46JXUpXFxcXG5cXFwiLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0aSwgbGluZm9baV0uaW5zbl9vZmYsIHByZXZfb2Zmc2V0LFxcbiAyODY6XFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbGVuKTtcXG4gMjg3OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDI4ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyODk6XFx0XFx0XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRcXHRpZiAoIXByb2ctXFx1MDAzZWluc25zaVtsaW5mb1tpXS5pbnNuX29mZl0uY29kZSkge1xcbiAyOTI6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXFwiSW52YWxpZCBpbnNuIGNvZGUgYXQgbGluZV9pbmZvWyV1XS5pbnNuX29mZlxcXFxuXFxcIixcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdGkpO1xcbiAyOTU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMjk2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDI5NzpcXHRcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdGlmICghYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbGluZm9baV0ubGluZV9vZmYpIHx8XFxuIDMwMDpcXHRcXHRcXHQgICAgIWJ0Zl9uYW1lX2J5X29mZnNldChidGYsIGxpbmZvW2ldLmZpbGVfbmFtZV9vZmYpKSB7XFxuIDMwMTpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkludmFsaWQgbGluZV9pbmZvWyV1XS5saW5lX29mZiBvciAuZmlsZV9uYW1lX29mZlxcXFxuXFxcIiwgaSk7XFxuIDMwMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMDM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMzA0OlxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0XFx0aWYgKHMgIT0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCkge1xcbiAzMDc6XFx0XFx0XFx0XFx0aWYgKGxpbmZvW2ldLmluc25fb2ZmID09IHN1YltzXS5zdGFydCkge1xcbiAzMDg6XFx0XFx0XFx0XFx0XFx0c3ViW3NdLmxpbmZvX2lkeCA9IGk7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRzKys7XFxuIDMxMDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHN1YltzXS5zdGFydCBcXHUwMDNjIGxpbmZvW2ldLmluc25fb2ZmKSB7XFxuIDMxMTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgZnVuYyMldVxcXFxuXFxcIiwgcyk7XFxuIDMxMjpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAzMTM6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMzE0OlxcdFxcdFxcdFxcdH1cXG4gMzE1OlxcdFxcdFxcdH1cXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0XFx0cHJldl9vZmZzZXQgPSBsaW5mb1tpXS5pbnNuX29mZjtcXG4gMzE4OlxcdFxcdFxcdGJwZnB0cl9hZGQoXFx1MDAyNnVsaW5mbywgcmVjX3NpemUpO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRpZiAocyAhPSBlbnYtXFx1MDAzZXN1YnByb2dfY250KSB7XFxuIDMyMjpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1pc3NpbmcgYnBmX2xpbmVfaW5mbyBmb3IgJXUgZnVuY3Mgc3RhcnRpbmcgZnJvbSBmdW5jIyV1XFxcXG5cXFwiLFxcbiAzMjM6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIHMsIHMpO1xcbiAzMjQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzI1OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbGluZm8gPSBsaW5mbztcXG4gMzI5OlxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbnJfbGluZm8gPSBucl9saW5mbztcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDMzMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6MDYuOTkwMDA5OTQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3MjIwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBDb2RlIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBhIGNlcnRhaW4gY2hlY2sgaXMgaGFwcGVuaW5nIHdoZXJlIGl0IGlzLiBJdCBsb29rcyBsaWtlIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzbid0IGNvbmNlcm5lZCB3aXRoIGp1bXBzIG9yIGhvdyB0aGUgY29kZSBmbG93cyB3aXRoaW4gdGhlIHN1YnByb2dyYW1zLiBJdHMgcHJpbWFyeSBqb2Igc2VlbXMgdG8gYmUgdmFsaWRhdGluZyB0aGF0IHRoZSBCVEYgaW5mb3JtYXRpb24gYWxpZ25zIHdpdGggdGhlIHN1YnByb2dyYW0gYm91bmRhcmllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpZGVudGlmaWVkIGJ5IGBhZGRfc3VicHJvZ3NgLiBTbywgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2Ug4oCTIG1vdmluZyBgY2hlY2tfc3VicHJvZ3NgIGFmdGVyIGBicGZfY2hlY2tfYnRmX2luZm9gIGlzIGludGVuZGVkIHRvIHByaW9yaXRpemUgcmVwb3J0aW5nIEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBzdWJwcm9ncmFtIGxheW91dC4gSXQgbWFrZXMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZXMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuXG5cbkJ1dCB3YWl0LCBhIG5hZ2dpbmcgcXVlc3Rpb246IGRvZXMgYGJwZl9jaGVja19idGZfaW5mb2AgYWN0dWFsbHkgKmFwcGx5KiBDTy1SRSByZWxvY2F0aW9uPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBvcmRlcmluZyBpcyBldmVuIG1vcmUgY3JpdGljYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIGBjaGVja19jb3JlX3JlbG9gIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU0OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjEwLjM2NjczNDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzM6XFx0ZXJyX2ZyZWU6XFxuIDMzNDpcXHRcXHRrdmZyZWUobGluZm8pO1xcbiAzMzU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzM2OlxcdH1cXG4gMzM3OlxcdFxcbiAzMzg6XFx0I2RlZmluZSBNSU5fQ09SRV9SRUxPX1NJWkVcXHRzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pXFxuIDMzOTpcXHQjZGVmaW5lIE1BWF9DT1JFX1JFTE9fU0laRVxcdE1BWF9GVU5DSU5GT19SRUNfU0laRVxcbiAzNDA6XFx0XFxuIDM0MTpcXHRzdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiAzNDI6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuIDM0MzpcXHRcXHRcXHRcXHQgICBicGZwdHJfdCB1YXR0cilcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHUzMiBpLCBucl9jb3JlX3JlbG8sIG5jb3B5LCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBicGZfY29yZV9yZWxvIGNvcmVfcmVsbyA9IHt9O1xcbiAzNDc6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVxcdTAwM2Vwcm9nO1xcbiAzNDg6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VidGY7XFxuIDM0OTpcXHRcXHRzdHJ1Y3QgYnBmX2NvcmVfY3R4IGN0eCA9IHtcXG4gMzUwOlxcdFxcdFxcdC5sb2cgPSBcXHUwMDI2ZW52LVxcdTAwM2Vsb2csXFxuIDM1MTpcXHRcXHRcXHQuYnRmID0gYnRmLFxcbiAzNTI6XFx0XFx0fTtcXG4gMzUzOlxcdFxcdGJwZnB0cl90IHVfY29yZV9yZWxvO1xcbiAzNTQ6XFx0XFx0aW50IGVycjtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0bnJfY29yZV9yZWxvID0gYXR0ci1cXHUwMDNlY29yZV9yZWxvX2NudDtcXG4gMzU3OlxcdFxcdGlmICghbnJfY29yZV9yZWxvKVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1OTpcXHRcXHRpZiAobnJfY29yZV9yZWxvIFxcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpXFxuIDM2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0cmVjX3NpemUgPSBhdHRyLVxcdTAwM2Vjb3JlX3JlbG9fcmVjX3NpemU7XFxuIDM2MzpcXHRcXHRpZiAocmVjX3NpemUgXFx1MDAzYyBNSU5fQ09SRV9SRUxPX1NJWkUgfHxcXG4gMzY0OlxcdFxcdCAgICByZWNfc2l6ZSBcXHUwMDNlIE1BWF9DT1JFX1JFTE9fU0laRSB8fFxcbiAzNjU6XFx0XFx0ICAgIHJlY19zaXplICUgc2l6ZW9mKHUzMikpXFxuIDM2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0XFx0dV9jb3JlX3JlbG8gPSBtYWtlX2JwZnB0cihhdHRyLVxcdTAwM2Vjb3JlX3JlbG9zLCB1YXR0ci5pc19rZXJuZWwpO1xcbiAzNjk6XFx0XFx0ZXhwZWN0ZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbyk7XFxuIDM3MDpcXHRcXHRuY29weSA9IG1pbl90KHUzMiwgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHQvKiBVbmxpa2UgZnVuY19pbmZvIGFuZCBsaW5lX2luZm8sIGNvcHkgYW5kIGFwcGx5IGVhY2ggQ08tUkVcXG4gMzczOlxcdFxcdCAqIHJlbG9jYXRpb24gcmVjb3JkIG9uZSBhdCBhIHRpbWUuXFxuIDM3NDpcXHRcXHQgKi9cXG4gMzc1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jb3JlX3JlbG87IGkrKykge1xcbiAzNzY6XFx0XFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG4gMzc3OlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbiAzNzg6XFx0XFx0XFx0aWYgKGVycikge1xcbiAzNzk6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcXG4gMzgwOlxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibm9uemVybyB0YWlsaW5nIHJlY29yZCBpbiBjb3JlX3JlbG9cXFwiKTtcXG4gMzgxOlxcdFxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX2JwZnB0cl9vZmZzZXQodWF0dHIsXFxuIDM4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG9mZnNldG9mKHVuaW9uIGJwZl9hdHRyLCBjb3JlX3JlbG9fcmVjX3NpemUpLFxcbiAzODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZXhwZWN0ZWRfc2l6ZSwgc2l6ZW9mKGV4cGVjdGVkX3NpemUpKSlcXG4gMzg0OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIDM4NTpcXHRcXHRcXHRcXHR9XFxuIDM4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzg3OlxcdFxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9icGZwdHIoXFx1MDAyNmNvcmVfcmVsbywgdV9jb3JlX3JlbG8sIG5jb3B5KSkge1xcbiAzOTA6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gMzkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzOTI6XFx0XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRcXHRpZiAoY29yZV9yZWxvLmluc25fb2ZmICUgOCB8fCBjb3JlX3JlbG8uaW5zbl9vZmYgLyA4IFxcdTAwM2U9IHByb2ctXFx1MDAzZWxlbikge1xcbiAzOTU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJJbnZhbGlkIGNvcmVfcmVsb1sldV0uaW5zbl9vZmY6JXUgcHJvZy1cXHUwMDNlbGVuOiV1XFxcXG5cXFwiLFxcbiAzOTY6XFx0XFx0XFx0XFx0XFx0aSwgY29yZV9yZWxvLmluc25fb2ZmLCBwcm9nLVxcdTAwM2VsZW4pO1xcbiAzOTc6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzOTk6XFx0XFx0XFx0fVxcbiA0MDA6XFx0XFxuIDQwMTpcXHRcXHRcXHRlcnIgPSBicGZfY29yZV9hcHBseShcXHUwMDI2Y3R4LCBcXHUwMDI2Y29yZV9yZWxvLCBpLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZy1cXHUwMDNlaW5zbnNpW2NvcmVfcmVsby5pbnNuX29mZiAvIDhdKTtcXG4gNDAzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDA1OlxcdFxcdFxcdGJwZnB0cl9hZGQoXFx1MDAyNnVfY29yZV9yZWxvLCByZWNfc2l6ZSk7XFxuIDQwNjpcXHRcXHR9XFxuIDQwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MDg6XFx0fVxcbiA0MDk6XFx0XFxuIDQxMDpcXHRpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gNDExOlxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4gNDEyOlxcdFxcdFxcdFxcdCBicGZwdHJfdCB1YXR0cilcXG4gNDEzOlxcdHtcXG4gNDE0OlxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gNDE1OlxcdFxcdGludCBlcnI7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdGlmICghYXR0ci1cXHUwMDNlZnVuY19pbmZvX2NudCBcXHUwMDI2XFx1MDAyNiAhYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCkge1xcbiA0MTg6XFx0XFx0XFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxcbiA0MTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDIxOlxcdFxcdH1cXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVxcdTAwM2Vwcm9nX2J0Zl9mZCk7XFxuIDQyNDpcXHRcXHRpZiAoSVNfRVJSKGJ0ZikpXFxuIDQyNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihidGYpO1xcbiA0MjY6XFx0XFx0aWYgKGJ0Zl9pc19rZXJuZWwoYnRmKSkge1xcbiA0Mjc6XFx0XFx0XFx0YnRmX3B1dChidGYpO1xcbiA0Mjg6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDQyOTpcXHRcXHR9XFxuIDQzMDpcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmID0gYnRmO1xcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDoxMC4zNjY4NjI1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM3ODEzNTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgRGlhZ25vc3RpYyBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBgYnBmX2NvcmVfYXBwbHlgIGNvdWxkIGltcGFjdCBgY2hlY2tfc3VicHJvZ3NgLCB3aGljaCBkZWFscyB3aXRoIHN1YnByb2dyYW0gYm91bmRhcmllcyBhbmQganVtcHMuIFNpbmNlIENPLVJFIHJlbG9jYXRpb25zIHByaW1hcmlseSB0b3VjaCB0aGUgYGltbWAgZmllbGQgYW5kIG5vdCBqdW1wIG9mZnNldHMgb3Igb3Bjb2RlcyAoZXhjZXB0IGZvciBOT1BzIG9yIGRpcmVjdCB2YWx1ZSBsb2FkcyksIEkgZmlndXJlZCBgY2hlY2tfc3VicHJvZ3NgIHNob3VsZCBzdGlsbCBiZSBzYWZlIHRvIHJ1biBhZnRlciBgYnBmX2NoZWNrX2J0Zl9pbmZvYC4gVGhlIHBvdGVudGlhbCBmb3IgYSBOT1AsIHdoaWxlIGEgdmFsaWQgYWx0ZXJhdGlvbiwgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWx0ZXIganVtcHMuXG5cbk5leHQsIEkgbG9va2VkIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGJleW9uZCB0aGlzIHJlb3JkZXJpbmcuIFRoZSBjb21taXQgbG9nIGFuZCB0aGUgY29kZSBjaGFuZ2VzIHBvaW50IGFsbW9zdCBlbnRpcmVseSB0b3dhcmQgaW1wcm92ZWQgZGlhZ25vc3RpY3Mg4oCTIGJldHRlciBlcnJvciBtZXNzYWdlcywgY2xlYXJlciBoaW50cywgdGhhdCBzb3J0IG9mIHRoaW5nLiBUaGUgbWFpbiBzdHJ1Y3R1cmFsIHNoaWZ0IGlzIHRoZSBtb3ZlIG9mIGBjaGVja19zdWJwcm9nc2AgKmFmdGVyKiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC5cblxuVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgY29uc3RpdHV0ZSBhIFwic2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VcIiB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRoZSBoaW50IGlzIGhlbHBmdWwuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBlc3NlbnRpYWxseSBpbXByb3ZlZCBsb2dnaW5nIGFuZCBlcnJvciByZXBvcnRpbmcsIGFuZCB0aGV5IGRvbid0IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiAqdmFsaWQqIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb24gaW52YWxpZCBwcm9ncmFtcyBhbmQgdGhlIHZlcmlmaWVyIGl0c2VsZi4gVGhlIGNoYW5nZSBhbHRlcnMgdGhlIHZlcmlmaWVyJ3MgZmFpbHVyZSBwYXRoLCBidXQgdGhlIGZ1bmRhbWVudGFsIGNoZWNrcyByZW1haW4gdGhlIHNhbWUuXG5cbkEga2V5IHBvaW50IGlzIHRoZSByYXRpb25hbGUgZm9yIHRoZSByZW9yZGVyaW5nOiBwcmlvcml0aXplIEJURiBhbmQgQ08tUkUgZXJyb3JzICpiZWZvcmUqIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlIGlkZWEgaXMgdG8gZ2l2ZSB1c2VycyB0aGUgbW9zdCByZWxldmFudCBlcnJvciBtZXNzYWdlcyBmaXJzdC4gVGhpcyBtYWtlcyB0aGUgdXNlciBleHBlcmllbmNlIGJldHRlciB3aXRoIGVycm9yIG1lc3NhZ2VzLiBFdmVuIGlmIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggc3VicHJvZ3JhbSBsYXlvdXQgYW5kIENPLVJFL0JURiwgdGhpcyBwcmlvcml0aXplcyB0aGUgQ08tUkUvQlRGIGVycm9yLiBUaGUgdmVyaWZpZXIncyBleGVjdXRpb24gcGF0aCBpcyBkaWZmZXJlbnQgaW4gdGhhdCBpdCB3aWxsIHJldHVybiBhIGRpZmZlcmVudCBlcnJvciBhbmQgcHJvZHVjZSBhIGRpZmZlcmVudCBsb2cgb3V0cHV0LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55ICpwb3RlbnRpYWwqIGZvciBjcmFzaGVzLiBJIHJldmlld2VkIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBCVEYgY2hlY2tpbmcgY29kZSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHNwZWNpZmljIHN0cnVjdHVyYWwgY2hlY2tzIHBlcmZvcm1lZCBieSBgY2hlY2tfc3VicHJvZ3NgLCBzbyBtb3ZpbmcgYGNoZWNrX3N1YnByb2dzYCBkb2Vzbid0IGludHJvZHVjZSBhIHJpc2sgb2YgYSBjcmFzaCBpbiBgYnBmX2NoZWNrX2J0Zl9pbmZvYC5cblxuR2l2ZW4gdGhhdCwgYW5kIGNvbnNpZGVyaW5nIHRoZSBleHBsaWNpdCBndWlkYW5jZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIGRpYWdub3N0aWMgYW5kIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzLCBJIHRoaW5rIHRoZSBhbnN3ZXIgaXMgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjI2Ljc0NTAwMTg1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDMzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAzMzpcXHRcXG4zMDM0OlxcdHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4zMDM1OlxcdHtcXG4zMDM2OlxcdFxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuMzAzNzpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjMwMzg6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuMzAzOTpcXHRcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4zMDQwOlxcdFxcbjMwNDE6XFx0XFx0Lyogbm93IGNoZWNrIHRoYXQgYWxsIGp1bXBzIGFyZSB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZyAqL1xcbjMwNDI6XFx0XFx0c3VicHJvZ19zdGFydCA9IHN1YnByb2dbY3VyX3N1YnByb2ddLnN0YXJ0O1xcbjMwNDM6XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzA0NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKykge1xcbjMwNDU6XFx0XFx0XFx0dTggY29kZSA9IGluc25baV0uY29kZTtcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0XFx0XFx0aWYgKEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QIFxcdTAwMjZcXHUwMDI2IEJQRl9DTEFTUyhjb2RlKSAhPSBCUEZfSk1QMzIpXFxuMzA0ODpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMzA0OTpcXHRcXHRcXHRpZiAoQlBGX09QKGNvZGUpID09IEJQRl9DQUxMKVxcbjMwNTA6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjMwNTE6XFx0XFx0XFx0aWYgKEJQRl9PUChjb2RlKSA9PSBCUEZfRVhJVCkge1xcbjMwNTI6XFx0XFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uZXhpdF9pZHggPSBpO1xcbjMwNTM6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjMwNTQ6XFx0XFx0XFx0fVxcbjMwNTU6XFx0XFx0XFx0b2ZmID0gaSArIGJwZl9qbXBfb2Zmc2V0KFxcdTAwMjZpbnNuW2ldKSArIDE7XFxuMzA1NjpcXHRcXHRcXHRpZiAob2ZmIFxcdTAwM2Mgc3VicHJvZ19zdGFydCB8fCBvZmYgXFx1MDAzZT0gc3VicHJvZ19lbmQpIHtcXG4zMDU3OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwianVtcCBvdXQgb2YgcmFuZ2UgZnJvbSBpbnNuICVkIHRvICVkXFxcXG5cXFwiLCBpLCBvZmYpO1xcbjMwNTg6XFx0XFx0XFx0XFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXFxuMzA1OTpcXHRcXHRcXHRcXHRcXHRlbnYsIGksIFxcXCJqdW1wIG91dCBvZiByYW5nZVxcXCIsXFxuMzA2MDpcXHRcXHRcXHRcXHRcXHRcXFwiS2VlcCBicmFuY2ggdGFyZ2V0cyB3aXRoaW4gdGhlIHNhbWUgc3VicHJvZ3JhbSwgb3IgdXNlIGFuIGV4cGxpY2l0IHN1YnByb2dyYW0gY2FsbC5cXFwiLFxcbjMwNjE6XFx0XFx0XFx0XFx0XFx0XFxcIkluc3RydWN0aW9uICVkIGp1bXBzIHRvIGluc3RydWN0aW9uICVkLCBidXQgc3VicHJvZ3JhbSAlZCBvbmx5IGNvbnRhaW5zIGluc3RydWN0aW9ucyAlZCB0aHJvdWdoICVkLiBcXFwiXFxuMzA2MjpcXHRcXHRcXHRcXHRcXHRcXFwiQSBicmFuY2ggdGFyZ2V0IG11c3Qgc3RheSBpbnNpZGUgdGhlIHNhbWUgc3VicHJvZ3JhbS5cXFwiLFxcbjMwNjM6XFx0XFx0XFx0XFx0XFx0aSwgb2ZmLCBjdXJfc3VicHJvZywgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQgLSAxKTtcXG4zMDY0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNjU6XFx0XFx0XFx0fVxcbjMwNjY6XFx0bmV4dDpcXG4zMDY3OlxcdFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbjMwNjg6XFx0XFx0XFx0XFx0LypcXG4zMDY5OlxcdFxcdFxcdFxcdCAqIFRvIGF2b2lkIGZhbGwtdGhyb3VnaCBmcm9tIG9uZSBzdWJwcm9nIGludG8gYW5vdGhlcixcXG4zMDcwOlxcdFxcdFxcdFxcdCAqIHRoZSBsYXN0IGluc24gb2YgdGhlIHN1YnByb2cgc2hvdWxkIGJlIGVpdGhlciBleGl0XFxuMzA3MTpcXHRcXHRcXHRcXHQgKiBvciB1bmNvbmRpdGlvbmFsIGp1bXAgYmFjayBvciBicGZfdGhyb3cgY2FsbC5cXG4zMDcyOlxcdFxcdFxcdFxcdCAqL1xcbjMwNzM6XFx0XFx0XFx0XFx0aWYgKGNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkgXFx1MDAyNlxcdTAwMjZcXG4zMDc0OlxcdFxcdFxcdFxcdCAgICBjb2RlICE9IChCUEZfSk1QMzIgfCBCUEZfSkEpIFxcdTAwMjZcXHUwMDI2XFxuMzA3NTpcXHRcXHRcXHRcXHQgICAgY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9KQSkpIHtcXG4zMDc2OlxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwibGFzdCBpbnNuIGlzIG5vdCBhbiBleGl0IG9yIGptcFxcXFxuXFxcIik7XFxuMzA3NzpcXHRcXHRcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4zMDc4OlxcdFxcdFxcdFxcdFxcdFxcdGVudiwgaSwgXFxcInN1YnByb2dyYW0gY2FuIGZhbGwgdGhyb3VnaFxcXCIsXFxuMzA3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiRW5kIGVhY2ggc3VicHJvZ3JhbSB3aXRoIGFuIGV4aXQgb3IgYW4gZXhwbGljaXQganVtcCB0aGF0IGtlZXBzIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIHN1YnByb2dyYW0uXFxcIixcXG4zMDgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJTdWJwcm9ncmFtICVkIHJlYWNoZXMgaXRzIGxhc3QgaW5zdHJ1Y3Rpb24gJWQgd2l0aG91dCBhbiBleGl0IG9yIGp1bXAsIHNvIGNvbnRyb2wgY291bGQgY29udGludWUgaW50byB0aGUgbmV4dCBzdWJwcm9ncmFtLlxcXCIsXFxuMzA4MTpcXHRcXHRcXHRcXHRcXHRcXHRjdXJfc3VicHJvZywgaSk7XFxuMzA4MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDgzOlxcdFxcdFxcdFxcdH1cXG4zMDg0OlxcdFxcdFxcdFxcdHN1YnByb2dfc3RhcnQgPSBzdWJwcm9nX2VuZDtcXG4zMDg1OlxcdFxcdFxcdFxcdGN1cl9zdWJwcm9nKys7XFxuMzA4NjpcXHRcXHRcXHRcXHRpZiAoY3VyX3N1YnByb2cgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250KVxcbjMwODc6XFx0XFx0XFx0XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzA4ODpcXHRcXHRcXHR9XFxuMzA4OTpcXHRcXHR9XFxuMzA5MDpcXHRcXHRyZXR1cm4gMDtcXG4zMDkxOlxcdH1cXG4zMDkyOlxcdFxcbjMwOTM6XFx0LypcXG4zMDk0OlxcdCAqIFNvcnQgc3VicHJvZ3MgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgc28gdGhhdCBsZWFmIHN1YnByb2dzIGNvbWUgZmlyc3QgYW5kXFxuMzA5NTpcXHQgKiB0aGVpciBjYWxsZXJzIGNvbWUgbGF0ZXIuIFRoaXMgaXMgYSBERlMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIGNhbGxcXG4zMDk2OlxcdCAqIGdyYXBoLiBTY2FuIG9ubHkgcmVhY2hhYmxlIGluc3RydWN0aW9ucyAodGhvc2UgaW4gdGhlIGNvbXB1dGVkIHBvc3RvcmRlcikgb2ZcXG4zMDk3OlxcdCAqIHRoZSBjdXJyZW50IHN1YnByb2cgdG8gZGlzY292ZXIgY2FsbGVlcyAoZGlyZWN0IHN1YnByb2dzIGFuZCBzeW5jXFxuMzA5ODpcXHQgKiBjYWxsYmFja3MpLlxcbjMwOTk6XFx0ICovXFxuMzEwMDpcXHRzdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMxMDE6XFx0e1xcbjMxMDI6XFx0XFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnNpID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm87XFxuMzEwMzpcXHRcXHRpbnQgKmluc25fcG9zdG9yZGVyID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XFxuMzEwNDpcXHRcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4zMTA1OlxcdFxcdGludCBjbnQgPSBlbnYtXFx1MDAzZXN1YnByb2dfY250O1xcbjMxMDY6XFx0XFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xcbjMxMDc6XFx0XFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcXG4zMTA4OlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjMxMDk6XFx0XFx0dTggKmNvbG9yID0gTlVMTDtcXG4zMTEwOlxcdFxcbjMxMTE6XFx0XFx0Y29sb3IgPSBrdnphbGxvY19vYmpzKCpjb2xvciwgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjMxMTI6XFx0XFx0ZGZzX3N0YWNrID0ga3ZtYWxsb2Nfb2JqcygqZGZzX3N0YWNrLCBjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMzExMzpcXHRcXHRpZiAoIWNvbG9yIHx8ICFkZnNfc3RhY2spIHtcXG4zMTE0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMzExNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTE2OlxcdFxcdH1cXG4zMTE3OlxcdFxcbjMxMTg6XFx0XFx0LypcXG4zMTE5OlxcdFxcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cXG4zMTIwOlxcdFxcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cXG4zMTIxOlxcdFxcdCAqL1xcbjMxMjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuMzEyMzpcXHRcXHRcXHRpZiAoY29sb3JbaV0pXFxuMzEyNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMTI1OlxcdFxcdFxcdGNvbG9yW2ldID0gMTtcXG4zMTI2OlxcdFxcdFxcdGRmc19zdGFja1t0b3ArK10gPSBpO1xcbjMxMjc6XFx0XFxuMzEyODpcXHRcXHRcXHR3aGlsZSAodG9wIFxcdTAwM2UgMCkge1xcbjMxMjk6XFx0XFx0XFx0XFx0aW50IGN1ciA9IGRmc19zdGFja1t0b3AgLSAxXTtcXG4zMTMwOlxcdFxcdFxcdFxcdGludCBwb19zdGFydCA9IHNpW2N1cl0ucG9zdG9yZGVyX3N0YXJ0O1xcbjMxMzE6XFx0XFx0XFx0XFx0aW50IHBvX2VuZCA9IHNpW2N1ciArIDFdLnBvc3RvcmRlcl9zdGFydDtcXG4zMTMyOlxcdFxcdFxcdFxcdGJvb2wgcHVzaGVkID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAyOjE0OjI2Ljc0NjUxODUzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQzNzIzNDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1bmN0aW9uYWwgSW1wYWN0KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgYSBCUEYgdmVyaWZpZXIgcGF0Y2ggdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYmFzZWQgb24gdGhlIGRpZmYsIGlzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IGFib3V0IGRpYWdub3N0aWNzIGFuZCBlcnJvciByZXBvcnRpbmcsIHdpdGggc29tZSBjb2RlIHJlb3JnYW5pemF0aW9uIHRvIHN1cHBvcnQgdGhpcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LlxuXG5GaXJzdCwgdGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVvcmRlcmluZyBgY2hlY2tfc3VicHJvZ3NgICphZnRlciogYGJwZl9jaGVja19idGZfaW5mb2AuICBgY2hlY2tfc3VicHJvZ3NgIHZhbGlkYXRlcyBqdW1wIGJvdW5kYXJpZXMgd2l0aGluIHN1YnByb2dyYW1zLCB3aGlsZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCB1c2VzIEJURiBpbmZvcm1hdGlvbiB0byBlbnN1cmUgY29ycmVjdG5lc3MuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHJlb3JkZXJpbmcgKmNoYW5nZXMqIGhvdyB2YWxpZCBwcm9ncmFtcyBhcmUgdHJlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgKmludHJvZHVjZSogbmV3IGNoZWNrcyB3aXRoaW4gYGJwZl9jaGVja19idGZfaW5mb2AsIGl0J3MgcHJpbWFyaWx5IGVuc3VyaW5nIHRoYXQgQlRGIGluZm9ybWF0aW9uIGFsaWducyB3aXRoIHN1YnByb2dyYW0gZGVmaW5pdGlvbnMgZGlzY292ZXJlZCBpbiBgYWRkX3N1YnByb2dzYCwgd2hpY2ggaW4gdHVybiBpcyBiYXNlZCBvbiBgQ0FMTGAgaW5zdHJ1Y3Rpb25zLiBUaGVyZWZvcmUsIGFzc3VtaW5nIHRoZSBCVEYgbWV0YWRhdGEgcmVtYWlucyBjb25zaXN0ZW50IGFuZCB0aGUgcmVvcmRlcmluZyBkb2Vzbid0IGV4cG9zZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyByZWFkL2ludGVycHJldGVkLCB0aGlzIHJlb3JkZXJpbmcgc2hvdWxkbid0IGFmZmVjdCB0aGUgYWNjZXB0YW5jZSBvZiB2YWxpZCBwcm9ncmFtcy4gSSdtIGZvY3VzaW5nIG9uIFwiZG9lc24ndCBhZmZlY3QgdGhlIGFjY2VwdGFuY2Ugb2YgKnZhbGlkKiBwcm9ncmFtc1wiLCBhcyB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBkaWFnbm9zdGljcyBtaWdodCBpbmNyZWFzZSB0aGUgcmVqZWN0aW9uIG9mICppbnZhbGlkKiBwcm9ncmFtcyBvciwgbW9yZSBsaWtlbHksIHByb3ZpZGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciByZWplY3RlZCAqaW52YWxpZCogcHJvZ3JhbXMuXG5cbk5leHQsIEkgc2VlIHNldmVyYWwgZGlhZ25vc3RpYyBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGVzZSBhcHBlYXIgdG8gYmUgcmVmaW5lbWVudHMgdG8gZXJyb3IgbWVzc2FnZXMgZm9yIHNwZWNpZmljIGtmdW5jIGFyZ3VtZW50IGNoZWNrcy4gVGhpcyBpcyBiYXNpY2FsbHkgbG9nZ2luZyBhbmQgZG9lc24ndCBjaGFuZ2Ugd2hhdCBpcyBhbmQgaXNuJ3QgYWNjZXB0ZWQgYXMgdmFsaWQgQlBGIGNvZGUuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgb3Igc3BlY2lmaWMgYWJvdXQgKndoeSogYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGlzIGZhaWxpbmcgdmFsaWRhdGlvbi5cblxuSSdtIGFsc28gc2VlaW5nIGltcHJvdmVtZW50cyB0byB0aGUgZXJyb3IgbWVzc2FnZXMgYXJvdW5kIHNsZWVwYWJsZSBrZnVuYyBjYWxscyBpbiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHRocm93aW5nIGFuIGAtRUFDQ0VTYCBlcnJvciBpbiBtdWx0aXBsZSBwbGFjZXMgZm9yIHZhcmlvdXMgc2NlbmFyaW9zIChhIHByb2dyYW0gdGhhdCB3YXNuJ3Qgc2xlZXBhYmxlIGNhbGxpbmcgYSBzbGVlcGFibGUga2Z1bmMsIGEgcHJvZ3JhbSBjYWxsaW5nIGl0IGZyb20gaW5zaWRlIGFuIFJDVSByZWFkIGxvY2ssIGV0Yy4pLiBUaGVzZSBjaGFuZ2VzIGNvbnNvbGlkYXRlIHRoZSBjaGVja3MgYXJvdW5kIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCB0byBoYW5kbGUgYWxsIHRob3NlIHNpdHVhdGlvbnMgaW4gb25lIHBsYWNlLiBJIGR1ZyBpbiBhbmQgdmVyaWZpZWQgdGhhdCB0aGUgYmVoYXZpb3IgcmVtYWlucyB0aGUgc2FtZTogdGhlIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZC4gTm93IGl0IGlzIGp1c3QgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBzb21lIGNoZWNrcyBhcmUgc2tpcHBlZCB0aGF0IGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBwcm9ncmFtIGlzIGJlaW5nIHJlamVjdGVkIGFueXdheS4gVGhlICpvcmRlciogb2YgZXJyb3IgcmVwb3J0aW5nICppcyogY2hhbmdlZCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgcmVmaW5lZCB0byBzdWdnZXN0IGhvdyB0byBmaXggdGhlIHByb2JsZW0gbW9yZSBjbGVhcmx5LiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHRoZSBhY2NlcHRhbmNlIG9mIHZhbGlkIHByb2dyYW1zLlxuXG5JIHdlbnQgYmFjayBhbmQgY2hlY2tlZCBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgIGJlY2F1c2UgaXQgd2FzIG5ldyBpbiB0aGUgZGlmZi4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYGhhc19sZF9hYnNgIGZvciBlYWNoIHN1YnByb2dyYW0uIFRoaXMgaXMgcmVxdWlyZWQgYnkgYGNoZWNrX2J0Zl9mdW5jYCBzbyB0aGF0IGl0IGRvZXNuJ3QgYWxsb3cgTERfQUJTIGluc3RydWN0aW9ucyBpbiBmdW5jdGlvbnMgdGhhdCBkb24ndCByZXR1cm4gYW4gaW50LiBUaGUgbmV3IGZ1bmN0aW9uIGlzICpleGFjdGx5KiB0aGUgc2FtZSBsb2dpYyBhcyB3aGF0IHdhcyBpbiBgY2hlY2tfc3VicHJvZ3NgIG9yaWdpbmFsbHkuIEl0cyBwdXJwb3NlIGlzIHRvIHByZS1jYWxjdWxhdGUgYGhhc19sZF9hYnNgIGJlZm9yZSBgYnBmX2NoZWNrX2J0Zl9pbmZvYCBpcyBydW4gdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSByZW9yZGVyaW5nLlxuXG5CYXNlZCBvbiBhbGwgdGhpcywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IG9mIHRoZSBmdW5kYW1lbnRhbCBjaGVja3MgdGhhdCAqd291bGQgYWxsb3cqIHZhbGlkIHByb2dyYW1zIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlamVjdGVkLCBvciAqcmVqZWN0KiBwcm9ncmFtcyB0aGF0IHdlcmUgcHJldmlvdXNseSB2YWxpZC4gQWxsIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGZvciBpbXByb3ZlZCBkaWFnbm9zdGljIG1lc3NhZ2luZyBhbmQgaW1wcm92ZWQgY29kZSBzdHJ1Y3R1cmUgdG8gZW5zdXJlIHRoYXQgYmV0dGVyIGVycm9yIG1lc3NhZ2luZyBjYW4gYmUgcHJvdmlkZWQuIFRoaXMgcGF0Y2ggaXMgdGhlcmVmb3JlIGFib3V0IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZVwiLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDo0OC4xODM3NTU1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMxNDk0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzX3RhaWxfY2FsbCA9IHRydWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTMwMDY9c3RhdGljIHZvaWQgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE5LVxcdFxcdCAgICBpbnNuW2ldLmltbSA9PSBCUEZfRlVOQ190YWlsX2NhbGwpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzAyMDpcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS5oYXNfdGFpbF9jYWxsID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzAyMS1cXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6NDkuNDk2OTA4NTE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjgyMjYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGhhc190YWlsX2NhbGxgIEZsYWcgaW4gQlBGIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIHJlYWxpemVkIEkgbWlzc2VkIHNvbWV0aGluZy4gSSB0aG91Z2h0IGBoYXNfdGFpbF9jYWxsYCB3YXMgcG9wdWxhdGVkIHdpdGhpbiBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgLiBCdXQgaG9sZCBvbi4uLiB0aGUgY29kZSBkaWZmIGZvciBgZmluZF9zdWJwcm9nX3Byb3BlcnRpZXNgICpkb2Vzbid0KiBhY3R1YWxseSBzaG93IGl0IGJlaW5nIHNldCB0aGVyZSEgSSB3YXMgc28gc3VyZSBJIGhhZCBzZWVuIHRoYXQgZmxhZyBiZWluZyBwb3B1bGF0ZWQgZHVyaW5nIHRoYXQgZnVuY3Rpb24uXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaC4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgZm9yIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AgZXhwbGljaXRseSBzaG93cyBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGhhc190YWlsX2NhbGxgLiBUaGlzIGlzIHN0cmFuZ2UuXG5cbk5vdyBJIGFtIGN1cmlvdXMuIFdoZXJlIGlzIGBoYXNfdGFpbF9jYWxsYCBhY3R1YWxseSBiZWluZyBzZXQ/IFRpbWUgdG8gbG9vayBhdCB0aGUgcmVhbCBzb3VyY2UgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB3b3JraW5nLiBJJ2xsIG5lZWQgdG8gZ28gdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDMwMjAgYW5kIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTQ6NTQuMzI1MTM5MDA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwNjpcXHRzdGF0aWMgdm9pZCBmaW5kX3N1YnByb2dfcHJvcGVydGllcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMwMDc6XFx0e1xcbjMwMDg6XFx0XFx0aW50IGksIHN1YnByb2dfZW5kLCBjdXJfc3VicHJvZyA9IDA7XFxuMzAwOTpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjMwMTA6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuMzAxMTpcXHRcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4zMDEyOlxcdFxcbjMwMTM6XFx0XFx0c3VicHJvZ19lbmQgPSBzdWJwcm9nW2N1cl9zdWJwcm9nICsgMV0uc3RhcnQ7XFxuMzAxNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKykge1xcbjMwMTU6XFx0XFx0XFx0dTggY29kZSA9IGluc25baV0uY29kZTtcXG4zMDE2OlxcdFxcbjMwMTc6XFx0XFx0XFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXFx1MDAyNlxcdTAwMjZcXG4zMDE4OlxcdFxcdFxcdCAgICBpbnNuW2ldLnNyY19yZWcgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjMwMTk6XFx0XFx0XFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xcbjMwMjA6XFx0XFx0XFx0XFx0c3VicHJvZ1tjdXJfc3VicHJvZ10uaGFzX3RhaWxfY2FsbCA9IHRydWU7XFxuMzAyMTpcXHRcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS50YWlsX2NhbGxfcmVhY2hhYmxlID0gdHJ1ZTtcXG4zMDIyOlxcdFxcdFxcdH1cXG4zMDIzOlxcdFxcdFxcdGlmIChCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2XFxuMzAyNDpcXHRcXHRcXHQgICAgKEJQRl9NT0RFKGNvZGUpID09IEJQRl9BQlMgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX0lORCkpXFxuMzAyNTpcXHRcXHRcXHRcXHRzdWJwcm9nW2N1cl9zdWJwcm9nXS5oYXNfbGRfYWJzID0gdHJ1ZTtcXG4zMDI2OlxcdFxcdFxcdGlmIChpID09IHN1YnByb2dfZW5kIC0gMSkge1xcbjMwMjc6XFx0XFx0XFx0XFx0Y3VyX3N1YnByb2crKztcXG4zMDI4OlxcdFxcdFxcdFxcdGlmIChjdXJfc3VicHJvZyBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQpXFxuMzAyOTpcXHRcXHRcXHRcXHRcXHRzdWJwcm9nX2VuZCA9IHN1YnByb2dbY3VyX3N1YnByb2cgKyAxXS5zdGFydDtcXG4zMDMwOlxcdFxcdFxcdH1cXG4zMDMxOlxcdFxcdH1cXG4zMDMyOlxcdH1cXG4zMDMzOlxcdFxcbjMwMzQ6XFx0c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjMwMzU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMjoxNDo1NC4zMjYwMDkzNTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ3Mzk0ODQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aHJvd24gb2ZmIGEgYml0LiBJIHRob3VnaHQgdGhlIGBoYXNfdGFpbF9jYWxsYCBjaGVjayB3YXMgbWlzc2luZywgYnV0IG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgcmVmYWN0b3Jpbmcgc29tZSBleGlzdGluZyBjb2RlLiBUaGUga2V5IGlzIHRvIHNlZSB0aGF0IHRoZSBgaGFzX3RhaWxfY2FsbGAgcGFydCB3YXMgKmFscmVhZHkqIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIGBjaGVja19zdWJwcm9nc2AgZnVuY3Rpb24gYW5kIHNpbXBseSBtb3ZlZCBhbG9uZyB3aXRoIGBoYXNfbGRfYWJzYCBkdXJpbmcgdGhlIHJlZmFjdG9yIHRvIGBmaW5kX3N1YnByb2dfcHJvcGVydGllc2AuIEl0IHdhc24ndCBhY3R1YWxseSBhIG5ldyBhZGRpdGlvbi4gSSBtaXNzZWQgaXQgYXQgZmlyc3QgYmVjYXVzZSBpdCB3YXNuJ3QgZXhwbGljaXRseSBzaG93biBpbiB0aGUgZGlmZiwgYW5kIHdhcyBzaW1wbHkgcGFydCBvZiB0aGUgbG9vcC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZSwgdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBhYm91dCBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJ3MgZGlhZ25vc3RpY3MuIFRoZSBjaGFuZ2VzIGluIGBicGZfY2hlY2tgIGFyZSBqdXN0IGFib3V0IHJlb3JkZXJpbmcgY2hlY2tzIGFuZCBpbiBgaW5fc2xlZXBhYmxlX2NvbnRleHRgIGlzIGFib3V0IHRoZSBlcnJvciByZXBvcnRpbmcgcGF0aCwgYW5kIGBicGZfZGlhZ18qYCBhcmUgcHVyZWx5IGNvc21ldGljLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24gaXRzZWxmLiBWYWxpZCBwcm9ncmFtcyB3aWxsIHN0aWxsIHdvcmsgYXMgYmVmb3JlLCBhbmQgdGhlIHNldCBvZiBhY2NlcHRlZCBwcm9ncmFtcyBpcyB1bmNoYW5nZWQuIFRoaXMgaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlxuXG5UaGUgZm9jdXMgaGVyZSBpcyBlcnJvciBtZXNzYWdlIGNsYXJpdHkgYW5kIG9yZGVyLCB3aGljaCBpcyByZWFsbHkganVzdCBhbiBpbXByb3ZlbWVudCBpbiBkZWJ1Z2dpbmcsIHJhdGhlciB0aGFuIGZ1bmN0aW9uYWxpdHkuIFNvLCB0aGUgY2hhbmdlcyBoZXJlIGFyZSBlZmZlY3RpdmVseSBqdXN0IGxvZ2dpbmcvZXJyb3IgcmVwb3J0aW5nIGVuaGFuY2VtZW50cy4gTXkgdW5kZXJzdGFuZGluZyBvZiBmdXp6aW5nIGlzIHRoYXQgaXQncyBtZWFudCB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyBvciBidWdzLCBzdWNoIGFzIG1lbW9yeSBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBsb2dpYyBmbGF3cyBpbiAqZXhlY3V0aW9uKi5cblxuSSB3ZW50IGJhY2sgYW5kIHJldmlld2VkIHRoZSBwcm9tcHQsIGp1c3QgdG8gZG91YmxlLWNoZWNrLiBJdCBzYWlkIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZXJlIGFyZTpcbiogRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudCBjaGFuZ2VzXG4qIExvZ2dpbmcgb3IgdHJhY2Vwb2ludCBjaGFuZ2VzXG4qIE51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvIGNoYW5nZXMgdGhhdCAqZG9uJ3QqIGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuXG5JbiB0aGlzIGNhc2UsIHRoZSB2ZXJpZmllciBkaWFnbm9zdGljcyBhcmUgZXNzZW50aWFsbHkgbG9nZ2luZy9lcnJvciByZXBvcnRpbmcuIENoYW5naW5nIHRoZSAqdGV4dCogb2YgYW4gZXJyb3IgbWVzc2FnZSBvciB0aGUgb3JkZXIgaW4gd2hpY2ggdHdvIHZhbGlkYXRpb24gc3RlcHMgYXJlIHBlcmZvcm1lZCB3aGVuIGJvdGggbXVzdCBwYXNzIGFueXdheSAocmVnYXJkbGVzcyBvZiBvcmRlcikgZG9lc24ndCBjcmVhdGUgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJpY2F0ZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emluZy4gVGhlcmVmb3JlLCBubyBuZXcgYXR0YWNrIHN1cmZhY2UuXG5cblRodXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEzOCwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTU6MDMuNzk5OTYwMDM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWNzLiBJdCB1cGRhdGVzIGVycm9yIG1lc3NhZ2VzLCBhZGRzIGhpbnRzLCBhbmQgcmVvcmRlcnMgdGhlIEJURiB2YWxpZGF0aW9uIGFuZCBzdWJwcm9ncmFtIGxheW91dCBjaGVja3MgdG8gcmVwb3J0IEJURi9DTy1SRSBlcnJvcnMgYmVmb3JlIHN1YnByb2dyYW0gbGF5b3V0IGVycm9ycy4gVGhlc2UgYXJlIHB1cmVseSBkZWNvcmF0aXZlIGFuZCBkaWFnbm9zdGljIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgdGhlIHNldCBvZiBhY2NlcHRlZCBCUEYgcHJvZ3JhbXMgb3IgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHZhbGlkIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDI6MTU6MDMuNzk5OTg1MzU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9x4f[1] Phase: Running StartedAt: 2026-08-16 02:15:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9x4f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-16 02:15:16 +0000 UTC FinishedAt: 2026-08-16 02:15:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}