LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCA8ZGFuaWVsQG9taWNyb24uc2U+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyoKICogQmFzZWQgb24gbXNiaW9zLmMgZnJvbSByb2xvIDEuNjoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIChDKSBDb3B5cmlnaHQgMjAwMAogKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zIEdtYkgKICogS2xlaW4tV2ludGVybmhlaW0sIEdlcm1hbnkKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwoKI2luY2x1ZGUgImJpb3MuaCIKCi8qCiAqIER1cmluZyBpdCdzIGluaXRpYWxpemF0aW9uIHBoYXNlLCBiZWZvcmUgc3dpdGNoaW5nIHRvIHByb3RlY3RlZAogKiBtb2RlLCB0aGUgTGludXggS2VybmVsIG1ha2VzIGEgZmV3IEJJT1MgY2FsbHMuIFRoaXMgd29uJ3Qgd29yawogKiBpZiB0aGUgYm9hcmQgZG9lcyBub3QgaGF2ZSBhIEJJT1MuCiAqCiAqIFRoaXMgaXMgYSB2ZXJ5IG1pbmltYWxpc2ljIEJJT1MgdGhhdCBzdXBwbGllcyBqdXN0IGVub3VnaAogKiBmdW5jdGlvbmFsaXR5IHRvIGtlZXAgdGhlIExpbnV4IEtlcm5lbCBoYXBweS4gSXQgaXMgTk9UCiAqIGEgZ2VuZXJhbCBwdXJwb3NlIHJlcGxhY2VtZW50IGZvciBhIHJlYWwgQklPUyAhIQogKi8KCi5zZWN0aW9uIC5iaW9zLCAiYXgiCi5jb2RlMTYKLm9yZyAwCgkvKiBhIGNhbGwgdG8gZjAwMDowIHNob3VsZCB3YXJtYm9vdCAqLwoJam1wCXJlYWxtb2RlX3Jlc2V0CgouZ2xvYmwgcm1faW50MDAKLmhpZGRlbiBybV9pbnQwMAoudHlwZSBybV9pbnQwMCwgQGZ1bmN0aW9uCnJtX2ludDAwOgoJcHVzaHcJJDAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDAxCi5oaWRkZW4gcm1faW50MDEKLnR5cGUgcm1faW50MDEsIEBmdW5jdGlvbgpybV9pbnQwMToKCXB1c2h3CSQxCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwMgouaGlkZGVuIHJtX2ludDAyCi50eXBlIHJtX2ludDAyLCBAZnVuY3Rpb24Kcm1faW50MDI6CglwdXNodwkkMgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDMKLmhpZGRlbiBybV9pbnQwMwoudHlwZSBybV9pbnQwMywgQGZ1bmN0aW9uCnJtX2ludDAzOgoJcHVzaHcJJDMKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA0Ci5oaWRkZW4gcm1faW50MDQKLnR5cGUgcm1faW50MDQsIEBmdW5jdGlvbgpybV9pbnQwNDoKCXB1c2h3CSQ0CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNQouaGlkZGVuIHJtX2ludDA1Ci50eXBlIHJtX2ludDA1LCBAZnVuY3Rpb24Kcm1faW50MDU6CglwdXNodwkkNQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDYKLmhpZGRlbiBybV9pbnQwNgoudHlwZSBybV9pbnQwNiwgQGZ1bmN0aW9uCnJtX2ludDA2OgoJcHVzaHcJJDYKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA3Ci5oaWRkZW4gcm1faW50MDcKLnR5cGUgcm1faW50MDcsIEBmdW5jdGlvbgpybV9pbnQwNzoKCXB1c2h3CSQ3CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwOAouaGlkZGVuIHJtX2ludDA4Ci50eXBlIHJtX2ludDA4LCBAZnVuY3Rpb24Kcm1faW50MDg6CglwdXNodwkkOAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDkKLmhpZGRlbiBybV9pbnQwOQoudHlwZSBybV9pbnQwOSwgQGZ1bmN0aW9uCnJtX2ludDA5OgoJcHVzaHcJJDkKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBhCi5oaWRkZW4gcm1faW50MGEKLnR5cGUgcm1faW50MGEsIEBmdW5jdGlvbgpybV9pbnQwYToKCXB1c2h3CSQxMAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGIKLmhpZGRlbiBybV9pbnQwYgoudHlwZSBybV9pbnQwYiwgQGZ1bmN0aW9uCnJtX2ludDBiOgoJcHVzaHcJJDExCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwYwouaGlkZGVuIHJtX2ludDBjCi50eXBlIHJtX2ludDBjLCBAZnVuY3Rpb24Kcm1faW50MGM6CglwdXNodwkkMTIKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBkCi5oaWRkZW4gcm1faW50MGQKLnR5cGUgcm1faW50MGQsIEBmdW5jdGlvbgpybV9pbnQwZDoKCXB1c2h3CSQxMwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGUKLmhpZGRlbiBybV9pbnQwZQoudHlwZSBybV9pbnQwZSwgQGZ1bmN0aW9uCnJtX2ludDBlOgoJcHVzaHcJJDE0CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwZgouaGlkZGVuIHJtX2ludDBmCi50eXBlIHJtX2ludDBmLCBAZnVuY3Rpb24Kcm1faW50MGY6CglwdXNodwkkMTUKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEwCi5oaWRkZW4gcm1faW50MTAKLnR5cGUgcm1faW50MTAsIEBmdW5jdGlvbgpybV9pbnQxMDoKCXB1c2h3CSQxNgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTEKLmhpZGRlbiBybV9pbnQxMQoudHlwZSBybV9pbnQxMSwgQGZ1bmN0aW9uCnJtX2ludDExOgoJcHVzaHcJJDE3CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxMgouaGlkZGVuIHJtX2ludDEyCi50eXBlIHJtX2ludDEyLCBAZnVuY3Rpb24Kcm1faW50MTI6CglwdXNodwkkMTgKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEzCi5oaWRkZW4gcm1faW50MTMKLnR5cGUgcm1faW50MTMsIEBmdW5jdGlvbgpybV9pbnQxMzoKCXB1c2h3CSQxOQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTQKLmhpZGRlbiBybV9pbnQxNAoudHlwZSBybV9pbnQxNCwgQGZ1bmN0aW9uCnJtX2ludDE0OgoJcHVzaHcJJDIwCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNQouaGlkZGVuIHJtX2ludDE1Ci50eXBlIHJtX2ludDE1LCBAZnVuY3Rpb24Kcm1faW50MTU6CglwdXNodwkkMjEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE2Ci5oaWRkZW4gcm1faW50MTYKLnR5cGUgcm1faW50MTYsIEBmdW5jdGlvbgpybV9pbnQxNjoKCXB1c2h3CSQyMgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTcKLmhpZGRlbiBybV9pbnQxNwoudHlwZSBybV9pbnQxNywgQGZ1bmN0aW9uCnJtX2ludDE3OgoJcHVzaHcJJDIzCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxOAouaGlkZGVuIHJtX2ludDE4Ci50eXBlIHJtX2ludDE4LCBAZnVuY3Rpb24Kcm1faW50MTg6CglwdXNodwkkMjQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE5Ci5oaWRkZW4gcm1faW50MTkKLnR5cGUgcm1faW50MTksIEBmdW5jdGlvbgpybV9pbnQxOToKCXB1c2h3CSQyNQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWEKLmhpZGRlbiBybV9pbnQxYQoudHlwZSBybV9pbnQxYSwgQGZ1bmN0aW9uCnJtX2ludDFhOgoJcHVzaHcJJDI2CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxYgouaGlkZGVuIHJtX2ludDFiCi50eXBlIHJtX2ludDFiLCBAZnVuY3Rpb24Kcm1faW50MWI6CglwdXNodwkkMjcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFjCi5oaWRkZW4gcm1faW50MWMKLnR5cGUgcm1faW50MWMsIEBmdW5jdGlvbgpybV9pbnQxYzoKCXB1c2h3CSQyOAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWQKLmhpZGRlbiBybV9pbnQxZAoudHlwZSBybV9pbnQxZCwgQGZ1bmN0aW9uCnJtX2ludDFkOgoJcHVzaHcJJDI5CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxZQouaGlkZGVuIHJtX2ludDFlCi50eXBlIHJtX2ludDFlLCBAZnVuY3Rpb24Kcm1faW50MWU6CglwdXNodwkkMzAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFmCi5oaWRkZW4gcm1faW50MWYKLnR5cGUgcm1faW50MWYsIEBmdW5jdGlvbgpybV9pbnQxZjoKCXB1c2h3CSQzMQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1fZGVmX2ludAouaGlkZGVuIHJtX2RlZl9pbnQKLnR5cGUgcm1fZGVmX2ludCwgQGZ1bmN0aW9uCnJtX2RlZl9pbnQ6CglpcmV0CgoKCS8qCgkgKiBBbGwgaW50ZXJydXB0IGp1bXB0YWJsZSBlbnRyaWVzIGp1bXAgdG8gaGVyZQoJICogYWZ0ZXIgcHVzaGluZyB0aGUgaW50ZXJydXB0IHZlY3RvciBudW1iZXIgb250byB0aGUKCSAqIHN0YWNrLgoJICovCmFueV9pbnRlcnJ1cHQxNjoKCU1BS0VfQklPU19TVEFDSwoKZ3MJbW92dwlPRkZTX1ZFQ1RPUiglYnApLCAlYXgKCWNtcHcJJDB4MTAsICVheAoJamUJTGludF8xMGgKCWNtcHcJJDB4MTEsICVheAoJamUJTGludF8xMWgKCWNtcHcJJDB4MTIsICVheAoJamUJTGludF8xMmgKCWNtcHcJJDB4MTMsICVheAoJamUJTGludF8xM2gKCWNtcHcJJDB4MTUsICVheAoJamUJTGludF8xNWgKCWNtcHcJJDB4MTYsICVheAoJamUJTGludF8xNmgKCWNtcHcJJDB4MWEsICVheAoJamUJTGludF8xYWgKCW1vdncJJDB4ZmZmZiwgJWF4CglqbXAJTG91dApMaW50XzEwaDoJCQkJCS8qIFZHQSBCSU9TIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTBoCglqbXAJTG91dApMaW50XzExaDoKCWNhbGwJYmlvc18xMWgKCWptcAlMb3V0CkxpbnRfMTJoOgoJY2FsbAliaW9zXzEyaAoJam1wCUxvdXQKTGludF8xM2g6CQkJCQkvKiBCSU9TIGRpc2sgc2VydmljZXMgKi8KCWNhbGwJYmlvc18xM2gKCWptcAlMb3V0CkxpbnRfMTVoOgkJCQkJLyogTWlzYy4gQklPUyBzZXJ2aWNlcyAqLwoJY2FsbAliaW9zXzE1aAoJam1wCUxvdXQKTGludF8xNmg6CQkJCQkvKiBrZXlib2FyZCBzZXJ2aWNlcyAqLwoJY2FsbAliaW9zXzE2aAoJam1wCUxvdXQKTGludF8xYWg6CQkJCQkvKiBQQ0kgYmlvcyAqLwoJY2FsbAliaW9zXzFhaAoJam1wCUxvdXQKTG91dDoKCWNtcHcJJDAsICVheAoJamUJTGhhbmRlbGVkCgoJLyogSW5zZXJ0IGNvZGUgZm9yIHVuaGFuZGVsZWQgSU5UcyBoZXJlLgoJICoKCSAqIFJPTE8gcHJpbnRzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZQoJICogKHdlIGNvdWxkIGRvIHRoYXQgYnV0IHRoZW4gd2UncmUgaW4gMTZiaXQgbW9kZQoJICogc28gd2UnbGwgaGF2ZSB0byBnZXQgYmFjayBpbnRvIDMyYml0IG1vZGUKCSAqIHRvIHVzZSB0aGUgY29uc29sZSBJL08gcm91dGluZXMgKGlmIHdlIGRvIHRoaXMKCSAqIHdlIHNodWxzIG1ha2UgaW50IDB4MTAgYW5kIGludCAweDE2IHdvcmsgYXMgd2VsbCkpCgkgKi8KTGhhbmRlbGVkOgoJUkVTVE9SRV9DQUxMRVJTX1NUQUNLCglhZGR3CSQyLCVzcAkJCQkvKiBkdW1wIHZlY3RvciBudW1iZXIgKi8KCWlyZXQJCQkJCS8qIHJldHVybiBmcm9tIGludGVycnVwdCAqLwoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUwlpbnRlcnJ1cHQgMTBoIC0tIFZHQSBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpiaW9zXzEwaDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJc2hydwkkOCwgJWF4CgljbXB3CSQweDMsICVheAoJamUJTGN1cl9wb3MKCWNtcHcJJDB4ZiwgJWF4CglqZQlMdmlkX3N0YXRlCgljbXB3CSQweDEyLCAlYXgKCWplCUx2aWRfY2ZnCgltb3Z3CSQweGZmZmYsICVheAoJcmV0CkxjdXJfcG9zOgkJCQkJLyogUmVhZCBDdXJzb3IgUG9zaXRpb24gYW5kIFNpemUgKi8KZ3MJbW92dwkkMCwgT0ZGU19DWCglYnApCmdzCW1vdncJJDAsIE9GRlNfRFgoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0Ckx2aWRfc3RhdGU6CQkJCQkvKiBHZXQgVmlkZW8gU3RhdGUgKi8KZ3MJbW92dwkkKDgwIDw8IDh8MHgwMyksIE9GRlNfQVgoJWJwKQkvKiA4MCBjb2x1bW5zLCA4MHgyNSwgMTYgY29sb3JzICovCmdzCW1vdncJJDAsIE9GRlNfQlgoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0Ckx2aWRfY2ZnOgkvKiBWaWRlbyBTdWJzeXN0ZW0gQ29uZmlndXJhdGlvbiAoRUdBL1ZHQSkgKi8KZ3MJbW92dwkkMHgxMCwgT0ZGU19CWCglYnApCQkvKiBpbmRpY2F0ZSBDR0EvTURBL0hHQSAqLwoJeG9ydwklYXgsICVheAoJcmV0CgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxMWggLS0gRXF1aXBtZW50IGRldGVybWluYXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCmJpb3NfMTFoOgpjcwltb3Z3CWJpb3NfZXF1aXBtZW50LCAlYXgKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TCWludGVycnVwdCAxMmggLS0gR2V0IE1lbW9yeSBTaXplCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTJoOgpjcwltb3Z3CXJhbV9pbl82NGtiX2NodW5rcywgJWF4CgljbXB3CSQweGEsICVheAoJamEJYjEyX21vcmVfdGhhbl82NDBrCglzaGx3CSQ2LCAlYXgKCWptcAliMTJfcmV0dXJuCmIxMl9tb3JlX3RoYW5fNjQwazoKCW1vdncJJDB4MjgwLCAlYXgKYjEyX3JldHVybjoKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIG51bWJlciBvZiBraWxvYnl0ZXMgaW4gYXggKi8KCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDEzaCAtLSBEaXNrIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTNoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4MTUsICVheAoJamUJTGZ1bmNfMTVoCgltb3Z3CSQweGZmZmYsICVheAoJcmV0CkxmdW5jXzE1aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJYW5kdwkkMHhmZiwgJWF4CQkJLyogcmV0dXJuIEFIPTAtPmRyaXZlIG5vdCBwcmVzZW50ICovCmdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxNWggLS0gTWlzY2VsbGFuZW91cyBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTVoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4YzAsICVheAoJamUJTGZ1bmNfYzBoCgljbXB3CSQweGU4LCAlYXgKCWplCUxmdW5jX2U4aAoJY21wdwkkMHg4OCwgJWF4CglqZQlMZnVuY184OGgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKCkxmdW5jX2MwaDoJCQkJCS8qIFJldHVybiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzIChQUzIgb25seSkgKi8KZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJb3J3CSQxLCAlYXgJCQkJLyogcmV0dXJuIGNhcnJ5IC0tIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgpMZnVuY19lOGg6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCWFuZHcJJDB4ZmYsICVheAoJY21wdwkkMSwgJWF4CglqZQlMZnVuY19lODAxaApncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglvcncJJDEsICVheAkJCQkvKiByZXR1cm4gY2FycnkgLS0gZnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCkxmdW5jX2U4MDFoOgkJCQkJLyogR2V0IG1lbW9yeSBzaXplIGZvciA+NjRNIENvbmZpZ3VyYXRpb25zICovCmNzCW1vdncJcmFtX2luXzY0a2JfY2h1bmtzLCAlYXgKCWNtcHcJJDB4MTAwLCAlYXgKCWphCWU4MDFfbW9yZV90aGFuXzE2bWIKCXNobHcJJDYsICVheAkJCQkvKiBtdWx0aXBseSBieSA2NCAqLwoJc3VidwkkMHg0MDAsICVheAkJCS8qIDFzdCBtZWcgZG9lcyBub3QgY291bnQgKi8KCmdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkJCS8qIHJldHVybiBtZW1vcnkgc2l6ZSBiZXR3ZWVuIDFNIGFuZCAxNk0gaW4gMWtiIGNodW5rcyBpbiBBWCBhbmQgQ1ggKi8KZ3MJbW92dwklYXgsIE9GRlNfQ1goJWJwKQpncwltb3Z3CSQwLCBPRkZTX0JYKCVicCkJCS8qIHNldCBCWCBhbmQgRFggdG8gMCovCmdzCW1vdncJJDAsIE9GRlNfRFgoJWJwKQpncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCmU4MDFfbW9yZV90aGFuXzE2bWI6CglzdWJ3CSQweDEwMCwgJWF4CQkJLyogc3VidHJhY3QgMTZNQiAqLwoKZ3MJbW92dwkkMHgzYzAwLCBPRkZTX0FYKCVicCkJCS8qIHJldHVybiAweDNjMDAgKDE2TUItMU1CKSBpbiBBWCBhbmQgQ1ggKi8KZ3MJbW92dwkkMHgzYzAwLCBPRkZTX0NYKCVicCkKZ3MJbW92dwklYXgsIE9GRlNfQlgoJWJwKQkJLyogc2V0IEJYIGFuZCBEWCB0byBudW1iZXIgb2YgNjRrYiBjaHVua3MgYWJvdmUgMTZNQiAqLwpncwltb3Z3CSVheCwgT0ZGU19EWCglYnApCgpncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCkxmdW5jXzg4aDoKY3MJbW92dwlyYW1faW5fNjRrYl9jaHVua3MsICVheAoJY21wdwkkMHgxMDAsICVheAoJam5hCWI4OF9ub3RfbW9yZV90aGFuMTYKCW1vdncJJDB4MTAwLCAlYXgKYjg4X25vdF9tb3JlX3RoYW4xNjoKCXNobHcJJDYsICVheAoJc3VidwkkMHg0MDAsICVheAkJCS8qIDFzdCBtZWcgZG9lcyBub3QgY291bnQgKi8KCmdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkJCS8qIHJldHVybiBudW1iZXIgb2Yga2lsb2J5dGVzIGJldHdlZW4gMTZNQiBhbmQgMTZNQiBpbiBheCAqLwoKZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJYW5kdwkkMHhmZmZlLCAlYXgJCQkvKiBjbGVhciBjYXJyeSAtLSBmdW5jdGlvbiBzdWNjZWVkZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoKCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyBpbnRlcnJ1cHQgMTZoIC0tIGtleWJvYXJkIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTZoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4MDMsICVheAoJamUJTGZ1bmNfMDNoCgltb3Z3CSQweGZmZmYsICVheAoJcmV0CkxmdW5jXzAzaDoKCXhvcncJJWF4LCAlYXgJCQkvKiBkbyBub3RoaW5nIC0tIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KCXJldAoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxYWggLS0gUENJIGJpb3MKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xYWg6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCWNtcGIJJDB4YjEsICVhaAoJamUJTGZ1bmNfYjFoCgltb3Z3CSQweGZmZmYsICVheAoJcmV0CkxmdW5jX2IxaDoKCWNhbGwJcmVhbG1vZGVfcGNpX2Jpb3MKCXhvcncJJWF4LCAlYXgJCQkvKiBkbyBub3RoaW5nIC0tIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KCXJldAoKCi5nbG9ibCByYW1faW5fNjRrYl9jaHVua3MKLmhpZGRlbiByYW1faW5fNjRrYl9jaHVua3MKLnR5cGUgcmFtX2luXzY0a2JfY2h1bmtzLCBAZnVuY3Rpb24KcmFtX2luXzY0a2JfY2h1bmtzOgoJLndvcmQJMAoKLmdsb2JsIGJpb3NfZXF1aXBtZW50Ci5oaWRkZW4gYmlvc19lcXVpcG1lbnQKLnR5cGUgYmlvc19lcXVpcG1lbnQsIEBmdW5jdGlvbgpiaW9zX2VxdWlwbWVudDoKCS53b3JkCTAK