LyoKICogUmVnZWRpdCAoRHV0Y2ggcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBIYW5zIExlaWRla2tlcgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0RVVENILCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkJlc3RhbmQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImSGVscCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbmZvIC4uLiIsICAgICAgICAgICAgICAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiZSZWdpc3RlcmJlc3RhbmQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICJSZWdpc3RlcmJlc3RhbmQgJmltcG9ydGVyZW4uLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAiUmVnaXN0ZXJiZXN0YW5kICZleHBvcnRlcmVuLi4uIiwgICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlZlcmJpbmRpbmcgJm1ha2VuIG1ldCBuZXR3ZXJrcmVnaXN0ZXIuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiVmVyYmluZGluZyAmdmVyYnJla2VuIG1ldCBuZXR3ZXJrcmVnaXN0ZXIuLi4iLCBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQWYmZHJ1a2tlblx0Q3RybCtQIiwgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImQmV3ZXJrZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImV2lqemlnZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTmlldXciCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZTbGV1dGVsIiwgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAiJlRla2VucmVla3N3YWFyZGUiLCAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFpcmUgd2FhcmRlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkRXT1JELXdhYXJkZSIsICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZWZXJ3aWpkZXJlblx0RGVsIiwgICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIiZOYWFtIHdpanppZ2VuXHRGMiIgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTbGV1dGVsbmFhbSBrb3Bp63JlbiIsICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlpvZWtlblx0Q3RybCtGIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiVm9sZ2VuZGUgWm9la2VuXHRGMyIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJCZWUmbGQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU3RhdHVzYmFsayIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTJnBsaXRzZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZWZXJuaWV1d2VuXHRGNSIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaWV0ZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVG9ldm9lZ2VuIGFhbiBmYXZvcmlldGVuIiwgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImVmVyd2lqZGVyZW4gdWl0IGZhdm9yaWV0ZW4iLCAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgICAgICAsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJkhlbHAiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImSGVscC1vbmRlcndlcnBlbiIsICAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkluZm8iLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpJRERfQUJPVVRCT1ggRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIzMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkluZm8iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1MgcmVnZWRpdCBWZXJzaW9uIDEuMCIsSURDX1NUQVRJQyw0OSwxMCwxMTksOCwKICAgICAgICAgICAgICAgICAgICBTU19OT1BSRUZJWAogICAgTFRFWFQgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDIgUmVhY3RPUyBUZWFtIixJRENfU1RBVElDLDQ5LDIwLDExOSw4CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE5NSw2LDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJOYWFtIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIlR5cGUiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiR2VnZXZlbnMiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICJSZWdpc3Rlci1lZGl0b3IiCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAiT3BkcmFjaHRlbiB2b29yIGhldCB3ZXJrZW4gbWV0IGhldCBnZWhlbGUgcmVnaXN0ZXIiCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiT3BkcmFjaHRlbiB2b29yIGhldCBiZXdlcmtlbiB2YW4gd2FhcmRlbiBvZiBzbGV1dGVscyIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICJPcGRyYWNodGVuIHZvb3IgaGV0IGFhbnBhc3NlbiB2YW4gaGV0IHJlZ2lzdGVydmVuc3RlciIKICAgIElEX0ZBVk9SSVRFU19NRU5VICAgICAgICJPcGRyYWNodGVuIHZvb3IgdG9lZ2FuZyB0b3QgdmFhayBnZWJydWlrdGUgc2xldXRlbHMiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAiT3BkcmFjaHRlbiB2b29yIGhldCB3ZWVyZ2V2ZW4gdmFuIEhlbHAgZW4gaW5mb3JtYXRpZSBvdmVyIGRlIFJlZ2lzdGVyLWVkaXRvciIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJPcGRyYWNodGVuIHZvb3IgaGV0IG1ha2VuIHZhbiBuaWV1d2Ugc2xldXRlbHMgb2Ygd2FhcmRlbiIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIkRlIGdlZ2V2ZW5zIHZhbiBkZSB3YWFyZGUgd2lqemlnZW4iCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiRWVuIG5pZXV3ZSBzbGV1dGVsIHRvZXZvZWdlbiIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICJFZW4gbmlldXdlIHRla2VucmVla3N3YWFyZGUgdG9ldm9lZ2VuIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIkVlbiBuaWV1d2UgYmluYWlyZSB3YWFyZGUgdG9ldm9lZ2VuIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIkVlbiBuaWV1d2UgRFdPUkQtd2FhcmRlIHRvZXZvZWdlbiIgCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIkVlbiB0ZWtzdGJlc3RhbmQgaW4gaGV0IHJlZ2lzdGVyIGltcG9ydGVyZW4iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgcmVnaXN0ZXIgb2YgZWVuIGdlZGVlbHRlIGVydmFuIG5hYXIgZWVuIHRla3N0YmVzdGFuZCBleHBvcnRlcmVuIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVlbiB2ZXJiaW5kaW5nIG1ha2VuIG1ldCBoZXQgcmVnaXN0ZXIgdmFuIGVlbiBleHRlcm5lIGNvbXB1dGVyIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlIHZlcmJpbmRpbmcgbWV0IGhldCByZWdpc3RlciB2YW4gZWVuIGV4dGVybmUgY29tcHV0ZXIgdmVyYnJla2VuIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIkhldCByZWdpc3RlciBvZiBlZW4gZ2VkZWVsdGUgZXJ2YW4gYWZkcnVra2VuIgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiSGVscCB2b29yIGRlIFJlZ2lzdGVyLWVkaXRvciBvcGVuZW4iICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiUHJvZ3JhbW1hZ2VnZXZlbnMsIHZlcnNpZW51bW1lciBlbiBjb3B5cmlnaHRnZWdldmVucyB3ZWVyZ2V2ZW4iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJEZSBSZWdpc3Rlci1lZGl0b3IgYWZzbHVpdGVuIgogICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTICJTbGV1dGVscyB0b2V2b2VnZW4gYWFuIGRlIGxpanN0IG1ldCBmYXZvcmlldGVuIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICJTbGV1dGVscyB2ZXJ3aWpkZXJlbiB1aXQgZGUgbGlqc3QgbWV0IGZhdm9yaWV0ZW4iCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiRGUgc3RhdHVzYmFsayB3ZWVyZ2V2ZW4gb2YgdmVyYmVyZ2VuIgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIkRlIHBvc2l0aWUgdmFuIGRlIHNwbGl0c2luZyB0dXNzZW4gdHdlZSBkZWVsdmVuc3RlcnMgd2lqemlnZW4iCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiSGV0IHZlbnN0ZXIgdmVybmlldXdlbiIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICJEZSBzZWxlY3RpZSB2ZXJ3aWpkZXJlbiIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJEZSBuYWFtIHZhbiBkZSBzZWxlY3RpZSB3aWp6aWdlbiIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICJEZSBuYWFtIHZhbiBkZSBnZXNlbGVjdGVlcmRlIHNsZXV0ZWwgbmFhciBoZXQgS2xlbWJvcmQga29waetyZW4iCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAiRWVuIHRla2VucmVla3Mgem9la2VuIGluIGVlbiBzbGV1dGVsLCBlZW4gd2FhcmRlIG9mIGdlZ2V2ZW5zIgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIkRlIG9wZ2VnZXZlbiB0ZWtzdCBub2dtYWFscyB6b2VrZW4iCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KRU5ECgpJRERfRElBTE9HMiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRGlhbG9nIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXJlbiIsSURDQU5DRUwsMTMwLDI0LDUwLDE0CkVORAoKCi8qCiAqIFRFWFRJTkNMVURFCiAqLwoKMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRQpCRUdJTgogICAgInJlc291cmNlLmhcMCIKRU5ECg==