LyoKICogIE5vdGVwYWQgKER1dGNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZCZXN0YW5kIiB7CiAgTUVOVUlURU0gIiZOaWV1dyIsCQkgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJk9wZW5lbi4uLlx0Q3RybCtPIiwJICAgICBDTURfT1BFTgogIE1FTlVJVEVNICJPJnBzbGFhblx0Q3RybCtTIiwJICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJPcHMmbGFhbiBhbHMuLi4iLAkgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZmRydWtrZW4uLi5cdEN0cmwrUCIsCSAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlBhZ2luYS1pbiZzdGVsbGluZy4uLiIsICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJQcmludGVyaW5zdGVsbGluZ2VuLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFmc2x1aXRlbiIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICJCZSZ3ZXJrZW4iIHsKICBNRU5VSVRFTSAiJk9uZ2VkYWFuIG1ha2VuXHRDdHJsK1oiLCAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJLJm5pcHBlblx0Q3RybCtYIiwgICAgICAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJktvcGnrcmVuXHRDdHJsK0MiLCAgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImUGxha2tlblx0Q3RybCtWIiwgICAgICAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImVmVyd2lqZGVyZW5cdERlbCIsICAgICAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFsbGVzIHNlbGVjdGVyZW5cdEN0cmwrQSIsICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICJUaWpkLyZkYXR1bVx0RjUiLCAgICAgICAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQSZ1dG9tYXRpc2NoZSB0ZXJ1Z2xvb3AiLCAgICBDTURfV1JBUAogIE1FTlVJVEVNICImTGV0dGVydHlwZSBpbnN0ZWxsZW4uLi4iLCAgIENNRF9GT05UCiB9ClBPUFVQICImWm9la2VuIiB7CiAgTUVOVUlURU0gIiZab2VrZW4uLi5cdEN0cmwrWiIsICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiViZvbGdlbmRlIHpvZWtlblx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZWZXJ2YW5nZW4uLi5cdEN0cmwrSCIsIENNRF9SRVBMQUNFCiB9ClBPUFVQICImSGVscCIgewogIE1FTlVJVEVNICImSGVscC1vbmRlcndlcnBlbiIsICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImWm9la2VuLi4uIiwgICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkh1bHAgYmlqIEhlbHAiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImT3ZlciBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlBhZ2luYS1pbnN0ZWxsaW5nIgp7CkxURVhUICAgICImS29wdGVrc3Q6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZWb2V0dGVrc3Q6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2VzIChtaWxsaW1ldGVyKToiLCAgMHgxNDQsICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiTGkmbmtzOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQm92ZW46IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlJlY2h0czoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZPbmRlcjoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICBJRE9LLCAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGVyZW4iLCBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhlbHAiLCAgICAgSURIRUxQLCAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdpbmEgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2xhZGJsb2siClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGT1VUIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0FBUlNDSFVXSU5HIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpZSIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobmFhbWxvb3MpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUgYmVzdGFuZGVuICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVrc3RiZXN0YW5kZW4gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgYmVzdGFuZCAnJXMnIGlzIHRlIGdyb290IHZvb3IgS2xhZGJsb2suXG4gXApHZWJydWlrIGVlbiBhbmRlcmUgZWRpdG9yLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlUgaGVlZnQgZ2VlbiB0ZWtzdCBpbmdldm9lcmQuIFwKXG5UeXBlIHV3IHRla3N0IGVuIHByb2JlZXIgaGV0IG5vZ21hYWxzIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGV0IGJlc3RhbmQgJyVzJ1xuYmVzdGFhdCBuaWV0XG5cbiBcCldpbHQgdSBlZW4gbmlldXcgYmVzdGFuZCBtYWtlbj8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgYmVzdGFuZCAnJXMnXG5pcyBnZXdpanppZ2RcblxuIFwKV2lsdCB1IGRlIHdpanppZ2luZ2VuIG9wc2xhYW4/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBrYW4gbmlldCB3b3JkZW4gZ2V2b25kZW4uIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAiT252b2xkb2VuZGUgZ2VoZXVnZW4uIFwKXG5TbHVpdCBlZW4gb2YgbWVlciBhcHBsaWNhdGllcyBvbSBkZSBob2V2ZWVsaGVpZFxuYmVzY2hpa2JhYXIgZ2VoZXVnZW4gdGUgdmVyZ3JvdGVuLiIKfQo=