LyoKICogV2luZUZpbGUKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ERUZBVUxUCgoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICImQXJxdWl2byIgIHsKCQlNRU5VSVRFTSAiQSZicmlyXHRFbnRlciIgLAkJCTEwMQoJCU1FTlVJVEVNICImTW92ZXIuLi5cdEY3IiAsIAkJCTEwNgoJCU1FTlVJVEVNICImQ29waWFyLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICImSW4gQ2xpcGJvYXJkLi4uXHRGOSIgLAkJMTE4CgkJTUVOVUlURU0gIkUmeGNsdWlyXHREZWwiICwJCQkxMDgKCQlNRU5VSVRFTSAiUmUmbm9tZWFyLi4uIiAsCQkJMTA5CgkJTUVOVUlURU0gIiZQcm9wcmllZGFkZXMuLi5cdEFsdCtFbnRlciIgLCBJRF9FRElUX1BST1BFUlRJRVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQyZvbXByaW1pci4uLiIgLAkJMTE5CgkJTUVOVUlURU0gIkRlc2NvbXByaW1pci4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkV4ZWN1JnRhci4uLiIgLAkJCUlEX0VYRUNVVEUKCQlNRU5VSVRFTSAiJkltcHJpbWlyLi4uIiAsIAkJCTEwMgoJCU1FTlVJVEVNICJBJnNzb2NpYXIuLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDcmkmYXIgcGFzdGEuLi4iICwJCQkxMTEKCQlNRU5VSVRFTSAiUCZlc3F1aXNhci4uLiIgLAkJCTEwNAoJCU1FTlVJVEVNICJTZWxlY2lvbmFyIGFycXVpJnZvcy4uLiIgLAkJCTExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIlNhaSZyXHRBbHQrWCIgLCAJCQlJRF9GSUxFX0VYSVQKI2Vsc2UKCQlNRU5VSVRFTSAiU2FpJnIiLCAJCQkJSURfRklMRV9FWElUCiNlbmRpZgoJfQoKCVBPUFVQICImRGlzY28iICB7CgkJTUVOVUlURU0gIiZDb3BpYXIgZGlzY28uLi4iICwJCQkyMDEKCQlNRU5VSVRFTSAiJk5vbWVhciBkaXNjby4uLiIgLAkJCTIwMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRm9ybWF0YXIgZGlzY28uLi4iICwJCQkyMDMKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICImR2VyYXIgZGlzY28gZGUgc2lzdGVtYS4uLiIsIC0xCS8qQEAgKi8KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvbmVjdGEmciB1bmlkYWRlIGRlIHJlZGUiICwJCQkyNTIKCQlNRU5VSVRFTSAiJkRlc2NvbmVjdGFyIHVuaWRhZGUgZGUgcmVkZSIgLAkJMjUzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkMmb21wYXJ0aWxoYXIgY29tby4uLiIgLAkJCTI1NAoJCU1FTlVJVEVNICImUmVtb3ZlciBjb21wYXJ0aWxoYW1lbnRvLi4uIiAsCQkJMjU1CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlNlbGVjaW9uYXIgJnVuaWRhZGUuLi4iICwJCQkyNTEKCX0KCglQT1BVUCAiwSZydm9yZSIgIHsKCQlNRU5VSVRFTSAiJlBy83hpbW8gbu12ZWxcdCsiICwJCQkzMDEKCQlNRU5VSVRFTSAiRXhwYW5kaSZyIHBhc3RhXHQqIiAsCQkzMDIKCQlNRU5VSVRFTSAiRXhwYW5kaXIgJnR1ZG9cdFN0cmcrKiIgLAkJMzAzCgkJTUVOVUlURU0gIlJlY29saGVyIHAmYXN0YVx0LSIgLAkJCTMwNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImSW5kaWNhciBzdWJu7XZlaXMiICwJCQkJNTA1Cgl9CgoJUE9QVVAgIiZFeGliaXIiICB7CgkJTUVOVUlURU0gIsEmcnZvcmUgZSBwYXN0YSIgLAkJCTQxMwoJCU1FTlVJVEVNICJTJm9tZW50ZSDhcnZvcmUiICwJCQk0MTEKCQlNRU5VSVRFTSAiU28mbWVudGUgcGFzdGEiICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkRpdmlkaXIiICwJCQk0MTQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk5vbWUiICwJCQlJRF9WSUVXX05BTUUKCQlNRU5VSVRFTSAiJlRvZG9zIG9zIGRlbGFsaGVzIiAsCQkJCUlEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKCQlNRU5VSVRFTSAiRCZldGFsaGVzIHBhcmNpYWlzLi4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZDbGFzc2lmaWNhciBwb3Igbm9tZSIgLAkJNDA0CgkJTUVOVUlURU0gIkMmbGFzc2lmaWNhciBwb3IgdGlwbyIgLAkJNDA1CgkJTUVOVUlURU0gIkNsJmFzc2lmaWNhciBwb3IgdGFtYW5obyIgLCAJCTQwNgoJCU1FTlVJVEVNICJDbGEmc3NpZmljYXIgcG9yICZkYXRhIiAsIAkJNDA3CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNsYXNzaWZpY2FyICZwb3IuLi4iICwJCQk0MDkKCX0KCglQT1BVUCAiJk9w5/VlcyIgIHsKCQlNRU5VSVRFTSAiJkNvbmZpcm1h5+NvLi4uIiAsCQktMQoJCU1FTlVJVEVNICImRm9udGUuLi4iICwJCQktMQoJCU1FTlVJVEVNICImUGVyc29uYWxpemFyIGJhcnJhIGRlIGZlcnJhbWVudGFzLi4uIiAsIC0xCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkJhcnJhIGQmZSBmZXJyYW1lbnRhcyIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImQmFycmEgZGUgdW5pZGFkZXMiICwJCUlEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIkImYXJyYSBkZSAmc3RhdHVzIiAsCUlEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiVGVsYSBDaGVpYVx0Q3RybCtTaGlmdCtTIiAsIAlJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZNaW5pbWl6YXIgZHVyYW50ZSBvIHVzbyIgLAkJLTEgIC8qIEZJWE1FICovCgkJTUVOVUlURU0gIiZTYWx2YXIgY29uZmlndXJh5/VlcyBhbyBzYWlyIiAsCQkJNTExIC8qIEZJWE1FICovCgl9CgoKCVBPUFVQICImU2VndXJhbudhIiAgewoJCU1FTlVJVEVNICImQWNlc3NvLi4uIiAsCQk2MDUKCQlNRU5VSVRFTSAiJkxvZ2dpbmcuLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJk93bmVyLi4uIiAsCQk2MDcKCX0KCglQT1BVUCAiJkphbmVsYSIgIHsKCQlNRU5VSVRFTSAiJk5vdmEgamFuZWxhIiAsCQkJSURfV0lORE9XX05FVwoJCU1FTlVJVEVNICImRW0gY2FzY2F0YVx0Q3RybCtGNSIgLAkJSURfV0lORE9XX0NBU0NBREUKCQlNRU5VSVRFTSAiTGFkbyBhIGxhZG8gJmhvcml6b250YWxtZW50ZSIgLAkJSURfV0lORE9XX1RJTEVfSE9SWgoJCU1FTlVJVEVNICJMYWRvIGEgbGFkbyAmdmVydGljYWxtZW50ZVx0Q3RybCtGNCIgLAkJSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIk9yZ2FuaXphciBhdXRvbWF0aWNhbWVudGUiICwJCUlEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKCQlNRU5VSVRFTSAiJk9yZ2FuaXphciDtY29uZXMiICwJCUlEX1dJTkRPV19BUlJBTkdFCgkJTUVOVUlURU0gIiZBdHVhbGl6YXJcdEY1IiAsCQlJRF9SRUZSRVNICgl9CgoJUE9QVVAgIkFqJnVkYSIgIHsKCQlNRU5VSVRFTSAiJlTzcGljb3MgZGEgYWp1ZGFcdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICJQZXNxdWlzYXIuLi4iICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZVc2FuZG8gYSBhanVkYSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiJkluZm9ybWHn9WVzLi4uIiAgewoJCSAgTUVOVUlURU0gIlNvYnJlIG8gJldpbmUuLi4iICwJCQlJRF9BQk9VVF9XSU5FCi8qCiAqCQkgIE1FTlVJVEVNICImTGljZW5zZS4uLiIJCUlEX0xJQ0VOU0UKICoJCSAgTUVOVUlURU0gIiZOTyBXQVJSQU5UWSIJCUlEX05PX1dBUlJBTlRZCiAqLwoJCX0KCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkV4ZWN1dGFyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZDb21hbmRvOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiJk1pbmltaXphZG8iICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJDYW5jZWxhciIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImQWp1ZGEiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=