LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKiAKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBCYXNlZCBvbiBtc2Jpb3MuYyBmcm9tIHJvbG8gMS42OgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogKEMpIENvcHlyaWdodCAyMDAwCiAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSAogKiBLbGVpbi1XaW50ZXJuaGVpbSwgR2VybWFueQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCgovKgogKiBEdXJpbmcgaXQncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgYmVmb3JlIHN3aXRjaGluZyB0byBwcm90ZWN0ZWQKICogbW9kZSwgdGhlIExpbnV4IEtlcm5lbCBtYWtlcyBhIGZldyBCSU9TIGNhbGxzLiBUaGlzIHdvbid0IHdvcmsKICogaWYgdGhlIGJvYXJkIGRvZXMgbm90IGhhdmUgYSBCSU9TLgogKgogKiBUaGlzIGlzIGEgdmVyeSBtaW5pbWFsaXNpYyBCSU9TIHRoYXQgc3VwcGxpZXMganVzdCBlbm91Z2gKICogZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRoZSBMaW51eCBLZXJuZWwgaGFwcHkuIEl0IGlzIE5PVAogKiBhIGdlbmVyYWwgcHVycG9zZSByZXBsYWNlbWVudCBmb3IgYSByZWFsIEJJT1MgISEKICovCgojZGVmaW5lIE9GRlNfRVMgICAgICAwCiNkZWZpbmUgT0ZGU19HUyAgICAgIDIKI2RlZmluZSBPRkZTX0RTICAgICAgNAojZGVmaW5lIE9GRlNfREkgICAgICA2CiNkZWZpbmUgT0ZGU19TSSAgICAgIDgKI2RlZmluZSBPRkZTX0JQICAgICAgMTAKI2RlZmluZSBPRkZTX1NQICAgICAgMTIKI2RlZmluZSBPRkZTX0JYICAgICAgMTQKI2RlZmluZSBPRkZTX0RYICAgICAgMTYKI2RlZmluZSBPRkZTX0NYICAgICAgMTgKI2RlZmluZSBPRkZTX0FYICAgICAgMjAKI2RlZmluZSBPRkZTX1ZFQ1RPUiAgMjIKI2RlZmluZSBPRkZTX0lQICAgICAgMjQKI2RlZmluZSBPRkZTX0NTICAgICAgMjYKI2RlZmluZSBPRkZTX0ZMQUdTICAgMjgKCiNkZWZpbmUgU0VHTUVOVCAgICAgIDB4NDAKI2RlZmluZSBTVEFDSwkgICAgIDB4ODAwICAJCQkvKiBzdGFjayBhdCAweDQwOjB4ODAwIC0+IDB4ODAwICovCgouc2VjdGlvbiAuYmlvcywgImF4IgouY29kZTE2Ci5vcmcgMAoKLmdsb2JsIHJtX2ludDAwCnJtX2ludDAwOgoJcHVzaHcJJDAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDAxCnJtX2ludDAxOgoJcHVzaHcJJDEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDAyCnJtX2ludDAyOgoJcHVzaHcJJDIKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDAzCnJtX2ludDAzOgoJcHVzaHcJJDMKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA0CnJtX2ludDA0OgoJcHVzaHcJJDQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA1CnJtX2ludDA1OgoJcHVzaHcJJDUKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA2CnJtX2ludDA2OgoJcHVzaHcJJDYKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA3CnJtX2ludDA3OgoJcHVzaHcJJDcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA4CnJtX2ludDA4OgoJcHVzaHcJJDgKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA5CnJtX2ludDA5OgoJcHVzaHcJJDkKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBhCnJtX2ludDBhOgoJcHVzaHcJJDEwCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwYgpybV9pbnQwYjoKCXB1c2h3CSQxMQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGMKcm1faW50MGM6CglwdXNodwkkMTIKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBkCnJtX2ludDBkOgoJcHVzaHcJJDEzCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwZQpybV9pbnQwZToKCXB1c2h3CSQxNAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGYKcm1faW50MGY6CglwdXNodwkkMTUKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEwCnJtX2ludDEwOgoJcHVzaHcJJDE2CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxMQpybV9pbnQxMToKCXB1c2h3CSQxNwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTIKcm1faW50MTI6CglwdXNodwkkMTgKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEzCnJtX2ludDEzOgoJcHVzaHcJJDE5CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNApybV9pbnQxNDoKCXB1c2h3CSQyMAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTUKcm1faW50MTU6CglwdXNodwkkMjEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE2CnJtX2ludDE2OgoJcHVzaHcJJDIyCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNwpybV9pbnQxNzoKCXB1c2h3CSQyMwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTgKcm1faW50MTg6CglwdXNodwkkMjQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE5CnJtX2ludDE5OgoJcHVzaHcJJDI1CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxYQpybV9pbnQxYToKCXB1c2h3CSQyNgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWIKcm1faW50MWI6CglwdXNodwkkMjcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFjCnJtX2ludDFjOgoJcHVzaHcJJDI4CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxZApybV9pbnQxZDoKCXB1c2h3CSQyOQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWUKcm1faW50MWU6CglwdXNodwkkMzAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFmCnJtX2ludDFmOgoJcHVzaHcJJDMxCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9kZWZfaW50CnJtX2RlZl9pbnQ6CglpcmV0CgogCgkvKgoJICogQWxsIGludGVycnVwdCBqdW1wdGFibGUgZW50cmllcyBqdW1wIHRvIGhlcmUKCSAqIGFmdGVyIHB1c2hpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IgbnVtYmVyIG9udG8gdGhlCgkgKiBzdGFjay4KCSAqLwphbnlfaW50ZXJydXB0MTY6CglwdXNoYQkJCQkJLyogc2F2ZSBnZW5lcmFsIHJlZ2lzdGVycyAqLwoJcHVzaHcJJWRzCQkJCS8qIHNhdmUgc29tZSBzZWdtZW50cyAgICAgKi8KCXB1c2h3CSVncwoJcHVzaHcJJWVzCglwdXNodwklc3MJCQkJLyogc2F2ZSBjYWxsZXJzIHN0YWNrIHNlZ21lbnQgLi4gKi8KCXBvcHcJJWdzCQkJCS8qIC4uLiBpbiBncyAqLwoJbW92dwkkU0VHTUVOVCwlYXgJCQkvKiBzZXR1cCBteSBzZWdtZW50cyAqLwoJbW92dwklYXgsJWRzCgltb3Z3CSVheCwlZXMKCW1vdncJJWF4LCVzcwoJbW92dwklc3AsJWJwCgltb3Z3CSRTVEFDSywlc3AJCQkvKiBzZXR1cCBCSU9TIHN0YWNrcG9pbnRlciAqLwoKZ3MJbW92dwlPRkZTX1ZFQ1RPUiglYnApLCAlYXgKCWNtcHcJJDB4MTAsICVheAoJamUJTGludF8xMGggICAgICAgICAKCWNtcHcJJDB4MTEsICVheAoJamUJTGludF8xMWgKCWNtcHcJJDB4MTMsICVheAoJamUJTGludF8xM2gKCWNtcHcJJDB4MTUsICVheAoJamUJTGludF8xNWgKCWNtcHcJJDB4MTYsICVheAoJamUJTGludF8xNmgKCW1vdncJJDB4ZmZmZiwgJWF4CglqbXAJTG91dApMaW50XzEwaDoJCQkJCS8qIFZHQSBCSU9TIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTBoCglqbXAJTG91dApMaW50XzExaDoJCgljYWxsCWJpb3NfMTFoCglqbXAJTG91dApMaW50XzEzaDoJCQkJCS8qIEJJT1MgZGlzayBzZXJ2aWNlcyAqLwoJY2FsbAliaW9zXzEzaAoJam1wCUxvdXQKTGludF8xNWg6CQkJCQkvKiBNaXNjLiBCSU9TIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTVoCglqbXAJTG91dApMaW50XzE2aDoJCQkJCS8qIGtleWJvYXJkIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTZoCglqbXAJTG91dApMb3V0OgkKCWNtcHcJJDAsICVheAoJamUJTGhhbmRlbGVkCgkKCS8qIEluc2VydCBjb2RlIGZvciB1bmhhbmRlbGVkIElOVHMgaGVyZS4KCSAqCgkgKiBST0xPIHByaW50cyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgCgkgKiAod2UgY291bGQgZG8gdGhhdCBidXQgdGhlbiB3ZSdyZSBpbiAxNmJpdCBtb2RlCgkgKiBzbyB3ZSdsbCBoYXZlIHRvIGdldCBiYWNrIGludG8gMzJiaXQgbW9kZQoJICogdG8gdXNlIHRoZSBjb25zb2xlIEkvTyByb3V0aW5lcyAoaWYgd2UgZG8gdGhpcwoJICogd2Ugc2h1bHMgbWFrZSBpbnQgMHgxMCBhbmQgaW50IDB4MTYgd29yayBhcyB3ZWxsKSkKCSAqLwpMaGFuZGVsZWQ6CgoJcHVzaHcJJWdzCQkJCS8qIHJlc3RvcmUgY2FsbGVycyBzdGFjayBzZWdtZW50ICovCglwb3B3CSVzcwoJbW92dwklYnAsJXNwCQkJCS8qIHJlc3RvcmUgc3RhY2twb2ludGVyICovCgoJcG9wdwklZXMJCQkJLyogcmVzdG9yZSBzZWdtZW50IHNlbGVjdG9ycyAqLwoJcG9wdwklZ3MKCXBvcHcJJWRzCgkKCXBvcGEJCQkJCS8qIHJlc3RvcmUgR1AgcmVnaXN0ZXJzICovCglhZGR3CSQyLCVzcAkJCQkvKiBkdW1wIHZlY3RvciBudW1iZXIgKi8KCWlyZXQJCQkJCS8qIHJldHVybiBmcm9tIGludGVycnVwdCAqLwoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyAJaW50ZXJydXB0IDEwaCAtLSBWR0Egc2VydmljZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xMGg6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCXNocncJJDgsICVheAoJY21wdwkkMHgzLCAlYXgKCWplCUxjdXJfcG9zCgljbXB3CSQweGYsICVheAoJamUJTHZpZF9zdGF0ZQoJY21wdwkkMHgxMiwgJWF4CglqZQlMdmlkX2NmZwoJbW92dwkkMHhmZmZmLCAlYXgKCXJldApMY3VyX3BvczoJCQkJCS8qIFJlYWQgQ3Vyc29yIFBvc2l0aW9uIGFuZCBTaXplICovCmdzCW1vdncJJDAsIE9GRlNfQ1goJWJwKQpncwltb3Z3CSQwLCBPRkZTX0RYKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldApMdmlkX3N0YXRlOgkJCQkJLyogR2V0IFZpZGVvIFN0YXRlICovCmdzCW1vdncJJCg4MCA8PCA4fDB4MDMpLCBPRkZTX0FYKCVicCkJLyogODAgY29sdW1ucywgODB4MjUsIDE2IGNvbG9ycyAqLwpncwltb3Z3CSQwLCBPRkZTX0JYKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldApMdmlkX2NmZzoJLyogVmlkZW8gU3Vic3lzdGVtIENvbmZpZ3VyYXRpb24gKEVHQS9WR0EpICovCmdzCW1vdncJJDB4MTAsIE9GRlNfQlgoJWJwKQkJLyogaW5kaWNhdGUgQ0dBL01EQS9IR0EgKi8KCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyBpbnRlcnJ1cHQgMTFoIC0tIEVxdWlwbWVudCBkZXRlcm1pbmF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpiaW9zXzExaDoKCW1vdncJYmlvc19lcXVpcG1lbnQsICVheApncwltb3Z3CSVheCwgT0ZGU19BWCglYnApICAKCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyBpbnRlcnJ1cHQgMTNoIC0tIERpc2sgc2VydmljZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xM2g6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCXNocncJJDgsICVheAoJY21wdwkkMHgxNSwgJWF4CglqZQlMZnVuY18xNWgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGZ1bmNfMTVoOgkKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJYW5kdwkkMHhmZiwgJWF4CQkJLyogcmV0dXJuIEFIPTAtPmRyaXZlIG5vdCBwcmVzZW50ICovCmdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoJCgkKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxNWggLS0gTWlzY2VsbGFuZW91cyBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTVoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4YzAsICVheAoJamUJTGZ1bmNfYzBoCgljbXB3CSQweGU4LCAlYXgKCWplCUxmdW5jX2U4aAoJY21wdwkkMHg4OCwgJWF4CglqZQlMZnVuY184OGgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKCkxmdW5jX2MwaDogCQkJCQkvKiBSZXR1cm4gU3lzdGVtIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycyAoUFMyIG9ubHkpICovCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCW9ydwkkMSwgJWF4CQkJCS8qIHJldHVybiBjYXJyeSAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoJCkxmdW5jX2U4aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJYW5kdwkkMHhmZiwgJWF4CgljbXB3CSQxLCAlYXgKCWplCUxmdW5jX2U4MDFoCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCW9ydwkkMSwgJWF4CQkJCS8qIHJldHVybiBjYXJyeSAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoJCkxmdW5jX2U4MDFoOgkJCQkJLyogR2V0IG1lbW9yeSBzaXplIGZvciA+NjRNIENvbmZpZ3VyYXRpb25zICovCgltb3Z3CSRyYW1faW5fNjRrYl9jaHVua3MsICVheAoJY21wdwkkMjU2LCAlYXgKCWphCUxtb3JlX3RoYW5fMTZtYgoJc2hsdwkkNiwgJWF4CQkJCS8qIG11bHRpcGx5IGJ5IDY0ICovCQpncwltb3Z3CSVheCwgT0ZGU19BWCglYnApICAgCQkvKiByZXR1cm4gbWVtb3J5IHNpemUgaW4gMWtiIGNodW5rcyBpbiBBWCBhbmQgQ1ggKi8KZ3MJbW92dwklYXgsIE9GRlNfQ1goJWJwKQoJeG9ydwklYXgsICVheApncwltb3Z3CSVheCwgT0ZGU19CWCglYnApCQkvKiBzZXQgQlggYW5kIERYIHRvIDAqLwpncwltb3Z3CSVheCwgT0ZGU19EWCglYnApCQpncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCQpMbW9yZV90aGFuXzE2bWI6CglzdWJ3CSQweDEwMCwgJWF4CQkJLyogc3VidHJhY3QgMTZNQiAqLwkKCQpncwltb3Z3CSQweDNjMDAsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIDB4M2MwMCAoMTZNQi0zODRrKSBpbiBBWCBhbmQgQ1ggKi8KZ3MJbW92dwkkMHgzYzAwLCBPRkZTX0NYKCVicCkKZ3MJbW92dwklYXgsIE9GRlNfQlgoJWJwKQkJLyogc2V0IEJYIGFuZCBEWCB0byBudW1iZXIgb2YgNjRrYiBjaHVua3MgLSAyNTYgKi8KZ3MJbW92dwklYXgsIE9GRlNfRFgoJWJwKQkKCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKTGZ1bmNfODhoOgoJbW92dwlyYW1faW5fNjRrYl9jaHVua3MsICVheAoJc3VidwkkMTYsICVheAoJc2hsdwkkNiwgJWF4CgkKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIG51bWJlciBvZiBraWxvYnl0ZXMgaW4gYXggKi8KCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDE2aCAtLSBrZXlib2FyZCBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpiaW9zXzE2aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJc2hydwkkOCwgJWF4CgljbXB3CSQweDAzLCAlYXgKCWplCUxmdW5jXzAzaAoJbW92dwkkMHhmZmZmLCAlYXgKCXJldApMZnVuY18wM2g6Cgl4b3J3CSVheCwgJWF4CQkJLyogZG8gbm90aGluZyAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCglyZXQKCgouZ2xvYmwgcmFtX2luXzY0a2JfY2h1bmtzCnJhbV9pbl82NGtiX2NodW5rczoKCS53b3JkIAkwCgouZ2xvYmwgYmlvc19lcXVpcG1lbnQKYmlvc19lcXVpcG1lbnQ6Cgkud29yZCAJMAoK